Skip to content

Commit d345882

Browse files
committed
refactor CMake scripts: centralize target linking functionality
1 parent 6671988 commit d345882

File tree

9 files changed

+93
-58
lines changed

9 files changed

+93
-58
lines changed

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ include(cmake/modes.cmake)
3131
include(cmake/sanitizers.cmake)
3232
include(cmake/json.cmake)
3333
include(cmake/libenvpp.cmake)
34+
include(cmake/stb.cmake)
3435

3536
################# Parallel programming technologies #################
3637

cmake/gtest.cmake

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,15 @@ ExternalProject_Add(
2424
"${CMAKE_COMMAND}" --install
2525
"${CMAKE_CURRENT_BINARY_DIR}/ppc_googletest/build" --prefix
2626
"${CMAKE_CURRENT_BINARY_DIR}/ppc_googletest/install")
27+
28+
function(ppc_link_gtest exec_func_lib)
29+
# Add external project include directories
30+
target_include_directories(
31+
${exec_func_lib}
32+
PUBLIC ${CMAKE_SOURCE_DIR}/3rdparty/googletest/googletest/include)
33+
34+
add_dependencies(${exec_func_lib} ppc_googletest)
35+
target_link_directories(${exec_func_lib} PUBLIC
36+
"${CMAKE_BINARY_DIR}/ppc_googletest/install/lib")
37+
target_link_libraries(${exec_func_lib} PUBLIC gtest gtest_main)
38+
endfunction()

cmake/json.cmake

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,13 @@ ExternalProject_Add(
1919
INSTALL_COMMAND
2020
"${CMAKE_COMMAND}" --install "${CMAKE_CURRENT_BINARY_DIR}/ppc_json/build"
2121
--prefix "${CMAKE_CURRENT_BINARY_DIR}/ppc_json/install")
22+
23+
function(ppc_link_json exec_func_lib)
24+
# Add external project include directories
25+
target_include_directories(${exec_func_lib}
26+
PUBLIC ${CMAKE_SOURCE_DIR}/3rdparty/json/include)
27+
28+
add_dependencies(${exec_func_lib} ppc_json)
29+
target_link_directories(${exec_func_lib} INTERFACE
30+
"${CMAKE_BINARY_DIR}/ppc_json/install/include")
31+
endfunction()

cmake/libenvpp.cmake

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,20 @@ if(WIN32)
3838
else()
3939
set(PPC_ENVPP_LIB_NAME envpp)
4040
endif()
41+
42+
function(ppc_link_envpp exec_func_lib)
43+
# Add external project include directories
44+
target_include_directories(
45+
${exec_func_lib} PUBLIC ${CMAKE_SOURCE_DIR}/3rdparty/libenvpp/include)
46+
target_include_directories(
47+
${exec_func_lib} SYSTEM
48+
PUBLIC ${CMAKE_SOURCE_DIR}/3rdparty/libenvpp/external/fmt/include)
49+
50+
add_dependencies(${exec_func_lib} ppc_libenvpp)
51+
target_link_directories(${exec_func_lib} PUBLIC
52+
"${CMAKE_BINARY_DIR}/ppc_libenvpp/install/lib")
53+
target_link_directories(${exec_func_lib} PUBLIC
54+
"${CMAKE_BINARY_DIR}/ppc_libenvpp/build")
55+
target_link_libraries(${exec_func_lib} PUBLIC ${PPC_ENVPP_LIB_NAME})
56+
target_link_libraries(${exec_func_lib} PUBLIC ${PPC_FMT_LIB_NAME})
57+
endfunction()

cmake/mpi.cmake

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,19 @@
11
find_package(MPI REQUIRED)
22
if(NOT MPI_FOUND)
33
message(FATAL_ERROR "MPI NOT FOUND")
4-
endif(MPI_FOUND)
4+
endif()
5+
6+
function(ppc_link_mpi exec_func_lib)
7+
find_package(MPI REQUIRED)
8+
if(MPI_COMPILE_FLAGS)
9+
set_target_properties(${exec_func_lib} PROPERTIES COMPILE_FLAGS
10+
"${MPI_COMPILE_FLAGS}")
11+
endif(MPI_COMPILE_FLAGS)
12+
13+
if(MPI_LINK_FLAGS)
14+
set_target_properties(${exec_func_lib} PROPERTIES LINK_FLAGS
15+
"${MPI_LINK_FLAGS}")
16+
endif(MPI_LINK_FLAGS)
17+
target_include_directories(${exec_func_lib} PUBLIC ${MPI_INCLUDE_PATH})
18+
target_link_libraries(${exec_func_lib} PUBLIC ${MPI_LIBRARIES})
19+
endfunction()

cmake/onetbb.cmake

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,16 @@ if(cmake_build_type_lower STREQUAL "debug")
4242
else()
4343
set(PPC_TBB_LIB_NAME tbb)
4444
endif()
45+
46+
function(ppc_link_tbb exec_func_lib)
47+
# Add external project include directories
48+
target_include_directories(${exec_func_lib}
49+
PUBLIC ${CMAKE_SOURCE_DIR}/3rdparty/onetbb/include)
50+
51+
add_dependencies(${exec_func_lib} ppc_onetbb)
52+
target_link_directories(${exec_func_lib} PUBLIC
53+
${CMAKE_BINARY_DIR}/ppc_onetbb/install/lib)
54+
if(NOT MSVC)
55+
target_link_libraries(${exec_func_lib} PUBLIC ${PPC_TBB_LIB_NAME})
56+
endif()
57+
endfunction()

cmake/openmp.cmake

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,13 @@ if(OpenMP_FOUND)
2323
else(OpenMP_FOUND)
2424
message(FATAL_ERROR "OpenMP NOT FOUND")
2525
endif(OpenMP_FOUND)
26+
27+
function(ppc_link_threads exec_func_lib)
28+
target_link_libraries(${exec_func_lib} PUBLIC Threads::Threads)
29+
endfunction()
30+
31+
function(ppc_link_openmp exec_func_lib)
32+
find_package(OpenMP REQUIRED)
33+
target_link_libraries(${exec_func_lib} PUBLIC ${OpenMP_libomp_LIBRARY}
34+
OpenMP::OpenMP_CXX)
35+
endfunction()

cmake/stb.cmake

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
function(ppc_link_stb exec_func_lib)
2+
add_library(stb_image STATIC
3+
${CMAKE_SOURCE_DIR}/3rdparty/stb_image_wrapper.cpp)
4+
target_include_directories(stb_image PUBLIC ${CMAKE_SOURCE_DIR}/3rdparty/stb)
5+
target_link_libraries(${exec_func_lib} PUBLIC stb_image)
6+
endfunction()

modules/core/CMakeLists.txt

Lines changed: 8 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -29,63 +29,14 @@ target_include_directories(
2929
${exec_func_lib} PUBLIC ${CMAKE_SOURCE_DIR}/3rdparty
3030
${CMAKE_SOURCE_DIR}/modules ${CMAKE_SOURCE_DIR}/tasks)
3131

32-
# Add external project include directories
33-
target_include_directories(
34-
${exec_func_lib}
35-
PUBLIC ${CMAKE_SOURCE_DIR}/3rdparty/onetbb/include
36-
${CMAKE_SOURCE_DIR}/3rdparty/json/include
37-
${CMAKE_SOURCE_DIR}/3rdparty/googletest/googletest/include
38-
${CMAKE_SOURCE_DIR}/3rdparty/libenvpp/include)
39-
target_include_directories(
40-
${exec_func_lib} SYSTEM
41-
PUBLIC ${CMAKE_SOURCE_DIR}/3rdparty/libenvpp/external/fmt/include)
42-
43-
add_dependencies(${exec_func_lib} ppc_libenvpp)
44-
target_link_directories(${exec_func_lib} PUBLIC
45-
"${CMAKE_BINARY_DIR}/ppc_libenvpp/install/lib")
46-
target_link_directories(${exec_func_lib} PUBLIC
47-
"${CMAKE_BINARY_DIR}/ppc_libenvpp/build")
48-
target_link_libraries(${exec_func_lib} PUBLIC ${PPC_ENVPP_LIB_NAME})
49-
target_link_libraries(${exec_func_lib} PUBLIC ${PPC_FMT_LIB_NAME})
50-
51-
add_dependencies(${exec_func_lib} ppc_json)
52-
target_link_directories(${exec_func_lib} INTERFACE
53-
"${CMAKE_BINARY_DIR}/ppc_json/install/include")
54-
55-
add_dependencies(${exec_func_lib} ppc_googletest)
56-
target_link_directories(${exec_func_lib} PUBLIC
57-
"${CMAKE_BINARY_DIR}/ppc_googletest/install/lib")
58-
target_link_libraries(${exec_func_lib} PUBLIC gtest gtest_main)
59-
60-
target_link_libraries(${exec_func_lib} PUBLIC Threads::Threads)
61-
62-
find_package(OpenMP REQUIRED)
63-
target_link_libraries(${exec_func_lib} PUBLIC ${OpenMP_libomp_LIBRARY}
64-
OpenMP::OpenMP_CXX)
65-
66-
add_dependencies(${exec_func_lib} ppc_onetbb)
67-
target_link_directories(${exec_func_lib} PUBLIC
68-
${CMAKE_BINARY_DIR}/ppc_onetbb/install/lib)
69-
if(NOT MSVC)
70-
target_link_libraries(${exec_func_lib} PUBLIC ${PPC_TBB_LIB_NAME})
71-
endif()
72-
73-
find_package(MPI REQUIRED)
74-
if(MPI_COMPILE_FLAGS)
75-
set_target_properties(${exec_func_lib} PROPERTIES COMPILE_FLAGS
76-
"${MPI_COMPILE_FLAGS}")
77-
endif(MPI_COMPILE_FLAGS)
78-
79-
if(MPI_LINK_FLAGS)
80-
set_target_properties(${exec_func_lib} PROPERTIES LINK_FLAGS
81-
"${MPI_LINK_FLAGS}")
82-
endif(MPI_LINK_FLAGS)
83-
target_include_directories(${exec_func_lib} PUBLIC ${MPI_INCLUDE_PATH})
84-
target_link_libraries(${exec_func_lib} PUBLIC ${MPI_LIBRARIES})
85-
86-
add_library(stb_image STATIC ${CMAKE_SOURCE_DIR}/3rdparty/stb_image_wrapper.cpp)
87-
target_include_directories(stb_image PUBLIC ${CMAKE_SOURCE_DIR}/3rdparty/stb)
88-
target_link_libraries(${exec_func_lib} PUBLIC stb_image)
32+
ppc_link_envpp(${exec_func_lib})
33+
ppc_link_json(${exec_func_lib})
34+
ppc_link_gtest(${exec_func_lib})
35+
ppc_link_threads(${exec_func_lib})
36+
ppc_link_openmp(${exec_func_lib})
37+
ppc_link_tbb(${exec_func_lib})
38+
ppc_link_mpi(${exec_func_lib})
39+
ppc_link_stb(${exec_func_lib})
8940

9041
add_executable(${exec_func_tests} ${FUNC_TESTS_SOURCE_FILES})
9142

0 commit comments

Comments
 (0)