[compiler-rt] r217523 - Make compiler-rt tests work with relocatable SDKs on OS X

Kuba Brecka kuba.brecka at gmail.com
Wed Sep 10 10:23:58 PDT 2014


Author: kuba.brecka
Date: Wed Sep 10 12:23:58 2014
New Revision: 217523

URL: http://llvm.org/viewvc/llvm-project?rev=217523&view=rev
Log:
Make compiler-rt tests work with relocatable SDKs on OS X

Reviewed at http://reviews.llvm.org/D4047


Modified:
    compiler-rt/trunk/cmake/Modules/CompilerRTCompile.cmake
    compiler-rt/trunk/lib/sanitizer_common/tests/CMakeLists.txt

Modified: compiler-rt/trunk/cmake/Modules/CompilerRTCompile.cmake
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/cmake/Modules/CompilerRTCompile.cmake?rev=217523&r1=217522&r2=217523&view=diff
==============================================================================
--- compiler-rt/trunk/cmake/Modules/CompilerRTCompile.cmake (original)
+++ compiler-rt/trunk/cmake/Modules/CompilerRTCompile.cmake Wed Sep 10 12:23:58 2014
@@ -11,6 +11,9 @@ macro(clang_compile object_file source)
   if(NOT COMPILER_RT_STANDALONE_BUILD)
     list(APPEND SOURCE_DEPS clang)
   endif()
+  if (TARGET CompilerRTUnitTestCheckCxx)
+    list(APPEND SOURCE_DEPS CompilerRTUnitTestCheckCxx)
+  endif()
   string(REGEX MATCH "[.](cc|cpp)$" is_cxx ${source_rpath})
   if(is_cxx)
     string(REPLACE " " ";" global_flags "${CMAKE_CXX_FLAGS}")
@@ -36,3 +39,41 @@ macro(clang_compile object_file source)
     MAIN_DEPENDENCY ${source}
     DEPENDS ${SOURCE_DEPS})
 endmacro()
+
+# On Darwin, there are no system-wide C++ headers and the just-built clang is
+# therefore not able to compile C++ files unless they are copied/symlinked into
+# ${LLVM_BINARY_DIR}/include/c++
+# The just-built clang is used to build compiler-rt unit tests. Let's detect
+# this before we try to build the tests and print out a suggestion how to fix
+# it.
+# On other platforms, this is currently not an issue.
+macro(clang_compiler_add_cxx_check)
+  if (APPLE)
+    set(CMD
+      "echo '#include <iostream>' | ${COMPILER_RT_TEST_COMPILER} -E -x c++ - > /dev/null"
+      "if [ $? != 0 ] "
+      "  then echo"
+      "  echo 'Your just-built clang cannot find C++ headers, which are needed to build and run compiler-rt tests.'"
+      "  echo 'You should copy or symlink your system C++ headers into ${LLVM_BINARY_DIR}/include/c++'"
+      "  if [ -d $(dirname $(dirname $(xcrun -f clang)))/include/c++ ]"
+      "    then echo 'e.g. with:'"
+      "    echo '  cp -r' $(dirname $(dirname $(xcrun -f clang)))/include/c++ '${LLVM_BINARY_DIR}/include/'"
+      "  elif [ -d $(dirname $(dirname $(xcrun -f clang)))/lib/c++ ]"
+      "    then echo 'e.g. with:'"
+      "    echo '  cp -r' $(dirname $(dirname $(xcrun -f clang)))/lib/c++ '${LLVM_BINARY_DIR}/include/'"
+      "  fi"
+      "  echo 'This can also be fixed by checking out the libcxx project from llvm.org and installing the headers'"
+      "  echo 'into your build directory:'"
+      "  echo '  cd ${LLVM_SOURCE_DIR}/projects && svn co http://llvm.org/svn/llvm-project/libcxx/trunk libcxx'"
+      "  echo '  cd ${LLVM_BINARY_DIR} && make -C ${LLVM_SOURCE_DIR}/projects/libcxx installheaders HEADER_DIR=${LLVM_BINARY_DIR}/include'"
+      "  echo"
+      "  false"
+      "fi"
+      )
+    add_custom_target(CompilerRTUnitTestCheckCxx
+      COMMAND bash -c "${CMD}"
+      COMMENT "Checking that just-built clang can find C++ headers..."
+      DEPENDS clang
+      VERBATIM)
+  endif()
+endmacro()

Modified: compiler-rt/trunk/lib/sanitizer_common/tests/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/tests/CMakeLists.txt?rev=217523&r1=217522&r2=217523&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/tests/CMakeLists.txt (original)
+++ compiler-rt/trunk/lib/sanitizer_common/tests/CMakeLists.txt Wed Sep 10 12:23:58 2014
@@ -1,5 +1,7 @@
 include(CompilerRTCompile)
 
+clang_compiler_add_cxx_check()
+
 set(SANITIZER_UNITTESTS
   sanitizer_allocator_test.cc
   sanitizer_atomic_test.cc





More information about the llvm-commits mailing list