mirror of
https://github.com/gabime/spdlog.git
synced 2024-11-15 08:25:43 +08:00
Gabime/tsan (#3237)
* Fixed race condition in tests * Support for thread sanitizer
This commit is contained in:
parent
96c9a62bfd
commit
9fe79692eb
@ -80,6 +80,10 @@ option(SPDLOG_BUILD_BENCH "Build benchmarks (Requires https://github.com/google/
|
|||||||
|
|
||||||
# sanitizer options
|
# sanitizer options
|
||||||
option(SPDLOG_SANITIZE_ADDRESS "Enable address sanitizer in tests" OFF)
|
option(SPDLOG_SANITIZE_ADDRESS "Enable address sanitizer in tests" OFF)
|
||||||
|
option(SPDLOG_SANITIZE_THREAD "Enable thread sanitizer in tests" OFF)
|
||||||
|
if(SPDLOG_SANITIZE_ADDRESS AND SPDLOG_SANITIZE_THREAD)
|
||||||
|
message(FATAL_ERROR "SPDLOG_SANITIZE_ADDRESS and SPDLOG_SANITIZE_THREAD are mutually exclusive")
|
||||||
|
endif()
|
||||||
|
|
||||||
# warning options
|
# warning options
|
||||||
option(SPDLOG_BUILD_WARNINGS "Enable compiler warnings" OFF)
|
option(SPDLOG_BUILD_WARNINGS "Enable compiler warnings" OFF)
|
||||||
@ -194,6 +198,13 @@ if(COMMAND target_precompile_headers AND SPDLOG_ENABLE_PCH)
|
|||||||
target_precompile_headers(spdlog PRIVATE ${PROJECT_BINARY_DIR}/spdlog_pch.h)
|
target_precompile_headers(spdlog PRIVATE ${PROJECT_BINARY_DIR}/spdlog_pch.h)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# sanitizer support
|
||||||
|
if(SPDLOG_SANITIZE_ADDRESS)
|
||||||
|
spdlog_enable_addr_sanitizer(spdlog)
|
||||||
|
elseif (SPDLOG_SANITIZE_THREAD)
|
||||||
|
spdlog_enable_thread_sanitizer(spdlog)
|
||||||
|
endif ()
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------------------
|
||||||
# Header only version
|
# Header only version
|
||||||
# ---------------------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------------------
|
||||||
|
@ -49,7 +49,7 @@ function(spdlog_enable_warnings target_name)
|
|||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
# Enable address sanitizer (gcc/clang only)
|
# 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")
|
if(NOT CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
|
||||||
message(FATAL_ERROR "Sanitizer supported only for gcc/clang")
|
message(FATAL_ERROR "Sanitizer supported only for gcc/clang")
|
||||||
endif()
|
endif()
|
||||||
@ -60,3 +60,14 @@ function(spdlog_enable_sanitizer target_name)
|
|||||||
target_compile_options(${target_name} PRIVATE -fno-omit-frame-pointer)
|
target_compile_options(${target_name} PRIVATE -fno-omit-frame-pointer)
|
||||||
target_link_libraries(${target_name} PRIVATE -fsanitize=address,undefined -fuse-ld=gold)
|
target_link_libraries(${target_name} PRIVATE -fsanitize=address,undefined -fuse-ld=gold)
|
||||||
endfunction()
|
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()
|
||||||
|
@ -73,8 +73,10 @@ function(spdlog_prepare_test test_target spdlog_lib)
|
|||||||
endif()
|
endif()
|
||||||
target_link_libraries(${test_target} PRIVATE Catch2::Catch2WithMain)
|
target_link_libraries(${test_target} PRIVATE Catch2::Catch2WithMain)
|
||||||
if(SPDLOG_SANITIZE_ADDRESS)
|
if(SPDLOG_SANITIZE_ADDRESS)
|
||||||
spdlog_enable_sanitizer(${test_target})
|
spdlog_enable_addr_sanitizer(${test_target})
|
||||||
endif()
|
elseif (SPDLOG_SANITIZE_THREAD)
|
||||||
|
spdlog_enable_thread_sanitizer(${test_target})
|
||||||
|
endif ()
|
||||||
add_test(NAME ${test_target} COMMAND ${test_target})
|
add_test(NAME ${test_target} COMMAND ${test_target})
|
||||||
set_tests_properties(${test_target} PROPERTIES RUN_SERIAL ON)
|
set_tests_properties(${test_target} PROPERTIES RUN_SERIAL ON)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
Loading…
Reference in New Issue
Block a user