@@ -375,7 +375,13 @@ set (Seastar_SANITIZE
375
375
"DEFAULT"
376
376
CACHE
377
377
STRING
378
- "Enable ASAN and UBSAN. Can be ON, OFF or DEFAULT (which enables it for Debug and Sanitize)" )
378
+ "Enable sanitizers. Can be ON, OFF or DEFAULT (which enables it for Debug and Sanitize)" )
379
+
380
+ set (Seastar_SANITIZERS
381
+ "address;undefined_behavior"
382
+ CACHE
383
+ STRING
384
+ "Sanitizers enabled when building Seastar" )
379
385
380
386
set (Seastar_DEBUG_SHARED_PTR
381
387
"DEFAULT"
@@ -391,11 +397,27 @@ set (Seastar_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
391
397
set (Seastar_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR} )
392
398
set (Seastar_GEN_BINARY_DIR ${Seastar_BINARY_DIR} /gen)
393
399
400
+ include (TriStateOption)
401
+ tri_state_option (${Seastar_SANITIZE}
402
+ DEFAULT_BUILD_TYPES "Debug" "Sanitize"
403
+ CONDITION sanitizers_enabled)
404
+
405
+ if (NOT sanitizers_enabled)
406
+ set (Seastar_SANITIZERS "" )
407
+ endif ()
408
+
394
409
#
395
410
# Dependencies.
396
411
#
397
412
398
- include (SeastarDependencies)
413
+ set (Seastar_SANITIZERS_DEPENDENCY_STRING ${Seastar_SANITIZERS} )
414
+
415
+ configure_file (
416
+ ${CMAKE_CURRENT_LIST_DIR} /cmake/SeastarDependencies.cmake.in
417
+ ${CMAKE_CURRENT_BINARY_DIR} /SeastarDependencies-build .cmake
418
+ @ONLY)
419
+
420
+ include (SeastarDependencies-build )
399
421
seastar_find_dependencies ()
400
422
401
423
# Private build dependencies not visible to consumers
@@ -880,19 +902,16 @@ if (Seastar_DPDK)
880
902
DPDK::dpdk)
881
903
endif ()
882
904
883
- include (TriStateOption)
884
- tri_state_option (${Seastar_SANITIZE}
885
- DEFAULT_BUILD_TYPES "Debug" "Sanitize"
886
- CONDITION condition )
887
- if (condition )
905
+ if (sanitizers_enabled)
888
906
if (NOT Sanitizers_FOUND)
889
907
message (FATAL_ERROR "Sanitizers not found!" )
890
908
endif ()
891
- set (Seastar_Sanitizers_OPTIONS $<${condition} :${Sanitizers_COMPILE_OPTIONS} >)
892
- target_link_libraries (seastar
893
- PUBLIC
894
- $<${condition} :Sanitizers::address>
895
- $<${condition} :Sanitizers::undefined_behavior>)
909
+ set (Seastar_Sanitizers_OPTIONS $<${sanitizers_enabled} :${Sanitizers_COMPILE_OPTIONS} >)
910
+ foreach (component ${Seastar_SANITIZERS} )
911
+ target_link_libraries (seastar
912
+ PUBLIC
913
+ $<${sanitizers_enabled} :Sanitizers::${component} >)
914
+ endforeach ()
896
915
endif ()
897
916
898
917
# We only need valgrind to find uninitialized memory uses, so disable
@@ -1349,6 +1368,23 @@ if (Seastar_INSTALL)
1349
1368
OUTPUT ${CMAKE_CURRENT_BINARY_DIR} /seastar-testing-install .pc
1350
1369
INPUT ${CMAKE_CURRENT_BINARY_DIR} /pkgconfig/seastar-testing-install .pc.in)
1351
1370
1371
+ if (_is_Multi_Config)
1372
+ set (Seastar_CMAKE "_$<CONFIG>.cmake" )
1373
+ else ()
1374
+ set (Seastar_CMAKE ".cmake" )
1375
+ endif ()
1376
+
1377
+ set (Seastar_SANITIZERS_DEPENDENCY_STRING "$<${sanitizers_enabled} :${Seastar_SANITIZERS} >" )
1378
+
1379
+ configure_file (
1380
+ ${CMAKE_CURRENT_LIST_DIR} /cmake/SeastarDependencies.cmake.in
1381
+ ${CMAKE_CURRENT_BINARY_DIR} /SeastarDependencies.cmake.in
1382
+ @ONLY)
1383
+
1384
+ file (GENERATE
1385
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR} /SeastarDependencies${Seastar_CMAKE}
1386
+ INPUT ${CMAKE_CURRENT_BINARY_DIR} /SeastarDependencies.cmake.in)
1387
+
1352
1388
include (CMakePackageConfigHelpers)
1353
1389
set (install_cmakedir ${CMAKE_INSTALL_LIBDIR} /cmake/Seastar)
1354
1390
@@ -1395,6 +1431,11 @@ if (Seastar_INSTALL)
1395
1431
${CMAKE_CURRENT_BINARY_DIR} /SeastarConfigVersion.cmake
1396
1432
DESTINATION ${install_cmakedir} )
1397
1433
1434
+ install (
1435
+ FILES ${CMAKE_CURRENT_BINARY_DIR} /SeastarDependencies${Seastar_CMAKE}
1436
+ DESTINATION ${install_cmakedir}
1437
+ RENAME SeastarDependencies.cmake)
1438
+
1398
1439
install (
1399
1440
FILES
1400
1441
${CMAKE_CURRENT_SOURCE_DIR} /cmake/FindGnuTLS.cmake
@@ -1412,7 +1453,6 @@ if (Seastar_INSTALL)
1412
1453
${CMAKE_CURRENT_SOURCE_DIR} /cmake/Findrt.cmake
1413
1454
${CMAKE_CURRENT_SOURCE_DIR} /cmake/Finducontext.cmake
1414
1455
${CMAKE_CURRENT_SOURCE_DIR} /cmake/Findyaml-cpp.cmake
1415
- ${CMAKE_CURRENT_SOURCE_DIR} /cmake/SeastarDependencies.cmake
1416
1456
${CMAKE_CURRENT_SOURCE_DIR} /cmake/FindLibUring.cmake
1417
1457
${CMAKE_CURRENT_SOURCE_DIR} /cmake/FindSystemTap-SDT.cmake
1418
1458
DESTINATION ${install_cmakedir} )
0 commit comments