summaryrefslogtreecommitdiff
path: root/cmake/config-ix.cmake
diff options
context:
space:
mode:
authorChris Bieneman <beanz@apple.com>2015-12-09 22:45:03 +0000
committerChris Bieneman <beanz@apple.com>2015-12-09 22:45:03 +0000
commit7fbd9917dcc3cb590205331b82d8efc7322de09b (patch)
treed739b38cd8e4037d64487ed66f26b5bc83437860 /cmake/config-ix.cmake
parent30373afde77e6540e2768c164142af7d716cdb03 (diff)
[CMake] Provide options for toggling on and off various runtime libraries.
Summary: Rather than having to add new "experimental" options each time someone wants to work on bringing a sanitizer to a new platform, this patch makes options for all of them. The default values for the options are set by the platform checks that would have enabled them, but they can be overridden on or off. Reviewers: kubabrecka, samsonov Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D14846 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@255170 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'cmake/config-ix.cmake')
-rw-r--r--cmake/config-ix.cmake90
1 files changed, 47 insertions, 43 deletions
diff --git a/cmake/config-ix.cmake b/cmake/config-ix.cmake
index 700422b7c..2d1bbbbc3 100644
--- a/cmake/config-ix.cmake
+++ b/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()