Index: cmake/Modules/AddCompilerRT.cmake =================================================================== --- cmake/Modules/AddCompilerRT.cmake +++ cmake/Modules/AddCompilerRT.cmake @@ -280,6 +280,10 @@ if(NOT COMPILER_RT_STANDALONE_BUILD) list(APPEND LIBCXX_DEPS clang) endif() + set(LIBCXX_SHARED_LINKER_FLAGS) + if (APPLE) + set(LIBCXX_SHARED_LINKER_FLAGS "-undefined dynamic_lookup") + endif() ExternalProject_Add(${name} PREFIX ${prefix} @@ -289,6 +293,7 @@ -DCMAKE_C_FLAGS=${LIBCXX_CFLAGS} -DCMAKE_CXX_FLAGS=${LIBCXX_CFLAGS} -DCMAKE_BUILD_TYPE=Release + -DCMAKE_SHARED_LINKER_FLAGS=${LIBCXX_SHARED_LINKER_FLAGS} -DCMAKE_INSTALL_PREFIX:PATH= LOG_BUILD 1 LOG_CONFIGURE 1 Index: test/tsan/CMakeLists.txt =================================================================== --- test/tsan/CMakeLists.txt +++ test/tsan/CMakeLists.txt @@ -6,8 +6,7 @@ list(APPEND TSAN_TEST_DEPS tsan) endif() if(COMPILER_RT_HAS_LIBCXX_SOURCES AND - COMPILER_RT_TEST_COMPILER_ID STREQUAL "Clang" - AND NOT APPLE) + COMPILER_RT_TEST_COMPILER_ID STREQUAL "Clang") list(APPEND TSAN_TEST_DEPS libcxx_tsan) set(TSAN_HAS_LIBCXX True) else() Index: test/tsan/lit.cfg =================================================================== --- test/tsan/lit.cfg +++ test/tsan/lit.cfg @@ -37,6 +37,9 @@ clang_tsan_cflags = ["-fsanitize=thread", "-Wall", "-m64"] + config.debug_info_flags + extra_cflags +if config.host_os == 'Darwin': + clang_tsan_cflags.extend(["-isystem", os.path.join(config.test_source_root)]) + clang_tsan_cxxflags = config.cxx_mode_flags + clang_tsan_cflags # Add additional flags if we're using instrumented libc++. # Instrumented libcxx currently not supported on Darwin. @@ -46,11 +49,16 @@ "tsan", "libcxx_tsan") libcxx_incdir = os.path.join(libcxx_path, "include", "c++", "v1") libcxx_libdir = os.path.join(libcxx_path, "lib") - libcxx_so = os.path.join(libcxx_libdir, "libc++.so") + if config.host_os == 'Darwin': + libcxx_so = os.path.join(libcxx_libdir, "libc++.dylib") + rpath_flag = '-Wl,-rpath,%s' % libcxx_so + else: + libcxx_so = os.path.join(libcxx_libdir, "libc++.so") + rpath_flag = '-Wl,-rpath=%s' % libcxx_so clang_tsan_cxxflags += ["-std=c++11", "-I%s" % libcxx_incdir, libcxx_so, - "-Wl,-rpath=%s" % libcxx_libdir] + rpath_flag] def build_invocation(compile_flags): return " " + " ".join([config.clang] + compile_flags) + " "