Skip to content

Commit a6cf1f5

Browse files
committed
Implement resolution of best preprocessor in build system
1 parent 97934a6 commit a6cf1f5

File tree

3 files changed

+17
-17
lines changed

3 files changed

+17
-17
lines changed

.github/workflows/cd.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ jobs:
2929
cmake-version: "3.20"
3030

3131
- name: Install cpp
32-
run: sudo apt-get update && sudo apt-get install -y gcc g++
32+
run: sudo apt-get update && sudo apt-get install -y gcc
3333

3434
- name: Restore dotnet tools
3535
run: dotnet tool restore

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ jobs:
3737

3838
- name: Install cpp (Linux)
3939
if: runner.os == 'Linux'
40-
run: sudo apt-get update && sudo apt-get install -y gcc g++
40+
run: sudo apt-get update && sudo apt-get install -y gcc
4141

4242
- name: Install cpp (macOS)
4343
if: runner.os == 'macOS'

CMakeLists.txt

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,25 @@ project(OpenLanguage)
33

44
# --- C++ Preprocessor Command Resolution ---
55

6-
# Attempt to resolve C preprocessor in priority order: clang++, g++, cpp
7-
find_program(CLANGPP_EXECUTABLE NAMES clang++)
8-
find_program(GPP_EXECUTABLE NAMES g++)
6+
# Attempt to resolve C preprocessor in priority order: gcc, clang, cpp
7+
find_program(GCC_EXECUTABLE NAMES gcc)
8+
find_program(CLANG_EXECUTABLE NAMES clang)
99
find_program(CPP_EXECUTABLE NAMES cpp)
1010

11-
if(CLANGPP_EXECUTABLE)
12-
set(CPP_COMMAND ${CLANGPP_EXECUTABLE})
13-
set(CPP_FLAGS -E -P)
14-
message(STATUS "Using clang++ as C preprocessor: ${CPP_COMMAND}")
15-
elseif(GPP_EXECUTABLE)
16-
set(CPP_COMMAND ${GPP_EXECUTABLE})
17-
set(CPP_FLAGS -E -P)
18-
message(STATUS "Using g++ as C preprocessor: ${CPP_COMMAND}")
11+
if(GCC_EXECUTABLE)
12+
set(CPP_COMMAND ${GCC_EXECUTABLE})
13+
set(CPP_FLAGS -E -P -fdirectives-only -x assembler-with-cpp)
14+
message(STATUS "Using gcc as C preprocessor: ${CPP_COMMAND}")
15+
elseif(CLANG_EXECUTABLE)
16+
set(CPP_COMMAND ${CLANG_EXECUTABLE})
17+
set(CPP_FLAGS -E -P -fdirectives-only -x c++ -Wno-invalid-pp-token -nostdinc -nostdlibinc -fkeep-system-includes)
18+
message(STATUS "Using clang as C preprocessor: ${CPP_COMMAND}")
1919
elseif(CPP_EXECUTABLE)
2020
set(CPP_COMMAND ${CPP_EXECUTABLE})
21-
set(CPP_FLAGS -P)
21+
set(CPP_FLAGS -P -Wno-invalid-pp-token)
2222
message(STATUS "Using cpp as C preprocessor: ${CPP_COMMAND}")
2323
else()
24-
message(FATAL_ERROR "No C preprocessor found. Please install clang++, g++, or cpp.")
24+
message(FATAL_ERROR "No C preprocessor found. Please install clang, gcc, or cpp.")
2525
endif()
2626

2727
# --- RID Detection and Configuration ---
@@ -101,7 +101,7 @@ foreach(YACC_FILE ${YACC_FILES})
101101
add_custom_command(
102102
TARGET process PRE_BUILD
103103
COMMAND ${CMAKE_COMMAND} -E make_directory ${OUTPUT_DIR}
104-
COMMAND ${CPP_COMMAND} ${CPP_FLAGS} ${YACC_FILE} -o ${OUTPUT_FILE} -Wno-invalid-pp-token
104+
COMMAND ${CPP_COMMAND} ${CPP_FLAGS} ${YACC_FILE} -o ${OUTPUT_FILE}
105105
COMMENT "Processing ${YACC_FILE} -> ${OUTPUT_FILE} using ${CPP_COMMAND}"
106106
)
107107
endforeach()
@@ -117,7 +117,7 @@ foreach(LEX_FILE ${LEX_FILES})
117117
add_custom_command(
118118
TARGET process PRE_BUILD
119119
COMMAND ${CMAKE_COMMAND} -E make_directory ${OUTPUT_DIR}
120-
COMMAND ${CPP_COMMAND} ${CPP_FLAGS} ${LEX_FILE} -o ${OUTPUT_FILE} -Wno-invalid-pp-token
120+
COMMAND ${CPP_COMMAND} ${CPP_FLAGS} ${LEX_FILE} -o ${OUTPUT_FILE}
121121
COMMENT "Processing ${LEX_FILE} -> ${OUTPUT_FILE} using ${CPP_COMMAND}"
122122
)
123123
endforeach()

0 commit comments

Comments
 (0)