Index: cmake/config-ix.cmake =================================================================== --- cmake/config-ix.cmake +++ cmake/config-ix.cmake @@ -497,82 +497,115 @@ if (SANITIZER_COMMON_SUPPORTED_ARCH AND NOT LLVM_USE_SANITIZER AND (OS_NAME MATCHES "Android|Darwin|Linux|FreeBSD" OR (OS_NAME MATCHES "Windows" AND MSVC))) - set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE) + set(COMPILER_RT_HAS_SANITIZER_COMMON_DEFAULT TRUE) else() - set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE) + set(COMPILER_RT_HAS_SANITIZER_COMMON_DEFAULT FALSE) endif() +option(COMPILER_RT_HAS_SANITIZER_COMMON + "Enable common sanitizer (Defaults based on system support)" + ${COMPILER_RT_HAS_SANITIZER_COMMON_DEFAULT}) + if (COMPILER_RT_HAS_SANITIZER_COMMON AND (NOT OS_NAME MATCHES "Windows" OR CMAKE_SIZEOF_VOID_P EQUAL 4)) - set(COMPILER_RT_HAS_INTERCEPTION TRUE) + set(COMPILER_RT_HAS_INTERCEPTION_DEFAULT TRUE) else() - set(COMPILER_RT_HAS_INTERCEPTION FALSE) + set(COMPILER_RT_HAS_INTERCEPTION_DEFAULT FALSE) endif() +option(COMPILER_RT_HAS_INTERCEPTION + "Enable interception (Defaults based on system support)" + ${COMPILER_RT_HAS_INTERCEPTION_DEFAULT}) + if (COMPILER_RT_HAS_SANITIZER_COMMON AND ASAN_SUPPORTED_ARCH AND (NOT OS_NAME MATCHES "Windows" OR CMAKE_SIZEOF_VOID_P EQUAL 4)) - set(COMPILER_RT_HAS_ASAN TRUE) + set(COMPILER_RT_HAS_ASAN_DEFAULT TRUE) else() - set(COMPILER_RT_HAS_ASAN FALSE) + set(COMPILER_RT_HAS_ASAN_DEFAULT FALSE) endif() +option(COMPILER_RT_HAS_ASAN + "Enable address sanitizer (Defaults based on system support)" + ${COMPILER_RT_HAS_ASAN_DEFAULT}) + if (OS_NAME MATCHES "Linux|FreeBSD|Windows") - set(COMPILER_RT_ASAN_HAS_STATIC_RUNTIME TRUE) + set(COMPILER_RT_ASAN_HAS_STATIC_RUNTIME_DEFAULT TRUE) else() - set(COMPILER_RT_ASAN_HAS_STATIC_RUNTIME FALSE) + set(COMPILER_RT_ASAN_HAS_STATIC_RUNTIME_DEFAULT FALSE) endif() +option(COMPILER_RT_ASAN_HAS_STATIC_RUNTIME + "Enable address sanitizer static (Defaults based on system support)" + ${COMPILER_RT_ASAN_HAS_STATIC_RUNTIME_DEFAULT}) + # TODO: Add builtins support. if (COMPILER_RT_HAS_SANITIZER_COMMON AND DFSAN_SUPPORTED_ARCH AND OS_NAME MATCHES "Linux") - set(COMPILER_RT_HAS_DFSAN TRUE) + set(COMPILER_RT_HAS_DFSAN_DEFAULT TRUE) else() - set(COMPILER_RT_HAS_DFSAN FALSE) + set(COMPILER_RT_HAS_DFSAN_DEFAULT FALSE) endif() +option(COMPILER_RT_HAS_DFSAN + "Enable data flow sanitizer (Defaults based on system support)" + ${COMPILER_RT_HAS_DFSAN_DEFAULT}) + if (COMPILER_RT_HAS_SANITIZER_COMMON AND LSAN_SUPPORTED_ARCH AND OS_NAME MATCHES "Linux|FreeBSD") - set(COMPILER_RT_HAS_LSAN TRUE) + set(COMPILER_RT_HAS_LSAN_DEFAULT TRUE) else() - set(COMPILER_RT_HAS_LSAN FALSE) + set(COMPILER_RT_HAS_LSAN_DEFAULT FALSE) endif() +option(COMPILER_RT_HAS_LSAN + "Enable leak sanitizer (Defaults based on system support)" + ${COMPILER_RT_HAS_LSAN_DEFAULT}) + if (COMPILER_RT_HAS_SANITIZER_COMMON AND MSAN_SUPPORTED_ARCH AND OS_NAME MATCHES "Linux") - set(COMPILER_RT_HAS_MSAN TRUE) + set(COMPILER_RT_HAS_MSAN_DEFAULT TRUE) else() - set(COMPILER_RT_HAS_MSAN FALSE) + set(COMPILER_RT_HAS_MSAN_DEFAULT FALSE) endif() +option(COMPILER_RT_HAS_MSAN + "Enable memory sanitizer (Defaults based on system support)" + ${COMPILER_RT_HAS_MSAN_DEFAULT}) + if (PROFILE_SUPPORTED_ARCH AND OS_NAME MATCHES "Darwin|Linux|FreeBSD") - set(COMPILER_RT_HAS_PROFILE TRUE) + set(COMPILER_RT_HAS_PROFILE_DEFAULT TRUE) else() - set(COMPILER_RT_HAS_PROFILE FALSE) + set(COMPILER_RT_HAS_PROFILE_DEFAULT FALSE) endif() +option(COMPILER_RT_HAS_PROFILE + "Enable profile runtime (Defaults based on system support)" + ${COMPILER_RT_HAS_PROFILE_DEFAULT}) + if (COMPILER_RT_HAS_SANITIZER_COMMON AND TSAN_SUPPORTED_ARCH AND OS_NAME MATCHES "Linux|FreeBSD") - set(COMPILER_RT_HAS_TSAN TRUE) + set(COMPILER_RT_HAS_TSAN_DEFAULT TRUE) else() - set(COMPILER_RT_HAS_TSAN FALSE) + set(COMPILER_RT_HAS_TSAN_DEFAULT FALSE) endif() -if(APPLE) - option(COMPILER_RT_ENABLE_TSAN_OSX "Enable building TSan for OS X - Experimental" Off) - if(COMPILER_RT_ENABLE_TSAN_OSX) - set(COMPILER_RT_HAS_TSAN TRUE) - endif() -endif() +option(COMPILER_RT_HAS_TSAN + "Enable thread sanitizer (Defaults based on system support)" + ${COMPILER_RT_HAS_TSAN_DEFAULT}) if (COMPILER_RT_HAS_SANITIZER_COMMON AND UBSAN_SUPPORTED_ARCH AND OS_NAME MATCHES "Darwin|Linux|FreeBSD|Windows") - set(COMPILER_RT_HAS_UBSAN TRUE) + set(COMPILER_RT_HAS_UBSAN_DEFAULT TRUE) else() - set(COMPILER_RT_HAS_UBSAN FALSE) + set(COMPILER_RT_HAS_UBSAN_DEFAULT FALSE) endif() +option(COMPILER_RT_HAS_UBSAN + "Enable undefined behavior sanitizer (Defaults based on system support)" + ${COMPILER_RT_HAS_UBSAN_DEFAULT}) + # -msse3 flag is not valid for Mips therefore clang gives a warning # message with -msse3. But check_c_compiler_flags() checks only for # compiler error messages. Therefore COMPILER_RT_HAS_MSSE3_FLAG turns out to be @@ -583,7 +616,12 @@ if (COMPILER_RT_HAS_SANITIZER_COMMON AND SAFESTACK_SUPPORTED_ARCH AND OS_NAME MATCHES "Darwin|Linux|FreeBSD") - set(COMPILER_RT_HAS_SAFESTACK TRUE) + set(COMPILER_RT_HAS_SAFESTACK_DEFAULT TRUE) else() - set(COMPILER_RT_HAS_SAFESTACK FALSE) + set(COMPILER_RT_HAS_SAFESTACK_DEFAULT FALSE) endif() + +option(COMPILER_RT_HAS_SAFESTACK + "Enable safestack runtime (Defaults based on system support)" + ${COMPILER_RT_HAS_SAFESTACK_DEFAULT}) +