summaryrefslogtreecommitdiffstats
path: root/compiler-rt/cmake/config-ix.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'compiler-rt/cmake/config-ix.cmake')
-rw-r--r--compiler-rt/cmake/config-ix.cmake90
1 files changed, 47 insertions, 43 deletions
diff --git a/compiler-rt/cmake/config-ix.cmake b/compiler-rt/cmake/config-ix.cmake
index 700422b7cb7..2d1bbbbc3ce 100644
--- a/compiler-rt/cmake/config-ix.cmake
+++ b/compiler-rt/cmake/config-ix.cmake
@@ -505,78 +505,82 @@ endif()
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)
-else()
- set(COMPILER_RT_HAS_SANITIZER_COMMON FALSE)
+ list(APPEND DEFAULT_RUNTIMES sanitizer_common)
endif()
-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)
-else()
- set(COMPILER_RT_HAS_INTERCEPTION FALSE)
+if (NOT OS_NAME MATCHES "Windows" OR CMAKE_SIZEOF_VOID_P EQUAL 4)
+ list(APPEND DEFAULT_RUNTIMES interception)
+ list(APPEND REQUIRES_COMMON interception)
endif()
-if (COMPILER_RT_HAS_SANITIZER_COMMON AND ASAN_SUPPORTED_ARCH AND
+if (ASAN_SUPPORTED_ARCH AND
(NOT OS_NAME MATCHES "Windows" OR CMAKE_SIZEOF_VOID_P EQUAL 4))
- set(COMPILER_RT_HAS_ASAN TRUE)
-else()
- set(COMPILER_RT_HAS_ASAN FALSE)
+ list(APPEND DEFAULT_RUNTIMES asan)
+ list(APPEND REQUIRES_COMMON asan)
endif()
if (OS_NAME MATCHES "Linux|FreeBSD|Windows")
- set(COMPILER_RT_ASAN_HAS_STATIC_RUNTIME TRUE)
-else()
- set(COMPILER_RT_ASAN_HAS_STATIC_RUNTIME FALSE)
+ set(COMPILER_RT_ASAN_HAS_STATIC_RUNTIME On)
endif()
# TODO: Add builtins support.
-if (COMPILER_RT_HAS_SANITIZER_COMMON AND DFSAN_SUPPORTED_ARCH AND
+if (DFSAN_SUPPORTED_ARCH AND
OS_NAME MATCHES "Linux")
- set(COMPILER_RT_HAS_DFSAN TRUE)
-else()
- set(COMPILER_RT_HAS_DFSAN FALSE)
+ list(APPEND DEFAULT_RUNTIMES dfsan)
+ list(APPEND REQUIRES_COMMON dfsan)
endif()
-if (COMPILER_RT_HAS_SANITIZER_COMMON AND LSAN_SUPPORTED_ARCH AND
- OS_NAME MATCHES "Linux|FreeBSD")
- set(COMPILER_RT_HAS_LSAN TRUE)
-else()
- set(COMPILER_RT_HAS_LSAN FALSE)
+if (LSAN_SUPPORTED_ARCH AND OS_NAME MATCHES "Linux|FreeBSD")
+ list(APPEND DEFAULT_RUNTIMES lsan)
+ list(APPEND REQUIRES_COMMON lsan)
endif()
-if (COMPILER_RT_HAS_SANITIZER_COMMON AND MSAN_SUPPORTED_ARCH AND
+if (MSAN_SUPPORTED_ARCH AND
OS_NAME MATCHES "Linux")
- set(COMPILER_RT_HAS_MSAN TRUE)
-else()
- set(COMPILER_RT_HAS_MSAN FALSE)
+ list(APPEND DEFAULT_RUNTIMES msan)
+ list(APPEND REQUIRES_COMMON msan)
endif()
if (PROFILE_SUPPORTED_ARCH AND
OS_NAME MATCHES "Darwin|Linux|FreeBSD")
- set(COMPILER_RT_HAS_PROFILE TRUE)
-else()
- set(COMPILER_RT_HAS_PROFILE FALSE)
+ list(APPEND DEFAULT_RUNTIMES profile)
endif()
-if (COMPILER_RT_HAS_SANITIZER_COMMON AND TSAN_SUPPORTED_ARCH AND
+if (TSAN_SUPPORTED_ARCH AND
OS_NAME MATCHES "Darwin|Linux|FreeBSD")
- set(COMPILER_RT_HAS_TSAN TRUE)
-else()
- set(COMPILER_RT_HAS_TSAN FALSE)
+ list(APPEND DEFAULT_RUNTIMES tsan)
+ list(APPEND REQUIRES_COMMON tsan)
endif()
-if (COMPILER_RT_HAS_SANITIZER_COMMON AND UBSAN_SUPPORTED_ARCH AND
+if (UBSAN_SUPPORTED_ARCH AND
OS_NAME MATCHES "Darwin|Linux|FreeBSD|Windows")
- set(COMPILER_RT_HAS_UBSAN TRUE)
-else()
- set(COMPILER_RT_HAS_UBSAN FALSE)
+ list(APPEND DEFAULT_RUNTIMES ubsan)
+ list(APPEND REQUIRES_COMMON ubsan)
endif()
+list(APPEND DEFAULT_RUNTIMES cfi)
-if (COMPILER_RT_HAS_SANITIZER_COMMON AND SAFESTACK_SUPPORTED_ARCH AND
+if (SAFESTACK_SUPPORTED_ARCH AND
OS_NAME MATCHES "Darwin|Linux|FreeBSD")
- set(COMPILER_RT_HAS_SAFESTACK TRUE)
-else()
- set(COMPILER_RT_HAS_SAFESTACK FALSE)
+ list(APPEND DEFAULT_RUNTIMES safestack)
+ list(APPEND REQUIRES_COMMON safestack)
+endif()
+
+set(COMPILER_RT_RUNTIMES_TO_BUILD "all"
+ CACHE STRING "Semicolon-separated list of runtimes to build, or \"all\".")
+
+if(COMPILER_RT_RUNTIMES_TO_BUILD STREQUAL "all")
+ set(COMPILER_RT_RUNTIMES_TO_BUILD ${DEFAULT_RUNTIMES})
+endif()
+
+# Several of the runtimes produce object libraries that are consumed by other
+# runtimes (i.e. asan relies on ubsan). If you're building a library that relies
+# on common bits we need to build this full set of libraries.
+list_union(SHOULD_BUILD_COMMON REQUIRES_COMMON COMPILER_RT_RUNTIMES_TO_BUILD)
+
+if(SHOULD_BUILD_COMMON)
+ append_list_unique(COMPILER_RT_RUNTIMES_TO_BUILD sanitizer_common)
+ append_list_unique(COMPILER_RT_RUNTIMES_TO_BUILD lsan)
+ append_list_unique(COMPILER_RT_RUNTIMES_TO_BUILD ubsan)
+ append_list_unique(COMPILER_RT_RUNTIMES_TO_BUILD interception)
endif()
OpenPOWER on IntegriCloud