Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add cmake options to sanitizer [16116] #55

Merged
merged 1 commit into from
Nov 7, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 59 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,65 @@ foreach( version_var IN LISTS version_unset)
endforeach()
unset(version_unset)

###############################################################################
# Activate Sanitizers
###############################################################################
option(SANITIZER "Enable Thread or Address sanitizers" OFF)
string(TOUPPER ${SANITIZER} SANITIZER)

if (SANITIZER)
if(${SANITIZER} STREQUAL "ADDRESS")
message(STATUS "Enabling address sanitizer...")
# Warning/Error messages
if(NOT (CMAKE_BUILD_TYPE STREQUAL "Debug"))
message(WARNING "Address sanitizer results with an optimized (non-Debug) build may be misleading")
endif()

if("${CMAKE_C_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang" OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang")
message(STATUS "Building with llvm Address sanitizer Tools")

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")

elseif(CMAKE_COMPILER_IS_GNUCXX)
message(STATUS "Building with Address sanitizer Tools")

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer")

else()
message(FATAL_ERROR "Address sanitizer requires Clang or GCC. Aborting.")
endif()

elseif(${SANITIZER} STREQUAL "THREAD")
message(STATUS "Enabling thread sanitizer...")
# Warning/Error messages
if(NOT (CMAKE_BUILD_TYPE STREQUAL "Debug"))
message(WARNING "Thread sanitizer results with an optimized (non-Debug) build may be misleading")
endif()

if("${CMAKE_C_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang" OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang")
message(STATUS "Building with llvm Thread sanitizer Tools")

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=thread")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread")

elseif(CMAKE_COMPILER_IS_GNUCXX)
message(STATUS "Building with Thread sanitizer Tools")

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=thread -fno-omit-frame-pointer")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread -fno-omit-frame-pointer")

else()
message(FATAL_ERROR "Thread sanitizer requires Clang or GCC. Aborting.")
endif()

else()
message(WARNING "Sanitizer option not supported. Continuing without any code instrumentation... ")

endif()
endif()

###############################################################################
# Compilation
###############################################################################
Expand Down