aboutsummaryrefslogtreecommitdiff
path: root/libcxxabi
diff options
context:
space:
mode:
authorLouis Dionne <ldionne@apple.com>2018-10-10 22:00:58 +0000
committerLouis Dionne <ldionne@apple.com>2018-10-10 22:00:58 +0000
commit336db683782ba037b6e6b11711fc8d199d48f1c4 (patch)
treea00b6bf3bcac80e7464eb6b1357a02ab7b0f7df2 /libcxxabi
parenta52d151f9dde72afa948742843827ebc7e097460 (diff)
[libcxxabi] Allow building with sanitizers enabled
Summary: I copied the sanitizer-related logic in libcxx/lib/CMakeLists.txt. In the future, it would be great to avoid duplicating this logic in the compiler, libc++ and libc++abi. Reviewers: EricWF Subscribers: mgorny, christof, dexonsmith, libcxx-commits, davide Differential Revision: https://reviews.llvm.org/D53028 llvm-svn: 344191
Diffstat (limited to 'libcxxabi')
-rw-r--r--libcxxabi/src/CMakeLists.txt25
-rw-r--r--libcxxabi/test/lit.site.cfg.in1
2 files changed, 26 insertions, 0 deletions
diff --git a/libcxxabi/src/CMakeLists.txt b/libcxxabi/src/CMakeLists.txt
index 776c51294330..d3581cc930de 100644
--- a/libcxxabi/src/CMakeLists.txt
+++ b/libcxxabi/src/CMakeLists.txt
@@ -102,6 +102,31 @@ if ( APPLE )
"-compatibility_version 1"
"-install_name /usr/lib/libc++abi.1.dylib")
endif()
+
+ if (LLVM_USE_SANITIZER)
+ if (("${LLVM_USE_SANITIZER}" STREQUAL "Address") OR
+ ("${LLVM_USE_SANITIZER}" STREQUAL "Address;Undefined") OR
+ ("${LLVM_USE_SANITIZER}" STREQUAL "Undefined;Address"))
+ set(LIBFILE "libclang_rt.asan_osx_dynamic.dylib")
+ elseif("${LLVM_USE_SANITIZER}" STREQUAL "Undefined")
+ set(LIBFILE "libclang_rt.ubsan_osx_dynamic.dylib")
+ elseif("${LLVM_USE_SANITIZER}" STREQUAL "Thread")
+ set(LIBFILE "libclang_rt.tsan_osx_dynamic.dylib")
+ else()
+ message(WARNING "LLVM_USE_SANITIZER=${LLVM_USE_SANITIZER} is not supported on OS X")
+ endif()
+ if (LIBFILE)
+ find_compiler_rt_dir(LIBDIR)
+ if (NOT IS_DIRECTORY "${LIBDIR}")
+ message(FATAL_ERROR "Cannot find compiler-rt directory on OS X required for LLVM_USE_SANITIZER")
+ endif()
+ set(LIBCXXABI_SANITIZER_LIBRARY "${LIBDIR}/${LIBFILE}")
+ set(LIBCXXABI_SANITIZER_LIBRARY "${LIBCXXABI_SANITIZER_LIBRARY}" PARENT_SCOPE)
+ message(STATUS "Manually linking compiler-rt library: ${LIBCXXABI_SANITIZER_LIBRARY}")
+ add_library_flags("${LIBCXXABI_SANITIZER_LIBRARY}")
+ add_link_flags("-Wl,-rpath,${LIBDIR}")
+ endif()
+ endif()
endif()
split_list(LIBCXXABI_COMPILE_FLAGS)
diff --git a/libcxxabi/test/lit.site.cfg.in b/libcxxabi/test/lit.site.cfg.in
index a66c9e4698cd..75cb76e2557f 100644
--- a/libcxxabi/test/lit.site.cfg.in
+++ b/libcxxabi/test/lit.site.cfg.in
@@ -11,6 +11,7 @@ config.cxx_library_root = "@LIBCXXABI_LIBCXX_LIBRARY_PATH@"
config.llvm_unwinder = "@LIBCXXABI_USE_LLVM_UNWINDER@"
config.enable_threads = "@LIBCXXABI_ENABLE_THREADS@"
config.use_sanitizer = "@LLVM_USE_SANITIZER@"
+config.sanitizer_library = "@LIBCXXABI_SANITIZER_LIBRARY@"
config.enable_32bit = "@LIBCXXABI_BUILD_32_BITS@"
config.target_info = "@LIBCXXABI_TARGET_INFO@"
config.executor = "@LIBCXXABI_EXECUTOR@"