From c122eaf749a48010e1d56f5ada537317274c5db0 Mon Sep 17 00:00:00 2001 From: Gabi Melman Date: Fri, 1 Nov 2024 15:14:27 +0200 Subject: [PATCH] Gabime/tsan (#3237) * Fixed race condition in tests * Support for thread sanitizer --- cmake/utils.cmake | 13 ++++++++++++- tests/CMakeLists.txt | 6 ++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/cmake/utils.cmake b/cmake/utils.cmake index 85fcd80f7..0e340bcc4 100644 --- a/cmake/utils.cmake +++ b/cmake/utils.cmake @@ -49,7 +49,7 @@ function(spdlog_enable_warnings target_name) endfunction() # Enable address sanitizer (gcc/clang only) -function(spdlog_enable_sanitizer target_name) +function(spdlog_enable_addr_sanitizer target_name) if(NOT CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") message(FATAL_ERROR "Sanitizer supported only for gcc/clang") endif() @@ -60,3 +60,14 @@ function(spdlog_enable_sanitizer target_name) target_compile_options(${target_name} PRIVATE -fno-omit-frame-pointer) target_link_libraries(${target_name} PRIVATE -fsanitize=address,undefined -fuse-ld=gold) endfunction() + +# Enable thread sanitizer (gcc/clang only) +function(spdlog_enable_thread_sanitizer target_name) + if(NOT CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") + message(FATAL_ERROR "Sanitizer supported only for gcc/clang") + endif() + message(STATUS "Thread sanitizer enabled") + target_compile_options(${target_name} PRIVATE -fsanitize=thread) + target_compile_options(${target_name} PRIVATE -fno-omit-frame-pointer) + target_link_libraries(${target_name} PRIVATE -fsanitize=thread -fuse-ld=gold) +endfunction() diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 9042aceb2..2cb18a4a3 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -80,8 +80,10 @@ function(spdlog_prepare_test test_target spdlog_lib) endif() target_link_libraries(${test_target} PRIVATE Catch2::Catch2WithMain) if(SPDLOG_SANITIZE_ADDRESS) - spdlog_enable_sanitizer(${test_target}) - endif() + spdlog_enable_addr_sanitizer(${test_target}) + elseif (SPDLOG_SANITIZE_THREAD) + spdlog_enable_thread_sanitizer(${test_target}) + endif () add_test(NAME ${test_target} COMMAND ${test_target}) set_tests_properties(${test_target} PROPERTIES RUN_SERIAL ON) endfunction()