diff --git a/cmake/FindASan.cmake b/cmake/FindASan.cmake index 5c95a0b..fa07674 100644 --- a/cmake/FindASan.cmake +++ b/cmake/FindASan.cmake @@ -33,9 +33,18 @@ set(FLAG_CANDIDATES ) +if (SANITIZE_ADDRESS AND (SANITIZE_THREAD OR SANITIZE_MEMORY)) + message(FATAL_ERROR "AddressSanitizer is not compatible with " + "ThreadSanitizer or MemorySanitizer.") +endif () + + include(sanitize-helpers) -sanitizer_check_compiler_flags("${FLAG_CANDIDATES}" "AddressSanitizer" "ASan") +if (SANITIZE_ADDRESS) + sanitizer_check_compiler_flags("${FLAG_CANDIDATES}" "AddressSanitizer" + "ASan") +endif () function (add_sanitize_address TARGET) if (NOT SANITIZE_ADDRESS) diff --git a/cmake/FindSanitizers.cmake b/cmake/FindSanitizers.cmake index e92221c..f6db13e 100644 --- a/cmake/FindSanitizers.cmake +++ b/cmake/FindSanitizers.cmake @@ -22,25 +22,6 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. - -# The following options will enable the desired sanitizers. -option(SANITIZE "Enable all available sanitizers for sanitized targets." OFF) - -# If option SANITIZE is enabled, enable all available sanitizers. -if (SANITIZE) - set(SANITIZE_ADDRESS ON CACHE BOOL - "Enable AddressSanitizer for sanitized targets." FORCE) - set(SANITIZE_THREAD ON CACHE BOOL - "Enable ThreadSanitizer for sanitized targets." FORCE) - set(SANITIZE_MEMORY ON CACHE BOOL - "Enable MemorySanitizer for sanitized targets." FORCE) - set(SANITIZE_UNDEFINED ON CACHE BOOL - "Enable UndefinedBehaviorSanitizer for sanitized targets." FORCE) -endif (SANITIZE) - - - - set(FIND_QUIETLY_FLAG "") if (DEFINED Sanitizers_FIND_QUIETLY) set(FIND_QUIETLY_FLAG "QUIET") diff --git a/cmake/FindTSan.cmake b/cmake/FindTSan.cmake index c9b8a9c..81e07b0 100644 --- a/cmake/FindTSan.cmake +++ b/cmake/FindTSan.cmake @@ -29,6 +29,13 @@ set(FLAG_CANDIDATES ) +# ThreadSanitizer is not compatible with MemorySanitizer. +if (SANITIZE_THREAD AND SANITIZE_MEMORY) + message(FATAL_ERROR "ThreadSanitizer is not compatible with " + "MemorySanitizer.") +endif () + + include(sanitize-helpers) if (SANITIZE_THREAD) diff --git a/cmake/FindUBSan.cmake b/cmake/FindUBSan.cmake index f520f36..5ae0b54 100644 --- a/cmake/FindUBSan.cmake +++ b/cmake/FindUBSan.cmake @@ -32,8 +32,10 @@ set(FLAG_CANDIDATES include(sanitize-helpers) -sanitizer_check_compiler_flags("${FLAG_CANDIDATES}" "UndefinedBehaviorSanitizer" - "UBSan") +if (SANITIZE_UNDEFINED) + sanitizer_check_compiler_flags("${FLAG_CANDIDATES}" + "UndefinedBehaviorSanitizer" "UBSan") +endif () function (add_sanitize_undefined TARGET) if (NOT SANITIZE_UNDEFINED)