]> granicus.if.org Git - clang/commitdiff
CMake: Set HOST_LINK_VERSION on Darwin (PR21268)
authorHans Wennborg <hans@hanshq.net>
Thu, 13 Nov 2014 00:35:23 +0000 (00:35 +0000)
committerHans Wennborg <hans@hanshq.net>
Thu, 13 Nov 2014 00:35:23 +0000 (00:35 +0000)
The Autoconf build already does this, but it was never ported to
CMake. The host linker version affects the flags that Clang pass
to the linker, notably whether it passes -demangle or not.

http://reviews.llvm.org/D6239

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@221844 91177308-0d34-0410-b5e6-96231b3b80d8

CMakeLists.txt
include/clang/Config/config.h.cmake
include/clang/Config/config.h.in
test/Driver/darwin-ld-demangle.c [new file with mode: 0644]

index fbff5add48094fdf5c7a93327cef6eaef4bebd65..fe0d5f2621367b8fa157fc7e8e10050416a8bfb1 100644 (file)
@@ -253,6 +253,26 @@ if (LLVM_COMPILER_IS_GCC_COMPATIBLE)
   endif()
 endif ()
 
+# Determine HOST_LINK_VERSION on Darwin.
+set(HOST_LINK_VERSION)
+if (APPLE)
+  set(LD_V_OUTPUT)
+  execute_process(
+    COMMAND sh -c "${CMAKE_LINKER} -v 2>&1 | head -1"
+    RESULT_VARIABLE HAD_ERROR
+    OUTPUT_VARIABLE LD_V_OUTPUT
+  )
+  if (NOT HAD_ERROR)
+    if ("${LD_V_OUTPUT}" MATCHES ".*ld64.*")
+      string(REGEX REPLACE ".*ld64-([0-9.]*).*" "\\1" HOST_LINK_VERSION ${LD_V_OUTPUT})
+    else()
+      string(REGEX REPLACE "[^0-9]*([0-9.]*).*" "\\1" HOST_LINK_VERSION ${LD_V_OUTPUT})
+    endif()
+  else()
+    message(FATAL_ERROR "${CMAKE_LINKER} failed with status ${HAD_ERROR}")
+  endif()
+endif()
+
 configure_file(
   ${CLANG_SOURCE_DIR}/include/clang/Config/config.h.cmake
   ${CLANG_BINARY_DIR}/include/clang/Config/config.h)
index 7629ef9129b1f45d64682c1c64ccb10a0268c3c8..38b398cffd0159e0a94befbf6e27b572a7294451 100644 (file)
@@ -26,4 +26,7 @@
 /* The LLVM product name and version */
 #define BACKEND_PACKAGE_STRING "${BACKEND_PACKAGE_STRING}"
 
+/* Linker version detected at compile time. */
+#cmakedefine HOST_LINK_VERSION "${HOST_LINK_VERSION}"
+
 #endif
index 1530fefaa53d4221c2df8d642dac312465e607cc..3c2cb075ef4b5ac9e4a464a058b904368c5ba257 100644 (file)
@@ -14,9 +14,6 @@
 /* Directories clang will search for headers */
 #undef C_INCLUDE_DIRS
 
-/* Linker version detected at compile time. */
-#undef HOST_LINK_VERSION
-
 /* Default <path> to all compiler invocations for --sysroot=<path>. */
 #undef DEFAULT_SYSROOT
 
@@ -31,4 +28,7 @@
 /* The LLVM product name and version */
 #define BACKEND_PACKAGE_STRING PACKAGE_STRING
 
+/* Linker version detected at compile time. */
+#undef HOST_LINK_VERSION
+
 #endif
diff --git a/test/Driver/darwin-ld-demangle.c b/test/Driver/darwin-ld-demangle.c
new file mode 100644 (file)
index 0000000..1eef3c7
--- /dev/null
@@ -0,0 +1,8 @@
+// REQUIRES: system-darwin
+
+// On Darwin, -demangle is passed to the linker of HOST_LINK_VERSION
+// is high enough. It is assumed to be high enough on systems where
+// this test gets run.
+
+// RUN: %clang -### %s 2>&1 | FileCheck %s
+// CHECK: -demangle