diff options
author | Eric Fiselier <eric@efcs.ca> | 2015-07-22 00:33:36 +0000 |
---|---|---|
committer | Eric Fiselier <eric@efcs.ca> | 2015-07-22 00:33:36 +0000 |
commit | d1bac4ce57f2d0581bd66a9fe4a4233885c456b8 (patch) | |
tree | 3de57f00ca196f2b7f1c260e5428d1f4d77006a3 /libcxx/lib | |
parent | f179e36e0e2c0ca8a28815c95758c3e44ad08fc6 (diff) | |
download | bcm5719-llvm-d1bac4ce57f2d0581bd66a9fe4a4233885c456b8.tar.gz bcm5719-llvm-d1bac4ce57f2d0581bd66a9fe4a4233885c456b8.zip |
[libcxx] Add support for sanitizers on OS X.
Summary: This patch adds special configuration logic to find the compiler_rt libraries required by sanitizers on OS X. The supported sanitizers are Address and Undefined.
Reviewers: mclow.lists
Subscribers: cfe-commits
Differential Revision: http://reviews.llvm.org/D11381
llvm-svn: 242858
Diffstat (limited to 'libcxx/lib')
-rw-r--r-- | libcxx/lib/CMakeLists.txt | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/libcxx/lib/CMakeLists.txt b/libcxx/lib/CMakeLists.txt index d3d5f381d81..a32f2931447 100644 --- a/libcxx/lib/CMakeLists.txt +++ b/libcxx/lib/CMakeLists.txt @@ -68,6 +68,32 @@ if (LIBCXX_COVERAGE_LIBRARY) endif() target_link_libraries(cxx ${libraries}) +if (APPLE AND LLVM_USE_SANITIZER) + if ("${LLVM_USE_SANITIZER}" STREQUAL "Address") + set(LIBFILE "libclang_rt.asan_osx_dynamic.dylib") + elseif("${LLVM_USE_SANITIZER}" STREQUAL "Undefined") + set(LIBFILE "libclang_rt.ubsan_osx_dynamic.dylib") + else() + message(WARNING "LLVM_USE_SANITIZER=${LLVM_USE_SANITIZER} is not supported on OS X") + endif() + if (LIBFILE) + execute_process(COMMAND ${CMAKE_CXX_COMPILER} -print-file-name=lib OUTPUT_VARIABLE LIBDIR RESULT_VARIABLE Result) + if (NOT ${Result} EQUAL "0") + message(FATAL "Failed to find library resource directory") + endif() + string(STRIP "${LIBDIR}" LIBDIR) + set(LIBDIR "${LIBDIR}/darwin/") + if (NOT IS_DIRECTORY "${LIBDIR}") + message(FATAL_ERROR "Cannot find compiler-rt directory on OS X required for LLVM_USE_SANITIZER") + endif() + set(LIBCXX_SANITIZER_LIBRARY "${LIBDIR}/${LIBFILE}") + set(LIBCXX_SANITIZER_LIBRARY "${LIBCXX_SANITIZER_LIBRARY}" PARENT_SCOPE) + message(STATUS "Manually linking compiler-rt library: ${LIBCXX_SANITIZER_LIBRARY}") + target_link_libraries(cxx "${LIBCXX_SANITIZER_LIBRARY}") + target_link_libraries(cxx "-Wl,-rpath,${LIBDIR}") + endif() +endif() + # Setup flags. append_if(LIBCXX_COMPILE_FLAGS LIBCXX_HAS_FPIC_FLAG -fPIC) |