From 336db683782ba037b6e6b11711fc8d199d48f1c4 Mon Sep 17 00:00:00 2001 From: Louis Dionne Date: Wed, 10 Oct 2018 22:00:58 +0000 Subject: [PATCH] [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 --- libcxxabi/src/CMakeLists.txt | 25 +++++++++++++++++++++++++ libcxxabi/test/lit.site.cfg.in | 1 + 2 files changed, 26 insertions(+) diff --git a/libcxxabi/src/CMakeLists.txt b/libcxxabi/src/CMakeLists.txt index 776c512..d3581cc 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 a66c9e4..75cb76e 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@" -- 2.7.4