aboutsummaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorUsama Hameed <u_hameed@apple.com>2024-03-22 15:29:36 -0700
committerGitHub <noreply@github.com>2024-03-22 15:29:36 -0700
commit3bc71c2abfa00413fd15cf0e5c08af6ec0d4768b (patch)
tree7a8d5b213069a7cab3d74d25a00459754807a58d /cmake
parent51268a57fd4d7f67fe9fdb337f63ec390fa2379a (diff)
downloadllvm-3bc71c2abfa00413fd15cf0e5c08af6ec0d4768b.zip
llvm-3bc71c2abfa00413fd15cf0e5c08af6ec0d4768b.tar.gz
llvm-3bc71c2abfa00413fd15cf0e5c08af6ec0d4768b.tar.bz2
Get the linker version and pass the it to compiler-rt tests on Darwin. (#86220)
The HOST_LINK_VERSION is a hardcoded string in Darwin clang that detects the linker version at configure time. The driver uses this information to build the correct set of arguments for the linker. This patch detects the linker version again during compiler-rt configuration and passes it to the tests. This allows a clang built on a machine with a new linker to run compiler-rt tests on a machine with an old linker. rdar://125198603
Diffstat (limited to 'cmake')
-rw-r--r--cmake/Modules/GetDarwinLinkerVersion.cmake19
1 files changed, 19 insertions, 0 deletions
diff --git a/cmake/Modules/GetDarwinLinkerVersion.cmake b/cmake/Modules/GetDarwinLinkerVersion.cmake
new file mode 100644
index 0000000..c27e501
--- /dev/null
+++ b/cmake/Modules/GetDarwinLinkerVersion.cmake
@@ -0,0 +1,19 @@
+# Get the linker version on Darwin
+function(get_darwin_linker_version variable)
+ set(LINK_VERSION)
+ 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 (HAD_ERROR)
+ message(FATAL_ERROR "${CMAKE_LINKER} failed with status ${HAD_ERROR}")
+ endif()
+ if ("${LD_V_OUTPUT}" MATCHES ".*ld64-([0-9.]+).*")
+ string(REGEX REPLACE ".*ld64-([0-9.]+).*" "\\1" LINK_VERSION ${LD_V_OUTPUT})
+ elseif ("${LD_V_OUTPUT}" MATCHES "[^0-9]*([0-9.]+).*")
+ string(REGEX REPLACE "[^0-9]*([0-9.]+).*" "\\1" LINK_VERSION ${LD_V_OUTPUT})
+ endif()
+ set(${variable} ${LINK_VERSION} PARENT_SCOPE)
+endfunction()