Skip to content

Commit 25cd254

Browse files
committed
Fix dependency tracking
- Make sure the *.cpp.o.d and link.d files are created to ensure that CMake recompiles a target when its dependencies change - Also add release type specific flags to the GCC pass
1 parent 335f93e commit 25cd254

File tree

1 file changed

+34
-10
lines changed

1 file changed

+34
-10
lines changed

refl/CMakeLists.txt

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,14 @@ message(STATUS "Compiling EDG versions with ${CMAKE_CXX_COMPILER} and ${EDG_GCC_
1010
message(STATUS "Linking EDG versions with ${EDG_LINKER}")
1111

1212
set(CMAKE_DEPFILE_FLAGS_CXX "")
13+
message(STATUS "CMAKE_DEPFILE_FLAGS_CXX: ${CMAKE_DEPFILE_FLAGS_CXX}")
1314

14-
set(EDG_CPFE_DEFAULT_OPTIONS --g++ --set_flag=reflection --c++26 --gnu 140200 -tlocal --no_strict_gnu --no_char8_t)
15+
set(EDG_CPFE_DEFAULT_OPTIONS --g++ --set_flag=reflection --c++26 --gnu 140200 -tlocal --no_strict_gnu --no_char8_t
16+
--extern_inline)
1517
set(EDG_DEFAULT_DEFINES __CHAR_BIT__=8 _POSIX_SOURCE)
16-
set(EDG_C_TO_OBJ_DEFAULT_OPTIONS -Dsetjmp=_setjmp -Dva_copy=__va_copy -falign-functions=4 -march=skylake ${CMAKE_CXX_FLAGS})
18+
set(EDG_C_TO_OBJ_DEFAULT_OPTIONS -Dsetjmp=_setjmp -Dva_copy=__va_copy -falign-functions=4 -march=skylake
19+
${CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE_UPPER}} ${CMAKE_CXX_FLAGS}
20+
-finline-functions)
1721
separate_arguments(EDG_C_TO_OBJ_DEFAULT_OPTIONS)
1822
set(EDG_C_TO_OBJ_LIBRARIES -shared-libgcc -lstdc++ -lgcc_s -lpthread -lm)
1923

@@ -37,7 +41,7 @@ separate_arguments(sys_incl_dirs)
3741

3842
#### Options that are set differently for edgcpfe than for g++ ####
3943
unset(CMAKE_CXX_STANDARD)
40-
44+
set(CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE_UPPER} "")
4145
set(CMAKE_CXX_FLAGS "")
4246

4347
# Replaces the default -isystem with --sys_include
@@ -56,7 +60,7 @@ unset(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES)
5660

5761
# Do not add -Wl, rpath flags to the linker command line (edg_prelink does not support them)
5862
set(CMAKE_SKIP_RPATH TRUE)
59-
# Do not add -Wl, --dependency-file flag to the linker command line
63+
# Do not add -Wl, --dependency-file flag to the edg_prelink command
6064
set(CMAKE_LINK_DEPENDS_USE_LINKER FALSE)
6165

6266
###########
@@ -66,24 +70,43 @@ include(CMakePrintHelpers)
6670
function(add_edg_executable target sources)
6771
add_executable(${target} ${sources})
6872
target_include_directories(${target} SYSTEM AFTER PUBLIC ${sys_incl_dirs} $ENV{EDG_BASE}/include)
69-
target_include_directories(${target} PUBLIC ${PROJECT_SOURCE_DIR} reflmempp/include reflmempp/include/kokkos/include/mdspan)
73+
target_include_directories(${target} PUBLIC ${PROJECT_SOURCE_DIR} reflmempp/include
74+
reflmempp/include/kokkos/include/mdspan)
7075

7176
target_compile_options(${target} PUBLIC ${EDG_CPFE_DEFAULT_OPTIONS})
7277
# target_compile_options(${target} PUBLIC --error_limit=1) # for debugging
7378

7479
# By products
7580
target_compile_options(${target} PUBLIC --gen_c_file_name=CMakeFiles/${target}.dir/${target}.int.c
7681
--ii_file=CMakeFiles/${target}.dir/${target}.cpp.ii
77-
--template_info_file=CMakeFiles/${target}.dir/${target}.cpp.ti)
82+
--template_info_file=CMakeFiles/${target}.dir/${target}.cpp.ti
83+
-LCMakeFiles/${target}.dir/${target}.diagnostics)
7884

7985
target_compile_definitions(${target} PUBLIC ${EDG_DEFAULT_DEFINES})
8086

87+
add_custom_command(
88+
TARGET ${target}
89+
PRE_BUILD
90+
COMMAND echo "CMakeFiles/${target}.dir/${target}.cpp.o: \\\\" > CMakeFiles/${target}.dir/${target}.cpp.o.d
91+
COMMAND ${CMAKE_CXX_COMPILER} $<TARGET_PROPERTY:${target},COMPILE_OPTIONS>
92+
"-D$<JOIN:$<TARGET_PROPERTY:${target},COMPILE_DEFINITIONS>,;-D>"
93+
"-I$<JOIN:$<TARGET_PROPERTY:${target},INCLUDE_DIRECTORIES>,;-I>"
94+
--dependencies ${sources} | sed "s/^${target}.o://" | sed "'s/$$/ \\\\/'"
95+
>> CMakeFiles/${target}.dir/${target}.cpp.o.d
96+
COMMENT "Add dependencies to CMakeFiles/${target}.dir/${target}.cpp.o.d"
97+
BYPRODUCTS CMakeFiles/${target}.dir/${target}.cpp.o.d
98+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
99+
COMMAND_EXPAND_LISTS
100+
)
101+
81102
add_custom_command(
82103
TARGET ${target}
83104
PRE_LINK
84-
COMMAND ${EDG_GCC_TO_USE} ${EDG_C_TO_OBJ_DEFAULT_OPTIONS} -g -c CMakeFiles/${target}.dir/${target}.int.c
105+
COMMAND ${EDG_GCC_TO_USE} ${EDG_C_TO_OBJ_DEFAULT_OPTIONS} -c CMakeFiles/${target}.dir/${target}.int.c
85106
COMMAND mv -f ${target}.int.o CMakeFiles/${target}.dir/${target}.cpp.o
86-
BYPRODUCTS CMakeFiles/${target}.dir/${target}.cpp.o
107+
BYPRODUCTS CMakeFiles/${target}.dir/${target}.int.c CMakeFiles/${target}.dir/${target}.cpp.ii
108+
CMakeFiles/${target}.dir/${target}.cpp.ti CMakeFiles/${target}.dir/${target}.cpp.o
109+
CMakeFiles/${target}.dir/${target}.diagnostics
87110
COMMENT "Building CMakeFiles/${target}.dir/${target}.cpp.o"
88111
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
89112
)
@@ -108,9 +131,10 @@ function(add_edg_executable target sources)
108131
TARGET ${target}
109132
POST_BUILD
110133
COMMAND ${EDG_GCC_TO_USE} ${EDG_C_TO_OBJ_DEFAULT_OPTIONS} "$<$<BOOL:${link_dirs}>:-L$<JOIN:${link_dirs},;-L>>"
111-
-o ${target} CMakeFiles/${target}.dir/${target}.cpp.o ${link_lib_paths} ${EDG_C_TO_OBJ_LIBRARIES}
112-
-lrt -lC
134+
-Wl,--dependency-file=CMakeFiles/${target}.dir/link.d -o ${target}
135+
CMakeFiles/${target}.dir/${target}.cpp.o ${link_lib_paths} ${EDG_C_TO_OBJ_LIBRARIES} -lrt -lC
113136
COMMENT "Complete linking"
137+
BYPRODUCTS ${target} CMakeFiles/${target}.dir/link.d
114138
COMMAND_EXPAND_LISTS
115139
)
116140
endfunction()

0 commit comments

Comments
 (0)