Skip to content

Commit

Permalink
fix: use a multi-variable parser for check_sanitizers_support
Browse files Browse the repository at this point in the history
  • Loading branch information
aminya committed Sep 11, 2024
1 parent 886f87b commit eababf9
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 24 deletions.
4 changes: 4 additions & 0 deletions src/Index.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,8 @@ macro(project_options)
ENABLE_SANITIZER_UNDEFINED_BEHAVIOR
ENABLE_SANITIZER_THREAD
ENABLE_SANITIZER_MEMORY
ENABLE_SANITIZER_POINTER_COMPARE
ENABLE_SANITIZER_POINTER_SUBTRACT
ENABLE_CONTROL_FLOW_PROTECTION
ENABLE_STACK_PROTECTION
ENABLE_OVERFLOW_PROTECTION
Expand Down Expand Up @@ -266,6 +268,8 @@ macro(project_options)
${ProjectOptions_ENABLE_SANITIZER_UNDEFINED_BEHAVIOR}
${ProjectOptions_ENABLE_SANITIZER_THREAD}
${ProjectOptions_ENABLE_SANITIZER_MEMORY}
${ProjectOptions_ENABLE_SANITIZER_POINTER_COMPARE}
${ProjectOptions_ENABLE_SANITIZER_POINTER_SUBTRACT}
)

enable_hardening(
Expand Down
45 changes: 24 additions & 21 deletions src/Sanitizers.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -151,16 +151,19 @@ Output variables:
# then pass the sanitizers (e.g. ${ENABLE_SANITIZER_ADDRESS}) to project_options(... ${ENABLE_SANITIZER_ADDRESS} ...)
]]
function(
check_sanitizers_support
ENABLE_SANITIZER_ADDRESS
ENABLE_SANITIZER_UNDEFINED_BEHAVIOR
ENABLE_SANITIZER_LEAK
ENABLE_SANITIZER_THREAD
ENABLE_SANITIZER_MEMORY
ENABLE_SANITIZER_POINTER_COMPARE
ENABLE_SANITIZER_POINTER_SUBTRACT
)
function(check_sanitizers_support)

set(options
ENABLE_SANITIZER_ADDRESS
ENABLE_SANITIZER_UNDEFINED_BEHAVIOR
ENABLE_SANITIZER_LEAK
ENABLE_SANITIZER_THREAD
ENABLE_SANITIZER_MEMORY
ENABLE_SANITIZER_POINTER_COMPARE
ENABLE_SANITIZER_POINTER_SUBTRACT
)
cmake_parse_arguments(_ "" "${options}" "" "")

set(SUPPORTED_SANITIZERS "")
if(NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "Windows" AND (CMAKE_CXX_COMPILER_ID STREQUAL "GNU"
OR CMAKE_CXX_COMPILER_ID MATCHES ".*Clang")
Expand Down Expand Up @@ -209,24 +212,24 @@ function(
endif()

if("address" IN_LIST SUPPORTED_SANITIZERS)
set(${ENABLE_SANITIZER_ADDRESS} "ENABLE_SANITIZER_ADDRESS" PARENT_SCOPE)
endif()
if("pointer-compare" IN_LIST SUPPORTED_SANITIZERS)
set(${ENABLE_SANITIZER_POINTER_COMPARE} "ENABLE_SANITIZER_POINTER_COMPARE" PARENT_SCOPE)
endif()
if("pointer-subtract" IN_LIST SUPPORTED_SANITIZERS)
set(${ENABLE_SANITIZER_POINTER_SUBTRACT} "ENABLE_SANITIZER_POINTER_SUBTRACT" PARENT_SCOPE)
set(${_ENABLE_SANITIZER_ADDRESS} "ENABLE_SANITIZER_ADDRESS" PARENT_SCOPE)
endif()
if("undefined" IN_LIST SUPPORTED_SANITIZERS)
set(${ENABLE_SANITIZER_UNDEFINED_BEHAVIOR} "ENABLE_SANITIZER_UNDEFINED_BEHAVIOR" PARENT_SCOPE)
set(${_ENABLE_SANITIZER_UNDEFINED_BEHAVIOR} "ENABLE_SANITIZER_UNDEFINED_BEHAVIOR" PARENT_SCOPE)
endif()
if("leak" IN_LIST SUPPORTED_SANITIZERS)
set(${ENABLE_SANITIZER_LEAK} "ENABLE_SANITIZER_LEAK" PARENT_SCOPE)
set(${_ENABLE_SANITIZER_LEAK} "ENABLE_SANITIZER_LEAK" PARENT_SCOPE)
endif()
if("thread" IN_LIST SUPPORTED_SANITIZERS)
set(${ENABLE_SANITIZER_THREAD} "ENABLE_SANITIZER_THREAD" PARENT_SCOPE)
set(${_ENABLE_SANITIZER_THREAD} "ENABLE_SANITIZER_THREAD" PARENT_SCOPE)
endif()
if("memory" IN_LIST SUPPORTED_SANITIZERS)
set(${ENABLE_SANITIZER_MEMORY} "ENABLE_SANITIZER_MEMORY" PARENT_SCOPE)
set(${_ENABLE_SANITIZER_MEMORY} "ENABLE_SANITIZER_MEMORY" PARENT_SCOPE)
endif()
if("pointer-compare" IN_LIST SUPPORTED_SANITIZERS)
set(${_ENABLE_SANITIZER_POINTER_COMPARE} "ENABLE_SANITIZER_POINTER_COMPARE" PARENT_SCOPE)
endif()
if("pointer-subtract" IN_LIST SUPPORTED_SANITIZERS)
set(${_ENABLE_SANITIZER_POINTER_SUBTRACT} "ENABLE_SANITIZER_POINTER_SUBTRACT" PARENT_SCOPE)
endif()
endfunction()
5 changes: 2 additions & 3 deletions src/StaticAnalyzers.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,8 @@ macro(enable_cppcheck CPPCHECK_OPTIONS)
elseif(CMAKE_C_STANDARD MATCHES [[99|11]])
set(CMAKE_C_CPPCHECK ${CMAKE_C_CPPCHECK} --std=c${CMAKE_C_STANDARD})
else()
message(
${WARNING_MESSAGE}
"cppcheck doesn't support specified C standard ${CMAKE_C_STANDARD}. Using the cppcheck default C standard version."
message(${WARNING_MESSAGE}
"cppcheck doesn't support C ${CMAKE_C_STANDARD} standard. Using the cppcheck default"
)
endif()
endif()
Expand Down

0 comments on commit eababf9

Please sign in to comment.