Index: cmake/config-ix.cmake =================================================================== --- cmake/config-ix.cmake +++ cmake/config-ix.cmake @@ -416,6 +416,7 @@ list_replace(COMPILER_RT_SANITIZERS_TO_BUILD all "${ALL_SANITIZERS}") if (SANITIZER_COMMON_SUPPORTED_ARCH AND NOT LLVM_USE_SANITIZER AND + (COMPILER_RT_BUILD_SANITIZERS OR COMPILER_RT_BUILD_XRAY) AND (OS_NAME MATCHES "Android|Darwin|Linux|FreeBSD" OR (OS_NAME MATCHES "Windows" AND (NOT MINGW AND NOT CYGWIN)))) set(COMPILER_RT_HAS_SANITIZER_COMMON TRUE) @@ -423,13 +424,15 @@ set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE) endif() -if (COMPILER_RT_HAS_SANITIZER_COMMON) +if (COMPILER_RT_HAS_SANITIZER_COMMON AND + COMPILER_RT_BUILD_SANITIZERS) set(COMPILER_RT_HAS_INTERCEPTION TRUE) else() set(COMPILER_RT_HAS_INTERCEPTION FALSE) endif() -if (COMPILER_RT_HAS_SANITIZER_COMMON AND ASAN_SUPPORTED_ARCH) +if (COMPILER_RT_HAS_SANITIZER_COMMON AND ASAN_SUPPORTED_ARCH AND + COMPILER_RT_BUILD_SANITIZERS) set(COMPILER_RT_HAS_ASAN TRUE) else() set(COMPILER_RT_HAS_ASAN FALSE) @@ -444,6 +447,7 @@ # TODO: Add builtins support. if (COMPILER_RT_HAS_SANITIZER_COMMON AND DFSAN_SUPPORTED_ARCH AND + COMPILER_RT_BUILD_SANITIZERS AND OS_NAME MATCHES "Linux") set(COMPILER_RT_HAS_DFSAN TRUE) else() @@ -451,6 +455,7 @@ endif() if (COMPILER_RT_HAS_SANITIZER_COMMON AND LSAN_SUPPORTED_ARCH AND + COMPILER_RT_BUILD_SANITIZERS AND OS_NAME MATCHES "Linux|FreeBSD") set(COMPILER_RT_HAS_LSAN TRUE) else() @@ -458,6 +463,7 @@ endif() if (COMPILER_RT_HAS_SANITIZER_COMMON AND MSAN_SUPPORTED_ARCH AND + COMPILER_RT_BUILD_SANITIZERS AND OS_NAME MATCHES "Linux") set(COMPILER_RT_HAS_MSAN TRUE) else() @@ -465,6 +471,7 @@ endif() if (PROFILE_SUPPORTED_ARCH AND NOT LLVM_USE_SANITIZER AND + COMPILER_RT_BUILD_SANITIZERS AND OS_NAME MATCHES "Darwin|Linux|FreeBSD|Windows") set(COMPILER_RT_HAS_PROFILE TRUE) else() @@ -472,6 +479,7 @@ endif() if (COMPILER_RT_HAS_SANITIZER_COMMON AND TSAN_SUPPORTED_ARCH AND + COMPILER_RT_BUILD_SANITIZERS AND OS_NAME MATCHES "Darwin|Linux|FreeBSD") set(COMPILER_RT_HAS_TSAN TRUE) else() @@ -479,6 +487,7 @@ endif() if (COMPILER_RT_HAS_SANITIZER_COMMON AND UBSAN_SUPPORTED_ARCH AND + COMPILER_RT_BUILD_SANITIZERS AND OS_NAME MATCHES "Darwin|Linux|FreeBSD|Windows") set(COMPILER_RT_HAS_UBSAN TRUE) else() @@ -486,6 +495,7 @@ endif() if (COMPILER_RT_HAS_SANITIZER_COMMON AND SAFESTACK_SUPPORTED_ARCH AND + COMPILER_RT_BUILD_SANITIZERS AND OS_NAME MATCHES "Darwin|Linux|FreeBSD") set(COMPILER_RT_HAS_SAFESTACK TRUE) else() @@ -493,6 +503,7 @@ endif() if (COMPILER_RT_HAS_SANITIZER_COMMON AND CFI_SUPPORTED_ARCH AND + COMPILER_RT_BUILD_SANITIZERS AND OS_NAME MATCHES "Linux") set(COMPILER_RT_HAS_CFI TRUE) else() @@ -500,6 +511,7 @@ endif() if (COMPILER_RT_HAS_SANITIZER_COMMON AND ESAN_SUPPORTED_ARCH AND + COMPILER_RT_BUILD_SANITIZERS AND OS_NAME MATCHES "Linux") set(COMPILER_RT_HAS_ESAN TRUE) else() @@ -507,6 +519,7 @@ endif() if (COMPILER_RT_HAS_SANITIZER_COMMON AND SCUDO_SUPPORTED_ARCH AND + COMPILER_RT_BUILD_SANITIZERS AND OS_NAME MATCHES "Linux") set(COMPILER_RT_HAS_SCUDO TRUE) else() @@ -514,6 +527,7 @@ endif() if (COMPILER_RT_HAS_SANITIZER_COMMON AND XRAY_SUPPORTED_ARCH AND + COMPILER_RT_BUILD_XRAY AND OS_NAME MATCHES "Linux") set(COMPILER_RT_HAS_XRAY TRUE) else() Index: lib/CMakeLists.txt =================================================================== --- lib/CMakeLists.txt +++ lib/CMakeLists.txt @@ -8,8 +8,7 @@ # sanitizers or xray (or both). # #TODO: Refactor sanitizer_common into smaller pieces (e.g. flag parsing, utils). -if (COMPILER_RT_HAS_SANITIZER_COMMON AND - (COMPILER_RT_BUILD_SANITIZERS OR COMPILER_RT_BUILD_XRAY)) +if (COMPILER_RT_HAS_SANITIZER_COMMON) add_subdirectory(sanitizer_common) endif() @@ -36,27 +35,27 @@ endif() endfunction() -if(COMPILER_RT_BUILD_SANITIZERS) - compiler_rt_build_runtime(interception) +# the following set is conditional to COMPILER_RT_BUILD_SANITIZERS +# (via COMPILER_RT_HAS_* in config-ix.cmake) +compiler_rt_build_runtime(interception) - if(COMPILER_RT_HAS_SANITIZER_COMMON) - add_subdirectory(stats) - add_subdirectory(lsan) - add_subdirectory(ubsan) - endif() +if(COMPILER_RT_BUILD_SANITIZERS AND COMPILER_RT_HAS_SANITIZER_COMMON) + add_subdirectory(stats) + add_subdirectory(lsan) + add_subdirectory(ubsan) +endif() - compiler_rt_build_sanitizer(asan) - compiler_rt_build_sanitizer(dfsan) - compiler_rt_build_sanitizer(msan) - compiler_rt_build_sanitizer(tsan tsan/dd) - compiler_rt_build_sanitizer(safestack) - compiler_rt_build_sanitizer(cfi) - compiler_rt_build_sanitizer(esan) - compiler_rt_build_sanitizer(scudo) +compiler_rt_build_sanitizer(asan) +compiler_rt_build_sanitizer(dfsan) +compiler_rt_build_sanitizer(msan) +compiler_rt_build_sanitizer(tsan tsan/dd) +compiler_rt_build_sanitizer(safestack) +compiler_rt_build_sanitizer(cfi) +compiler_rt_build_sanitizer(esan) +compiler_rt_build_sanitizer(scudo) - compiler_rt_build_runtime(profile) -endif() +compiler_rt_build_runtime(profile) -if(COMPILER_RT_BUILD_XRAY) - compiler_rt_build_runtime(xray) -endif() +# the following set is conditional to COMPILER_RT_BUILD_XRAY +# (via COMPILER_RT_HAS_* in config-ix.cmake) +compiler_rt_build_runtime(xray) Index: test/sanitizer_common/CMakeLists.txt =================================================================== --- test/sanitizer_common/CMakeLists.txt +++ test/sanitizer_common/CMakeLists.txt @@ -4,13 +4,20 @@ set(SANITIZER_COMMON_TESTSUITES) set(SUPPORTED_TOOLS) -if(CMAKE_SYSTEM_NAME MATCHES "Darwin|Linux|FreeBSD" AND NOT ANDROID) +if(CMAKE_SYSTEM_NAME MATCHES "Darwin|Linux|FreeBSD" AND NOT ANDROID AND + COMPILER_RT_HAS_ASAN) list(APPEND SUPPORTED_TOOLS asan) endif() if(CMAKE_SYSTEM_NAME MATCHES "Linux" AND NOT ANDROID) - list(APPEND SUPPORTED_TOOLS tsan) - list(APPEND SUPPORTED_TOOLS msan) - list(APPEND SUPPORTED_TOOLS lsan) + if(COMPILER_RT_HAS_TSAN) + list(APPEND SUPPORTED_TOOLS tsan) + endif() + if(COMPILER_RT_HAS_MSAN) + list(APPEND SUPPORTED_TOOLS msan) + endif() + if(COMPILER_RT_HAS_LSAN) + list(APPEND SUPPORTED_TOOLS lsan) + endif() endif() # Create a separate config for each tool we support.