diff options
author | Petr Hosek <phosek@chromium.org> | 2017-07-26 01:43:02 +0000 |
---|---|---|
committer | Petr Hosek <phosek@chromium.org> | 2017-07-26 01:43:02 +0000 |
commit | c2c3d6b87ba929d457ed50ea8e4caae081d13eae (patch) | |
tree | 3d963ce4a48531759c189c95f036fcbd182f3478 /compiler-rt/CMakeLists.txt | |
parent | c54b6c881b82faed035c75d9d339a3c2d42d7eba (diff) | |
download | bcm5719-llvm-c2c3d6b87ba929d457ed50ea8e4caae081d13eae.tar.gz bcm5719-llvm-c2c3d6b87ba929d457ed50ea8e4caae081d13eae.zip |
[sanitizer] Support libc++abi in addition to libstdc++
This change adds sanitizer support for LLVM's libunwind and libc++abi
as an alternative to libstdc++. This allows using the in tree version
of libunwind and libc++abi which is useful when building a toolchain
for different target.
Differential Revision: https://reviews.llvm.org/D34501
llvm-svn: 309074
Diffstat (limited to 'compiler-rt/CMakeLists.txt')
-rw-r--r-- | compiler-rt/CMakeLists.txt | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/compiler-rt/CMakeLists.txt b/compiler-rt/CMakeLists.txt index d2d829ae08d..0b48174570d 100644 --- a/compiler-rt/CMakeLists.txt +++ b/compiler-rt/CMakeLists.txt @@ -94,6 +94,40 @@ endif() option(SANITIZER_CAN_USE_CXXABI "Sanitizers can use cxxabi" ${use_cxxabi_default}) pythonize_bool(SANITIZER_CAN_USE_CXXABI) +set(SANITIZER_CXX_ABI "default" CACHE STRING + "Specify C++ ABI library to use.") +set(CXXABIS none default libcxxabi libstdc++) +set_property(CACHE SANITIZER_CXX_ABI PROPERTY STRINGS ;${CXXABIS}) + +if (SANITIZER_CXX_ABI STREQUAL "default") + if (HAVE_LIBCXXABI AND COMPILER_RT_DEFAULT_TARGET_ONLY) + set(SANITIZER_CXX_ABI_LIBNAME "libcxxabi") + set(SANITIZER_CXX_ABI_INTREE 1) + elseif (APPLE) + set(SANITIZER_CXX_ABI_LIBNAME "libcxxabi") + set(SANITIZER_CXX_ABI_SYSTEM 1) + else() + set(SANITIZER_CXX_ABI_LIBNAME "libstdc++") + endif() +elseif() + set(SANITIZER_CXX_ABI_LIBNAME "${SANITIZER_CXX_ABI}") +endif() + +if (SANITIZER_CXX_ABI_LIBNAME STREQUAL "libcxxabi") + if (SANITIZER_CXX_ABI_INTREE) + if (TARGET unwind_shared OR HAVE_LIBUNWIND) + list(APPEND SANITIZER_CXX_ABI_LIBRARY unwind_shared) + endif() + if (TARGET cxxabi_shared OR HAVE_LIBCXXABI) + list(APPEND SANITIZER_CXX_ABI_LIBRARY cxxabi_shared) + endif() + else() + list(APPEND SANITIZER_CXX_ABI_LIBRARY "c++abi") + endif() +elseif (SANITIZER_CXX_ABI_LIBNAME STREQUAL "libstdc++") + append_list_if(COMPILER_RT_HAS_LIBSTDCXX stdc++ SANITIZER_CXX_ABI_LIBRARY) +endif() + option(SANITIZER_USE_COMPILER_RT "Use compiler-rt builtins instead of libgcc" OFF) #================================ |