Skip to content

Commit 236dc9a

Browse files
committed
cmake: simplify target wiring (no externals helper)
1 parent 7058586 commit 236dc9a

13 files changed

Lines changed: 58 additions & 118 deletions

File tree

CMakeLists.txt

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,21 @@ set(CMAKE_CXX_STANDARD 20)
2525
set(CMAKE_CXX_STANDARD_REQUIRED ON)
2626
set(CMAKE_CXX_EXTENSIONS OFF)
2727

28+
# Output directories (set globally; avoid per-target output directory boilerplate).
29+
if(CMAKE_CONFIGURATION_TYPES)
30+
foreach(_cfg IN LISTS CMAKE_CONFIGURATION_TYPES)
31+
string(TOUPPER "${_cfg}" _cfg_upper)
32+
string(TOLOWER "${_cfg}" _cfg_lower)
33+
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${_cfg_upper} "${CMAKE_BINARY_DIR}/bin/${_cfg_lower}")
34+
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_${_cfg_upper} "${CMAKE_BINARY_DIR}/lib/${_cfg_lower}")
35+
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${_cfg_upper} "${CMAKE_BINARY_DIR}/lib/${_cfg_lower}")
36+
endforeach()
37+
else()
38+
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
39+
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
40+
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
41+
endif()
42+
2843
# Project data / assets (used by apps/tests).
2944
set(ITLABAI_DOCS_DIR "${PROJECT_SOURCE_DIR}/docs" CACHE PATH "Project docs root")
3045
set(ITLABAI_MODELS_JSON_DIR "${ITLABAI_DOCS_DIR}/jsons" CACHE PATH "Directory with generated model json files")
@@ -100,4 +115,3 @@ if(BUILD_TESTING)
100115
endif()
101116

102117
include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/Packaging.cmake")
103-

app/Accuracy/CMakeLists.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@ target_link_libraries(itlabai_acc_lib
1010
PUBLIC
1111
itlabai_layers_lib
1212
)
13-
itlabai_link_externals(itlabai_acc_lib opencv tbb kokkos openmp)
13+
target_link_libraries(itlabai_acc_lib PUBLIC OpenCV::opencv_world TBB::tbb Kokkos_imported)
14+
if(ITLABAI_ENABLE_OPENMP AND TARGET OpenMP::OpenMP_CXX)
15+
target_link_libraries(itlabai_acc_lib PUBLIC OpenMP::OpenMP_CXX)
16+
endif()
1417
itlabai_target_defaults(itlabai_acc_lib)
1518
target_compile_definitions(itlabai_acc_lib PUBLIC IMAGE1_PATH="${ITLABAI_TEST_DATA_DIR}/lena.jpg")
1619

app/Graph/CMakeLists.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@ target_link_libraries(itlabai_build_graph_lib PUBLIC
1111
itlabai_layers_lib
1212
itlabai_layers_onednn_lib
1313
)
14-
itlabai_link_externals(itlabai_build_graph_lib opencv tbb kokkos openmp)
14+
target_link_libraries(itlabai_build_graph_lib PUBLIC OpenCV::opencv_world TBB::tbb Kokkos_imported)
15+
if(ITLABAI_ENABLE_OPENMP AND TARGET OpenMP::OpenMP_CXX)
16+
target_link_libraries(itlabai_build_graph_lib PUBLIC OpenMP::OpenMP_CXX)
17+
endif()
1518
target_compile_definitions(itlabai_build_graph_lib PUBLIC
1619
IMAGE28_PATH="${ITLABAI_TEST_DATA_DIR}/28/"
1720
IMAGENET_ACC="${ITLABAI_IMAGENET_ACC_DIR}/"
@@ -46,9 +49,6 @@ add_executable(itlabai_onnx_subgraphs_exe ${ONNX_SUBGRAPHS_MAIN})
4649
set_target_properties(itlabai_onnx_subgraphs_exe PROPERTIES OUTPUT_NAME "itlabai_onnx_subgraphs")
4750
target_link_libraries(itlabai_onnx_subgraphs_exe PRIVATE itlabai_build_graph_lib)
4851
add_dependencies(itlabai_onnx_subgraphs_exe itlabai_fetch_test_data)
49-
if(ITLABAI_ENABLE_OPENMP AND TARGET OpenMP::OpenMP_CXX)
50-
target_link_libraries(itlabai_onnx_subgraphs_exe PRIVATE OpenMP::OpenMP_CXX)
51-
endif()
5252
target_link_libraries(itlabai_onnx_subgraphs_exe PRIVATE itlabai_graph_transformations_lib)
5353
itlabai_target_defaults(itlabai_onnx_subgraphs_exe)
5454
itlabai_apply_runtime_rpath(itlabai_onnx_subgraphs_exe)

app/ReaderImage/CMakeLists.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@ add_library(itlabai_reader_image_lib STATIC ${READER_IMG_HEADERS} ${READER_IMG_S
44

55
set_target_properties(itlabai_reader_image_lib PROPERTIES LINKER_LANGUAGE CXX)
66

7-
itlabai_link_externals(itlabai_reader_image_lib opencv tbb openmp)
7+
target_link_libraries(itlabai_reader_image_lib PUBLIC OpenCV::opencv_world TBB::tbb)
8+
if(ITLABAI_ENABLE_OPENMP AND TARGET OpenMP::OpenMP_CXX)
9+
target_link_libraries(itlabai_reader_image_lib PUBLIC OpenMP::OpenMP_CXX)
10+
endif()
811
itlabai_target_defaults(itlabai_reader_image_lib)
912
target_compile_definitions(itlabai_reader_image_lib PUBLIC IMAGE1_PATH="${ITLABAI_TEST_DATA_DIR}/lena.jpg")
1013

cmake/ProjectDefaults.cmake

Lines changed: 5 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,8 @@
1-
# Common helper functions and defaults for project targets
1+
# Common helper functions and defaults for project targets.
2+
#
3+
# Keep this file lightweight: it should not implement a "mini framework".
24

35
function(itlabai_target_defaults target_name)
4-
if(CMAKE_CONFIGURATION_TYPES)
5-
foreach(_cfg IN LISTS CMAKE_CONFIGURATION_TYPES)
6-
string(TOUPPER "${_cfg}" _cfg_upper)
7-
string(TOLOWER "${_cfg}" _cfg_lower)
8-
set_target_properties(${target_name} PROPERTIES
9-
ARCHIVE_OUTPUT_DIRECTORY_${_cfg_upper} "${CMAKE_BINARY_DIR}/lib/${_cfg_lower}"
10-
LIBRARY_OUTPUT_DIRECTORY_${_cfg_upper} "${CMAKE_BINARY_DIR}/lib/${_cfg_lower}"
11-
RUNTIME_OUTPUT_DIRECTORY_${_cfg_upper} "${CMAKE_BINARY_DIR}/bin/${_cfg_lower}"
12-
)
13-
endforeach()
14-
else()
15-
set_target_properties(${target_name} PROPERTIES
16-
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
17-
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
18-
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
19-
)
20-
endif()
21-
226
if(MSVC)
237
target_compile_options(${target_name} PRIVATE /W4 /permissive- /EHsc)
248
if(ITLABAI_WERROR)
@@ -30,6 +14,7 @@ function(itlabai_target_defaults target_name)
3014
target_compile_options(${target_name} PRIVATE -Werror)
3115
endif()
3216
endif()
17+
3318
target_compile_features(${target_name} PRIVATE cxx_std_20)
3419

3520
# Apply project feature defines to every in-tree target.
@@ -43,91 +28,6 @@ function(itlabai_target_defaults target_name)
4328
endif()
4429
endfunction()
4530

46-
function(itlabai_use_opencv target_name)
47-
itlabai_use_externals_scope(_scope ${target_name})
48-
target_link_libraries(${target_name} ${_scope} OpenCV::opencv_world)
49-
get_target_property(_tgt_type ${target_name} TYPE)
50-
if(NOT _tgt_type STREQUAL "INTERFACE_LIBRARY")
51-
add_dependencies(${target_name} opencv_external)
52-
endif()
53-
endfunction()
54-
55-
function(itlabai_use_tbb target_name)
56-
itlabai_use_externals_scope(_scope ${target_name})
57-
target_link_libraries(${target_name} ${_scope} TBB::tbb)
58-
get_target_property(_tgt_type ${target_name} TYPE)
59-
if(NOT _tgt_type STREQUAL "INTERFACE_LIBRARY")
60-
add_dependencies(${target_name} tbb_external)
61-
endif()
62-
endfunction()
63-
64-
function(itlabai_use_onednn target_name)
65-
itlabai_use_externals_scope(_scope ${target_name})
66-
target_link_libraries(${target_name} ${_scope} dnnl)
67-
get_target_property(_tgt_type ${target_name} TYPE)
68-
if(NOT _tgt_type STREQUAL "INTERFACE_LIBRARY")
69-
add_dependencies(${target_name} onednn_external)
70-
endif()
71-
endfunction()
72-
73-
function(itlabai_use_kokkos target_name)
74-
itlabai_use_externals_scope(_scope ${target_name})
75-
target_link_libraries(${target_name} ${_scope} Kokkos_imported)
76-
if(ITLABAI_ENABLE_KOKKOS)
77-
get_target_property(_tgt_type ${target_name} TYPE)
78-
if(NOT _tgt_type STREQUAL "INTERFACE_LIBRARY")
79-
add_dependencies(${target_name} kokkos_external)
80-
endif()
81-
endif()
82-
if(MSVC)
83-
# Suppress Kokkos header warning C4702 only on targets that use Kokkos.
84-
target_compile_options(${target_name} ${_scope} /wd4702)
85-
endif()
86-
endfunction()
87-
88-
function(itlabai_use_openmp target_name)
89-
itlabai_use_externals_scope(_scope ${target_name})
90-
target_link_libraries(${target_name} ${_scope} OpenMP::OpenMP_CXX)
91-
endfunction()
92-
93-
function(itlabai_use_gtest target_name)
94-
itlabai_use_externals_scope(_scope ${target_name})
95-
target_link_libraries(${target_name} ${_scope} gtest_main gtest)
96-
get_target_property(_tgt_type ${target_name} TYPE)
97-
if(NOT _tgt_type STREQUAL "INTERFACE_LIBRARY")
98-
add_dependencies(${target_name} gtest_external)
99-
endif()
100-
endfunction()
101-
102-
function(itlabai_use_externals_scope out_var target_name)
103-
get_target_property(_tgt_type ${target_name} TYPE)
104-
if(_tgt_type STREQUAL "INTERFACE_LIBRARY")
105-
set(${out_var} INTERFACE PARENT_SCOPE)
106-
else()
107-
set(${out_var} PUBLIC PARENT_SCOPE)
108-
endif()
109-
endfunction()
110-
111-
function(itlabai_link_externals target_name)
112-
foreach(ext IN LISTS ARGN)
113-
if(ext STREQUAL "opencv")
114-
itlabai_use_opencv(${target_name})
115-
elseif(ext STREQUAL "tbb")
116-
itlabai_use_tbb(${target_name})
117-
elseif(ext STREQUAL "onednn")
118-
itlabai_use_onednn(${target_name})
119-
elseif(ext STREQUAL "kokkos")
120-
itlabai_use_kokkos(${target_name})
121-
elseif(ext STREQUAL "openmp")
122-
if(ITLABAI_ENABLE_OPENMP)
123-
itlabai_use_openmp(${target_name})
124-
endif()
125-
elseif(ext STREQUAL "gtest")
126-
itlabai_use_gtest(${target_name})
127-
endif()
128-
endforeach()
129-
endfunction()
130-
13131
function(itlabai_apply_runtime_rpath target_name)
13232
set(_paths "")
13333
foreach(_var IN ITEMS ONEDNN_INSTALL_DIR OPENCV_INSTALL_DIR TBB_INSTALL_DIR KOKKOS_INSTALL_DIR)
@@ -146,3 +46,4 @@ function(itlabai_apply_runtime_rpath target_name)
14646
)
14747
endif()
14848
endfunction()
49+

cmake/deps/opencv.cmake

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,3 +150,6 @@ else()
150150
INTERFACE_INCLUDE_DIRECTORIES "${_opencv_include_dir}"
151151
)
152152
endif()
153+
154+
# Ensure OpenCV headers/libs are built/installed before anything that links against it.
155+
add_dependencies(OpenCV::opencv_world opencv_external)

src/Weights_Reader/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,3 @@ target_include_directories(itlabai_reader_lib
1111
)
1212
target_link_libraries(itlabai_reader_lib PUBLIC nlohmann_json::nlohmann_json)
1313
itlabai_target_defaults(itlabai_reader_lib)
14-
itlabai_link_externals(itlabai_reader_lib)

src/graph/CMakeLists.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,8 @@ target_include_directories(itlabai_graph_lib
99
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
1010
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
1111
)
12-
itlabai_link_externals(itlabai_graph_lib tbb kokkos openmp)
12+
target_link_libraries(itlabai_graph_lib PUBLIC TBB::tbb Kokkos_imported)
13+
if(ITLABAI_ENABLE_OPENMP AND TARGET OpenMP::OpenMP_CXX)
14+
target_link_libraries(itlabai_graph_lib PUBLIC OpenMP::OpenMP_CXX)
15+
endif()
1316
itlabai_target_defaults(itlabai_graph_lib)

src/graph_transformations/CMakeLists.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,8 @@ target_include_directories(itlabai_graph_transformations_lib
99
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
1010
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
1111
)
12-
itlabai_link_externals(itlabai_graph_transformations_lib tbb kokkos openmp)
12+
target_link_libraries(itlabai_graph_transformations_lib PUBLIC TBB::tbb Kokkos_imported)
13+
if(ITLABAI_ENABLE_OPENMP AND TARGET OpenMP::OpenMP_CXX)
14+
target_link_libraries(itlabai_graph_transformations_lib PUBLIC OpenMP::OpenMP_CXX)
15+
endif()
1316
itlabai_target_defaults(itlabai_graph_transformations_lib)

src/layers/CMakeLists.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,8 @@ target_include_directories(itlabai_layers_lib
1010
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
1111
)
1212
target_link_libraries(itlabai_layers_lib PUBLIC dnnl)
13-
itlabai_link_externals(itlabai_layers_lib tbb openmp kokkos)
13+
target_link_libraries(itlabai_layers_lib PUBLIC TBB::tbb Kokkos_imported)
14+
if(ITLABAI_ENABLE_OPENMP AND TARGET OpenMP::OpenMP_CXX)
15+
target_link_libraries(itlabai_layers_lib PUBLIC OpenMP::OpenMP_CXX)
16+
endif()
1417
itlabai_target_defaults(itlabai_layers_lib)

0 commit comments

Comments
 (0)