Index: cmake/Modules/AddCompilerRT.cmake =================================================================== --- cmake/Modules/AddCompilerRT.cmake +++ cmake/Modules/AddCompilerRT.cmake @@ -276,6 +276,8 @@ -DCMAKE_CXX_FLAGS=${LIBCXX_CFLAGS} -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH= + -DLIBCXX_ABI_MAJOR_VERSION=${LIBCXX_ABI_MAJOR_VERSION} + -DLIBCXX_ABI_MINOR_VERSION=${LIBCXX_ABI_MINOR_VERSION} LOG_BUILD 1 LOG_CONFIGURE 1 LOG_INSTALL 1 Index: lib/msan/tests/CMakeLists.txt =================================================================== --- lib/msan/tests/CMakeLists.txt +++ lib/msan/tests/CMakeLists.txt @@ -92,20 +92,21 @@ macro(add_msan_tests_for_arch arch kind) # Build gtest instrumented with MSan. set(MSAN_INST_GTEST) + set(LIBCXX_CFLAGS "-I${LIBCXX_PREFIX}/include/c++/v${LIBCXX_ABI_MAJOR_VERSION}") msan_compile(MSAN_INST_GTEST ${COMPILER_RT_GTEST_SOURCE} ${arch} "${kind}" - ${MSAN_UNITTEST_INSTRUMENTED_CFLAGS} ${ARGN}) + ${LIBCXX_CFLAGS} ${MSAN_UNITTEST_INSTRUMENTED_CFLAGS} ${ARGN}) # Instrumented tests. set(MSAN_INST_TEST_OBJECTS) foreach (SOURCE ${MSAN_UNITTEST_SOURCES}) msan_compile(MSAN_INST_TEST_OBJECTS ${SOURCE} ${arch} "${kind}" - ${MSAN_UNITTEST_INSTRUMENTED_CFLAGS} ${ARGN}) + ${LIBCXX_CFLAGS} ${MSAN_UNITTEST_INSTRUMENTED_CFLAGS} ${ARGN}) endforeach(SOURCE) # Instrumented loadable module objects. set(MSAN_INST_LOADABLE_OBJECTS) msan_compile(MSAN_INST_LOADABLE_OBJECTS ${MSAN_LOADABLE_SOURCE} ${arch} "${kind}" - ${MSAN_UNITTEST_INSTRUMENTED_CFLAGS} ${ARGN}) + ${LIBCXX_CFLAGS} ${MSAN_UNITTEST_INSTRUMENTED_CFLAGS} ${ARGN}) # Instrumented loadable library tests. set(MSAN_LOADABLE_SO) Index: test/tsan/CMakeLists.txt =================================================================== --- test/tsan/CMakeLists.txt +++ test/tsan/CMakeLists.txt @@ -9,6 +9,8 @@ COMPILER_RT_TEST_COMPILER_ID STREQUAL "Clang") list(APPEND TSAN_TEST_DEPS libcxx_tsan) set(TSAN_HAS_LIBCXX True) + set(TSAN_LIBCXX_INCDIR ${CMAKE_CURRENT_BINARY_DIR}/../../lib/tsan/libcxx_tsan/include/c++/v${LIBCXX_ABI_MAJOR_VERSION}) + set(TSAN_LIBCXX_LIBDIR ${CMAKE_CURRENT_BINARY_DIR}/../../lib/tsan/libcxx_tsan/lib) else() set(TSAN_HAS_LIBCXX False) endif() Index: test/tsan/lit.cfg =================================================================== --- test/tsan/lit.cfg +++ test/tsan/lit.cfg @@ -35,16 +35,11 @@ clang_tsan_cxxflags = config.cxx_mode_flags + clang_tsan_cflags # Add additional flags if we're using instrumented libc++. if config.has_libcxx: - # FIXME: Dehardcode this path somehow. - libcxx_path = os.path.join(config.compiler_rt_obj_root, "lib", - "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") + libcxx_so = os.path.join(config.libcxx_libdir, "libc++.so") clang_tsan_cxxflags += ["-std=c++11", - "-I%s" % libcxx_incdir, + "-I%s" % config.libcxx_incdir, libcxx_so, - "-Wl,-rpath=%s" % libcxx_libdir] + "-Wl,-rpath=%s" % config.libcxx_libdir] def build_invocation(compile_flags): return " " + " ".join([config.clang] + compile_flags) + " " Index: test/tsan/lit.site.cfg.in =================================================================== --- test/tsan/lit.site.cfg.in +++ test/tsan/lit.site.cfg.in @@ -2,6 +2,8 @@ # Do not edit! config.has_libcxx = @TSAN_HAS_LIBCXX@ +config.libcxx_incdir = "@TSAN_LIBCXX_INCDIR@" +config.libcxx_libdir = "@TSAN_LIBCXX_LIBDIR@" # Load common config for all compiler-rt lit tests. lit_config.load_config(config, "@COMPILER_RT_BINARY_DIR@/test/lit.common.configured")