@@ -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 "\n Cpp-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++
1919elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" )
2020 if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "6.0" )
2121 message (FATAL_ERROR "\n Cpp-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++
2525elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" )
2626 if (NOT MSVC_VERSION GREATER_EQUAL 1914)
2727 message (FATAL_ERROR "\n Cpp-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)
3131else ()
3232 message (FATAL_ERROR "\n\
3333Cpp-Taskflow currently supports the following compilers:\n\
@@ -37,6 +37,49 @@ Cpp-Taskflow currently supports the following compilers:\n\
3737" )
3838endif ()
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 ...")
111154set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${TF_EXAMPLE_DIR} )
112155
113156add_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
116159add_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
119162add_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
122165add_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
125168add_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
128171add_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
131174add_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
134177add_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
137180add_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
159202add_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 )
161204target_include_directories (utility PRIVATE ${PROJECT_SOURCE_DIR} /doctest )
162205add_test (passive_vector ${TF_UTEST_DIR} /utility -tc=PassiveVector )
163206add_test (object_pool ${TF_UTEST_DIR} /utility -tc=ObjectPool )
164207add_test (singular_alloc ${TF_UTEST_DIR} /utility -tc=SingularAllocator )
165208
166209# unittest for taskflow
167210add_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 )
169212target_include_directories (taskflow_test_tmp PRIVATE ${PROJECT_SOURCE_DIR} /doctest )
170213set_target_properties (taskflow_test_tmp PROPERTIES OUTPUT_NAME "taskflow" )
171214add_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
188231add_executable (spmc_queue unittest/spmc_queue.cpp )
189232target_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 )
191234add_test (WorkStealingQueue.Owner ${TF_UTEST_DIR} /spmc_queue -tc=WSQ.Owner )
192235add_test (WorkStealingQueue.1Thief ${TF_UTEST_DIR} /spmc_queue -tc=WSQ.1Thief )
193236add_test (WorkStealingQueue.2Thieves ${TF_UTEST_DIR} /spmc_queue -tc=WSQ.2Thieves )
@@ -244,7 +287,7 @@ add_executable(
244287target_include_directories (wavefront PRIVATE ${PROJECT_SOURCE_DIR} /3rd-party/CLI11 )
245288target_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)
249292set_target_properties (wavefront PROPERTIES COMPILE_FLAGS ${OpenMP_CXX_FLAGS} )
250293
@@ -262,7 +305,7 @@ add_executable(
262305target_include_directories (graph_traversal PRIVATE ${PROJECT_SOURCE_DIR} /3rd-party/CLI11 )
263306target_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)
267310set_target_properties (graph_traversal PROPERTIES COMPILE_FLAGS ${OpenMP_CXX_FLAGS} )
268311
@@ -279,7 +322,7 @@ add_executable(
279322target_include_directories (binary_tree PRIVATE ${PROJECT_SOURCE_DIR} /3rd-party/CLI11 )
280323target_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)
284327set_target_properties (binary_tree PROPERTIES COMPILE_FLAGS ${OpenMP_CXX_FLAGS} )
285328
@@ -296,7 +339,7 @@ add_executable(
296339target_include_directories (linear_chain PRIVATE ${PROJECT_SOURCE_DIR} /3rd-party/CLI11 )
297340target_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)
301344set_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)
315358target_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)
320363set_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/
334377target_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)
339382set_target_properties (parallel_dnn PROPERTIES COMPILE_FLAGS ${OpenMP_CXX_FLAGS} )
340383
@@ -351,7 +394,7 @@ add_executable(
351394target_include_directories (matrix_multiplication PRIVATE ${PROJECT_SOURCE_DIR} /3rd-party/CLI11 )
352395target_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)
356399set_target_properties (matrix_multiplication PROPERTIES COMPILE_FLAGS ${OpenMP_CXX_FLAGS} )
357400
@@ -368,7 +411,7 @@ add_executable(
368411target_include_directories (mandelbrot_set PRIVATE ${PROJECT_SOURCE_DIR} /3rd-party/CLI11 )
369412target_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)
373416set_target_properties (mandelbrot_set PROPERTIES COMPILE_FLAGS ${OpenMP_CXX_FLAGS} )
374417
@@ -385,7 +428,7 @@ add_executable(
385428target_include_directories (black_scholes PRIVATE ${PROJECT_SOURCE_DIR} /3rd-party/CLI11 )
386429target_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)
390433set_target_properties (black_scholes PROPERTIES COMPILE_FLAGS ${OpenMP_CXX_FLAGS} )
391434
@@ -402,7 +445,7 @@ add_executable(
402445target_include_directories (strassen PRIVATE ${PROJECT_SOURCE_DIR} /3rd-party/CLI11 )
403446target_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)
407450set_target_properties (strassen PROPERTIES COMPILE_FLAGS ${OpenMP_CXX_FLAGS} )
408451
@@ -419,7 +462,7 @@ add_executable(
419462target_include_directories (parallel_loop PRIVATE ${PROJECT_SOURCE_DIR} /3rd-party/CLI11 )
420463target_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)
424467set_target_properties (parallel_loop PROPERTIES COMPILE_FLAGS ${OpenMP_CXX_FLAGS} )
425468
0 commit comments