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 CXX flags to sanitize #4359

Merged
merged 1 commit into from
Apr 12, 2024
Merged
Show file tree
Hide file tree
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
45 changes: 45 additions & 0 deletions config/sanitizer/sanitizers.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,17 @@ function(test_san_flags return_var flags)
set(FLAGS_BACKUP ${CMAKE_REQUIRED_FLAGS})
set(CMAKE_REQUIRED_FLAGS "${flags}")
check_c_source_compiles("int main() { return 0; }" ${return_var})
if(CMAKE_CXX_COMPILER_LOADED)
check_cxx_source_compiles("int main() { return 0; }" ${return_var})
endif()
set(CMAKE_REQUIRED_FLAGS "${FLAGS_BACKUP}")
set(CMAKE_REQUIRED_QUIET "${QUIET_BACKUP}")
endfunction()

message(STATUS "USE_SANITIZER=${USE_SANITIZER}, CMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID}")
if(CMAKE_CXX_COMPILER_LOADED)
message(STATUS "... CMAKE_CXX_COMPILER_ID=${CMAKE_CXX_COMPILER_ID}")
endif()
if(USE_SANITIZER)
if(CMAKE_C_COMPILER_ID MATCHES "IntelLLVM" OR CMAKE_C_COMPILER_ID MATCHES "[Cc]lang")
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
Expand Down Expand Up @@ -79,9 +85,15 @@ if(USE_SANITIZER)

if(AFL)
append_quoteless(AFL_USE_ASAN=1 CMAKE_C_COMPILER_LAUNCHER)
if (CMAKE_CXX_COMPILER_LOADED)
append_quoteless(AFL_USE_ASAN=1 CMAKE_CXX_COMPILER_LAUNCHER)
endif ()
endif()
else()
message(FATAL_ERROR "Address sanitizer not available for ${CMAKE_C_COMPILER}")
if (CMAKE_CXX_COMPILER_LOADED)
message(FATAL_ERROR "Address sanitizer not available for ${CMAKE_CXX_COMPILER}")
endif ()
endif()
endif()

Expand All @@ -104,9 +116,15 @@ if(USE_SANITIZER)

if(AFL)
append_quoteless(AFL_USE_MSAN=1 CMAKE_C_COMPILER_LAUNCHER)
if (CMAKE_CXX_COMPILER_LOADED)
append_quoteless(AFL_USE_MSAN=1 CMAKE_CXX_COMPILER_LAUNCHER)
endif ()
endif()
else()
message(FATAL_ERROR "Memory [With Origins] sanitizer not available for ${CMAKE_C_COMPILER}")
if (CMAKE_CXX_COMPILER_LOADED)
message(FATAL_ERROR "Memory [With Origins] sanitizer not available for ${CMAKE_CXX_COMPILER}")
endif ()
endif()
endif()

Expand All @@ -123,9 +141,15 @@ if(USE_SANITIZER)

if(AFL)
append_quoteless(AFL_USE_UBSAN=1 CMAKE_C_COMPILER_LAUNCHER)
if (CMAKE_CXX_COMPILER_LOADED)
append_quoteless(AFL_USE_UBSAN=1 CMAKE_CXX_COMPILER_LAUNCHER)
endif ()
endif()
else()
message(FATAL_ERROR "Undefined Behaviour sanitizer not available for ${CMAKE_C_COMPILER}")
if (CMAKE_CXX_COMPILER_LOADED)
message(FATAL_ERROR "Undefined Behaviour sanitizer not available for ${CMAKE_CXX_COMPILER}")
endif ()
endif()
endif()

Expand All @@ -139,9 +163,15 @@ if(USE_SANITIZER)

if(AFL)
append_quoteless(AFL_USE_TSAN=1 CMAKE_C_COMPILER_LAUNCHER)
if (CMAKE_CXX_COMPILER_LOADED)
append_quoteless(AFL_USE_TSAN=1 CMAKE_CXX_COMPILER_LAUNCHER)
endif ()
endif()
else()
message(FATAL_ERROR "Thread sanitizer not available for ${CMAKE_C_COMPILER}")
if (CMAKE_CXX_COMPILER_LOADED)
message(FATAL_ERROR "Thread sanitizer not available for ${CMAKE_CXX_COMPILER}")
endif ()
endif()
endif()

Expand All @@ -155,9 +185,15 @@ if(USE_SANITIZER)

if(AFL)
append_quoteless(AFL_USE_LSAN=1 CMAKE_C_COMPILER_LAUNCHER)
if (CMAKE_CXX_COMPILER_LOADED)
append_quoteless(AFL_USE_LSAN=1 CMAKE_CXX_COMPILER_LAUNCHER)
endif ()
endif()
else()
message(FATAL_ERROR "Thread sanitizer not available for ${CMAKE_C_COMPILER}")
if (CMAKE_CXX_COMPILER_LOADED)
message(FATAL_ERROR "Thread sanitizer not available for ${CMAKE_CXX_COMPILER}")
endif ()
endif()
endif()

Expand All @@ -171,9 +207,15 @@ if(USE_SANITIZER)

if(AFL)
append_quoteless(AFL_USE_CFISAN=1 CMAKE_C_COMPILER_LAUNCHER)
if (CMAKE_CXX_COMPILER_LOADED)
append_quoteless(AFL_USE_CFISAN=1 CMAKE_CXX_COMPILER_LAUNCHER)
endif ()
endif()
else()
message(FATAL_ERROR "Control Flow Integrity(CFI) sanitizer not available for ${CMAKE_C_COMPILER}")
if (CMAKE_CXX_COMPILER_LOADED)
message(FATAL_ERROR "Control Flow Integrity(CFI) sanitizer not available for ${CMAKE_CXX_COMPILER}")
endif ()
endif()
endif()

Expand All @@ -198,6 +240,9 @@ if(USE_SANITIZER)

if(AFL)
append_quoteless(AFL_USE_ASAN=1 CMAKE_C_COMPILER_LAUNCHER)
if (CMAKE_CXX_COMPILER_LOADED)
append_quoteless(AFL_USE_ASAN=1 CMAKE_CXX_COMPILER_LAUNCHER)
endif ()
endif()
else()
message(FATAL_ERROR "This sanitizer not yet supported in the MSVC environment: ${USE_SANITIZER}")
Expand Down
1 change: 1 addition & 0 deletions config/toolchain/clang.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ if(WIN32)
else()
set (CMAKE_C_COMPILER clang)
set (CMAKE_CXX_COMPILER clang++)
#set (CMAKE_Fortran_COMPILER flang-new)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably remove?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe - maybe not. Thought it was worthwhile to have a file with a one char change to enable it.
Can be persuaded either way.

endif()
set (CMAKE_EXPORT_COMPILE_COMMANDS ON)

Expand Down
Loading