mgorny created this revision. mgorny added reviewers: beanz, samsonov. mgorny added a subscriber: cfe-commits. Herald added subscribers: dberris, kubabrecka, srhines, danalbert, tberghammer.
Refactor the code to respect COMPILER_RT_BUILD_SANITIZERS and COMPILER_RT_BUILD_XRAY consistently for both libraries and tests. In order to achieve that, factor those variables in when setting COMPILER_RT_* in config-ix.cmake. This makes the COMPILER_RT_* variables suitable for determining both whether to build libraries and whether to run tests. Update the conditionals in lib/CMakeLists.txt appropriately to remove unnecessary double-use of COMPILER_RT_BUILD_* variables when COMPILER_RT_HAS_* already controls the particular component. Fix sanitizer_common tests to respect COMPILER_RT_HAS_* when determining which tools are supported. https://reviews.llvm.org/D25157 Files: cmake/config-ix.cmake lib/CMakeLists.txt test/sanitizer_common/CMakeLists.txt
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. 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: cmake/config-ix.cmake =================================================================== --- cmake/config-ix.cmake +++ cmake/config-ix.cmake @@ -416,20 +416,23 @@ 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) else() 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,76 +447,87 @@ # 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() set(COMPILER_RT_HAS_DFSAN FALSE) 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() set(COMPILER_RT_HAS_LSAN FALSE) 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() set(COMPILER_RT_HAS_MSAN FALSE) 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() set(COMPILER_RT_HAS_PROFILE FALSE) 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() set(COMPILER_RT_HAS_TSAN FALSE) 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() set(COMPILER_RT_HAS_UBSAN FALSE) 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() set(COMPILER_RT_HAS_SAFESTACK FALSE) 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() set(COMPILER_RT_HAS_CFI FALSE) 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() set(COMPILER_RT_HAS_ESAN FALSE) 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() set(COMPILER_RT_HAS_SCUDO FALSE) 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()
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits