diff options
Diffstat (limited to 'compiler-rt/cmake')
| -rw-r--r-- | compiler-rt/cmake/Modules/CompilerRTUtils.cmake | 19 | ||||
| -rw-r--r-- | compiler-rt/cmake/config-ix.cmake | 90 |
2 files changed, 66 insertions, 43 deletions
diff --git a/compiler-rt/cmake/Modules/CompilerRTUtils.cmake b/compiler-rt/cmake/Modules/CompilerRTUtils.cmake index cf690f4a33c..f9c7f0fedea 100644 --- a/compiler-rt/cmake/Modules/CompilerRTUtils.cmake +++ b/compiler-rt/cmake/Modules/CompilerRTUtils.cmake @@ -36,6 +36,16 @@ macro(append_list_if condition value) endif() endmacro() +# Appends values to list if it isn't already there +macro(append_list_unique list) + foreach(val ${ARGN}) + list(FIND ${list} ${val} idx) + if(idx EQUAL -1) + list(APPEND ${list} ${val}) + endif() + endforeach() +endmacro() + # Appends value to all strings in ARGN, if the condition is true. macro(append_string_if condition value) if(${condition}) @@ -67,3 +77,12 @@ macro(list_union output input1 input2) endif() endforeach() endmacro() + +macro(check_list_contains outvar list input) + list(FIND ${list} ${input} idx) + if(idx GREATER -1) + set(${outvar} True) + else() + set(${outvar} False) + endif() +endmacro() 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() |

