Skip to content

Commit ec69b60

Browse files
committed
feat(cmake-target): add cmake target instead of global settings
- feel free to personalize with your need's.
1 parent 1579753 commit ec69b60

1 file changed

Lines changed: 70 additions & 27 deletions

File tree

CMakeLists.txt

Lines changed: 70 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,20 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
1414
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "7.3")
1515
message(FATAL_ERROR "\nCpp-Taskflow requires g++ at least v7.3")
1616
endif()
17-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O2")
17+
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O2")
1818
## clang++
1919
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
2020
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "6.0")
2121
message(FATAL_ERROR "\nCpp-Taskflow requires clang++ at least v6.0")
2222
endif()
23-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O2")
23+
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O2")
2424
## microsoft visual c++
2525
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
2626
if(NOT MSVC_VERSION GREATER_EQUAL 1914)
2727
message(FATAL_ERROR "\nCpp-Taskflow requires MSVC++ at least v14.14")
2828
endif()
29-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /O2 /W3")
30-
add_definitions(-D_ENABLE_EXTENDED_ALIGNED_STORAGE)
29+
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /O2 /W3")
30+
#add_definitions(-D_ENABLE_EXTENDED_ALIGNED_STORAGE)
3131
else()
3232
message(FATAL_ERROR "\n\
3333
Cpp-Taskflow currently supports the following compilers:\n\
@@ -37,6 +37,49 @@ Cpp-Taskflow currently supports the following compilers:\n\
3737
")
3838
endif()
3939

40+
add_library(error_settings INTERFACE)
41+
42+
# Using namespaces causes CMake to error our in case of typos on the
43+
# consuming side, very important.
44+
add_library(cpptaskflow::error_settings ALIAS error_settings)
45+
46+
target_compile_options(
47+
error_settings
48+
INTERFACE
49+
$<$<CXX_COMPILER_ID:Clang>:-Wall -Wextra -Wfatal-errors>
50+
$<$<CXX_COMPILER_ID:GNU>:-Wall -Wextra -Wfatal-errors>
51+
$<$<CXX_COMPILER_ID:MSVC>:/W3 /permissive->)
52+
53+
add_library(features_settings INTERFACE)
54+
add_library(cpptaskflow::features_settings ALIAS features_settings)
55+
target_compile_definitions(features_settings INTERFACE $<$<CXX_COMPILER_ID:MSVC>:_ENABLE_EXTENDED_ALIGNED_STORAGE>)
56+
57+
add_library(optimize_settings INTERFACE)
58+
59+
add_library(cpptaskflow::optimize_settings ALIAS optimize_settings)
60+
61+
##! Msvc flags info
62+
# /Zi - Produces a program database (PDB) that contains type information and symbolic debugging information for use with the debugger.
63+
# /FS - Allows multiple cl.exe processes to write to the same .pdb file
64+
# /DEBUG - Enable debug during linking
65+
# /Od - Disables optimization
66+
# /Ox - Full optimization
67+
# /Oy- do not suppress frame pointers (recommended for debugging)
68+
69+
target_compile_options(optimize_settings INTERFACE
70+
$<$<AND:$<CONFIG:Release>,$<CXX_COMPILER_ID:Clang>>:-O2 -march=native>
71+
$<$<AND:$<CONFIG:Release>,$<CXX_COMPILER_ID:GNU>>:-O2 -march=native>
72+
$<$<AND:$<CONFIG:Debug>,$<CXX_COMPILER_ID:GNU>>:-O0 -g>
73+
$<$<AND:$<CONFIG:Debug>,$<CXX_COMPILER_ID:Clang>>:-O0 -g>
74+
$<$<AND:$<CONFIG:Debug>,$<CXX_COMPILER_ID:MSVC>>:/Zi /FS /DEBUG /Od /MP /MDd /Oy->
75+
$<$<AND:$<CONFIG:Release>,$<CXX_COMPILER_ID:MSVC>>:/O2 -DNDEBUG /MP>
76+
)
77+
78+
add_library(default_settings INTERFACE)
79+
add_library(cpptaskflow::default_settings ALIAS default_settings)
80+
target_link_libraries(default_settings INTERFACE cpptaskflow::error_settings cpptaskflow::optimize_settings cpptaskflow::features_settings)
81+
82+
4083
# CXX target properties
4184
#set(CMAKE_CXX_STANDARD 17)
4285
#set(CMAKE_CXX_STANDARD_REQUIRED ON)
@@ -111,31 +154,31 @@ message(STATUS "Building examples ...")
111154
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${TF_EXAMPLE_DIR})
112155

113156
add_executable(simple ${TF_EXAMPLE_DIR}/simple.cpp)
114-
target_link_libraries(simple ${PROJECT_NAME} Threads::Threads)
157+
target_link_libraries(simple ${PROJECT_NAME} Threads::Threads cpptaskflow::default_settings)
115158

116159
add_executable(observer ${TF_EXAMPLE_DIR}/observer.cpp)
117-
target_link_libraries(observer ${PROJECT_NAME} Threads::Threads)
160+
target_link_libraries(observer ${PROJECT_NAME} Threads::Threads cpptaskflow::default_settings)
118161

119162
add_executable(subflow ${TF_EXAMPLE_DIR}/subflow.cpp)
120-
target_link_libraries(subflow ${PROJECT_NAME} Threads::Threads)
163+
target_link_libraries(subflow ${PROJECT_NAME} Threads::Threads cpptaskflow::default_settings)
121164

122165
add_executable(debug ${TF_EXAMPLE_DIR}/debug.cpp)
123-
target_link_libraries(debug ${PROJECT_NAME} Threads::Threads)
166+
target_link_libraries(debug ${PROJECT_NAME} Threads::Threads cpptaskflow::default_settings)
124167

125168
add_executable(reduce ${TF_EXAMPLE_DIR}/reduce.cpp)
126-
target_link_libraries(reduce ${PROJECT_NAME} Threads::Threads)
169+
target_link_libraries(reduce ${PROJECT_NAME} Threads::Threads cpptaskflow::default_settings)
127170

128171
add_executable(parallel_for ${TF_EXAMPLE_DIR}/parallel_for.cpp)
129-
target_link_libraries(parallel_for ${PROJECT_NAME} Threads::Threads)
172+
target_link_libraries(parallel_for ${PROJECT_NAME} Threads::Threads cpptaskflow::default_settings)
130173

131174
add_executable(dynamic_traversal ${TF_EXAMPLE_DIR}/dynamic_traversal.cpp)
132-
target_link_libraries(dynamic_traversal ${PROJECT_NAME} Threads::Threads)
175+
target_link_libraries(dynamic_traversal ${PROJECT_NAME} Threads::Threads cpptaskflow::default_settings)
133176

134177
add_executable(run_variants ${TF_EXAMPLE_DIR}/run_variants.cpp)
135-
target_link_libraries(run_variants ${PROJECT_NAME} Threads::Threads)
178+
target_link_libraries(run_variants ${PROJECT_NAME} Threads::Threads cpptaskflow::default_settings)
136179

137180
add_executable(composition ${TF_EXAMPLE_DIR}/composition.cpp)
138-
target_link_libraries(composition ${PROJECT_NAME} Threads::Threads)
181+
target_link_libraries(composition ${PROJECT_NAME} Threads::Threads cpptaskflow::default_settings)
139182

140183
#add_executable(dice_pools ${TF_EXAMPLE_DIR}/dice_pools.cpp)
141184
#target_link_libraries(dice_pools ${PROJECT_NAME} Threads::Threads)
@@ -157,15 +200,15 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${TF_UTEST_DIR})
157200

158201
# unittest for utility
159202
add_executable(utility unittest/utility.cpp)
160-
target_link_libraries(utility ${PROJECT_NAME} Threads::Threads)
203+
target_link_libraries(utility ${PROJECT_NAME} Threads::Threads cpptaskflow::default_settings)
161204
target_include_directories(utility PRIVATE ${PROJECT_SOURCE_DIR}/doctest)
162205
add_test(passive_vector ${TF_UTEST_DIR}/utility -tc=PassiveVector)
163206
add_test(object_pool ${TF_UTEST_DIR}/utility -tc=ObjectPool)
164207
add_test(singular_alloc ${TF_UTEST_DIR}/utility -tc=SingularAllocator)
165208

166209
# unittest for taskflow
167210
add_executable(taskflow_test_tmp unittest/taskflow.cpp)
168-
target_link_libraries(taskflow_test_tmp ${PROJECT_NAME} Threads::Threads)
211+
target_link_libraries(taskflow_test_tmp ${PROJECT_NAME} Threads::Threads cpptaskflow::default_settings)
169212
target_include_directories(taskflow_test_tmp PRIVATE ${PROJECT_SOURCE_DIR}/doctest)
170213
set_target_properties(taskflow_test_tmp PROPERTIES OUTPUT_NAME "taskflow")
171214
add_test(builder ${TF_UTEST_DIR}/taskflow -tc=Builder)
@@ -187,7 +230,7 @@ add_test(observer ${TF_UTEST_DIR}/taskflow -tc=Observer)
187230
# unittest for WorkStealingQueue
188231
add_executable(spmc_queue unittest/spmc_queue.cpp)
189232
target_link_libraries(spmc_queue ${PROJECT_NAME} Threads::Threads)
190-
target_include_directories(spmc_queue PRIVATE ${PROJECT_SOURCE_DIR}/doctest)
233+
target_include_directories(spmc_queue PRIVATE ${PROJECT_SOURCE_DIR}/doctest cpptaskflow::default_settings)
191234
add_test(WorkStealingQueue.Owner ${TF_UTEST_DIR}/spmc_queue -tc=WSQ.Owner)
192235
add_test(WorkStealingQueue.1Thief ${TF_UTEST_DIR}/spmc_queue -tc=WSQ.1Thief)
193236
add_test(WorkStealingQueue.2Thieves ${TF_UTEST_DIR}/spmc_queue -tc=WSQ.2Thieves)
@@ -244,7 +287,7 @@ add_executable(
244287
target_include_directories(wavefront PRIVATE ${PROJECT_SOURCE_DIR}/3rd-party/CLI11)
245288
target_link_libraries(
246289
wavefront
247-
${PROJECT_NAME} Threads::Threads ${TBB_IMPORTED_TARGETS} ${OpenMP_CXX_LIBRARIES}
290+
${PROJECT_NAME} Threads::Threads ${TBB_IMPORTED_TARGETS} ${OpenMP_CXX_LIBRARIES} cpptaskflow::default_settings
248291
)
249292
set_target_properties(wavefront PROPERTIES COMPILE_FLAGS ${OpenMP_CXX_FLAGS})
250293

@@ -262,7 +305,7 @@ add_executable(
262305
target_include_directories(graph_traversal PRIVATE ${PROJECT_SOURCE_DIR}/3rd-party/CLI11)
263306
target_link_libraries(
264307
graph_traversal
265-
${PROJECT_NAME} Threads::Threads ${TBB_IMPORTED_TARGETS} ${OpenMP_CXX_LIBRARIES}
308+
${PROJECT_NAME} Threads::Threads ${TBB_IMPORTED_TARGETS} ${OpenMP_CXX_LIBRARIES} cpptaskflow::default_settings
266309
)
267310
set_target_properties(graph_traversal PROPERTIES COMPILE_FLAGS ${OpenMP_CXX_FLAGS})
268311

@@ -279,7 +322,7 @@ add_executable(
279322
target_include_directories(binary_tree PRIVATE ${PROJECT_SOURCE_DIR}/3rd-party/CLI11)
280323
target_link_libraries(
281324
binary_tree
282-
${PROJECT_NAME} Threads::Threads ${TBB_IMPORTED_TARGETS} ${OpenMP_CXX_LIBRARIES}
325+
${PROJECT_NAME} Threads::Threads ${TBB_IMPORTED_TARGETS} ${OpenMP_CXX_LIBRARIES} cpptaskflow::default_settings
283326
)
284327
set_target_properties(binary_tree PROPERTIES COMPILE_FLAGS ${OpenMP_CXX_FLAGS})
285328

@@ -296,7 +339,7 @@ add_executable(
296339
target_include_directories(linear_chain PRIVATE ${PROJECT_SOURCE_DIR}/3rd-party/CLI11)
297340
target_link_libraries(
298341
linear_chain
299-
${PROJECT_NAME} Threads::Threads ${TBB_IMPORTED_TARGETS} ${OpenMP_CXX_LIBRARIES}
342+
${PROJECT_NAME} Threads::Threads ${TBB_IMPORTED_TARGETS} ${OpenMP_CXX_LIBRARIES} cpptaskflow::default_settings
300343
)
301344
set_target_properties(linear_chain PROPERTIES COMPILE_FLAGS ${OpenMP_CXX_FLAGS})
302345

@@ -315,7 +358,7 @@ target_include_directories(mnist PRIVATE ${PROJECT_SOURCE_DIR}/3rd-party/CLI11)
315358
target_link_libraries(
316359
mnist
317360
${PROJECT_NAME} Threads::Threads ${TBB_IMPORTED_TARGETS}
318-
${OpenMP_CXX_LIBRARIES} stdc++fs
361+
${OpenMP_CXX_LIBRARIES} stdc++fs cpptaskflow::default_settings
319362
)
320363
set_target_properties(mnist PROPERTIES COMPILE_FLAGS ${OpenMP_CXX_FLAGS})
321364

@@ -334,7 +377,7 @@ target_include_directories(parallel_dnn PRIVATE ${PROJECT_SOURCE_DIR}/3rd-party/
334377
target_link_libraries(
335378
parallel_dnn
336379
${PROJECT_NAME} Threads::Threads ${TBB_IMPORTED_TARGETS}
337-
${OpenMP_CXX_LIBRARIES} stdc++fs
380+
${OpenMP_CXX_LIBRARIES} stdc++fs cpptaskflow::default_settings
338381
)
339382
set_target_properties(parallel_dnn PROPERTIES COMPILE_FLAGS ${OpenMP_CXX_FLAGS})
340383

@@ -351,7 +394,7 @@ add_executable(
351394
target_include_directories(matrix_multiplication PRIVATE ${PROJECT_SOURCE_DIR}/3rd-party/CLI11)
352395
target_link_libraries(
353396
matrix_multiplication
354-
${PROJECT_NAME} Threads::Threads ${TBB_IMPORTED_TARGETS} ${OpenMP_CXX_LIBRARIES}
397+
${PROJECT_NAME} Threads::Threads ${TBB_IMPORTED_TARGETS} ${OpenMP_CXX_LIBRARIES} cpptaskflow::default_settings
355398
)
356399
set_target_properties(matrix_multiplication PROPERTIES COMPILE_FLAGS ${OpenMP_CXX_FLAGS})
357400

@@ -368,7 +411,7 @@ add_executable(
368411
target_include_directories(mandelbrot_set PRIVATE ${PROJECT_SOURCE_DIR}/3rd-party/CLI11)
369412
target_link_libraries(
370413
mandelbrot_set
371-
${PROJECT_NAME} Threads::Threads ${TBB_IMPORTED_TARGETS} ${OpenMP_CXX_LIBRARIES}
414+
${PROJECT_NAME} Threads::Threads ${TBB_IMPORTED_TARGETS} ${OpenMP_CXX_LIBRARIES} cpptaskflow::default_settings
372415
)
373416
set_target_properties(mandelbrot_set PROPERTIES COMPILE_FLAGS ${OpenMP_CXX_FLAGS})
374417

@@ -385,7 +428,7 @@ add_executable(
385428
target_include_directories(black_scholes PRIVATE ${PROJECT_SOURCE_DIR}/3rd-party/CLI11)
386429
target_link_libraries(
387430
black_scholes
388-
${PROJECT_NAME} Threads::Threads ${TBB_IMPORTED_TARGETS} ${OpenMP_CXX_LIBRARIES}
431+
${PROJECT_NAME} Threads::Threads ${TBB_IMPORTED_TARGETS} ${OpenMP_CXX_LIBRARIES} cpptaskflow::default_settings
389432
)
390433
set_target_properties(black_scholes PROPERTIES COMPILE_FLAGS ${OpenMP_CXX_FLAGS})
391434

@@ -402,7 +445,7 @@ add_executable(
402445
target_include_directories(strassen PRIVATE ${PROJECT_SOURCE_DIR}/3rd-party/CLI11)
403446
target_link_libraries(
404447
strassen
405-
${PROJECT_NAME} Threads::Threads ${TBB_IMPORTED_TARGETS} ${OpenMP_CXX_LIBRARIES}
448+
${PROJECT_NAME} Threads::Threads ${TBB_IMPORTED_TARGETS} ${OpenMP_CXX_LIBRARIES} cpptaskflow::default_settings
406449
)
407450
set_target_properties(strassen PROPERTIES COMPILE_FLAGS ${OpenMP_CXX_FLAGS})
408451

@@ -419,7 +462,7 @@ add_executable(
419462
target_include_directories(parallel_loop PRIVATE ${PROJECT_SOURCE_DIR}/3rd-party/CLI11)
420463
target_link_libraries(
421464
parallel_loop
422-
${PROJECT_NAME} Threads::Threads ${TBB_IMPORTED_TARGETS} ${OpenMP_CXX_LIBRARIES}
465+
${PROJECT_NAME} Threads::Threads ${TBB_IMPORTED_TARGETS} ${OpenMP_CXX_LIBRARIES} cpptaskflow::default_settings
423466
)
424467
set_target_properties(parallel_loop PROPERTIES COMPILE_FLAGS ${OpenMP_CXX_FLAGS})
425468

0 commit comments

Comments
 (0)