From eababf9a419bcdcf16cb6501c381117d5ca63cc3 Mon Sep 17 00:00:00 2001 From: Amin Yahyaabadi Date: Wed, 11 Sep 2024 01:12:27 -0700 Subject: [PATCH] fix: use a multi-variable parser for check_sanitizers_support --- src/Index.cmake | 4 ++++ src/Sanitizers.cmake | 45 +++++++++++++++++++++------------------ src/StaticAnalyzers.cmake | 5 ++--- 3 files changed, 30 insertions(+), 24 deletions(-) diff --git a/src/Index.cmake b/src/Index.cmake index 8e158504..f4544398 100644 --- a/src/Index.cmake +++ b/src/Index.cmake @@ -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 @@ -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( diff --git a/src/Sanitizers.cmake b/src/Sanitizers.cmake index 642a5b82..bd9fcb48 100644 --- a/src/Sanitizers.cmake +++ b/src/Sanitizers.cmake @@ -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") @@ -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() diff --git a/src/StaticAnalyzers.cmake b/src/StaticAnalyzers.cmake index d53b14ba..5041adf3 100644 --- a/src/StaticAnalyzers.cmake +++ b/src/StaticAnalyzers.cmake @@ -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()