Skip to content

Commit f44e226

Browse files
committed
[CMake][llbuildSwift] change the runpath to an architecture-specific directory on ELF platforms
This is needed for swiftlang/swift#63782, which changes the Unix toolchain to look for libraries in architecture-specific directories.
1 parent 57f5b52 commit f44e226

File tree

1 file changed

+36
-1
lines changed

1 file changed

+36
-1
lines changed

products/llbuildSwift/CMakeLists.txt

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,37 @@
1+
# Returns the current architecture name in a variable
2+
#
3+
# Usage:
4+
# get_swift_host_arch(result_var_name)
5+
#
6+
# If the current architecture is supported by Swift, sets ${result_var_name}
7+
# with the sanitized host architecture name derived from CMAKE_SYSTEM_PROCESSOR.
8+
function(get_swift_host_arch result_var_name)
9+
if("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "amd64|x86_64|s390x|wasm32")
10+
set("${result_var_name}" "${CMAKE_SYSTEM_PROCESSOR}" PARENT_SCOPE)
11+
elseif ("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "AArch64|aarch64|arm64")
12+
if(CMAKE_SYSTEM_NAME MATCHES Darwin)
13+
set("${result_var_name}" "arm64" PARENT_SCOPE)
14+
else()
15+
set("${result_var_name}" "aarch64" PARENT_SCOPE)
16+
endif()
17+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ppc64")
18+
set("${result_var_name}" "powerpc64" PARENT_SCOPE)
19+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ppc64le")
20+
set("${result_var_name}" "powerpc64le" PARENT_SCOPE)
21+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "armv6l")
22+
set("${result_var_name}" "armv6" PARENT_SCOPE)
23+
elseif("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "armv7-a|armv7l")
24+
set("${result_var_name}" "armv7" PARENT_SCOPE)
25+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "AMD64")
26+
set("${result_var_name}" "x86_64" PARENT_SCOPE)
27+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "IA64")
28+
set("${result_var_name}" "itanium" PARENT_SCOPE)
29+
elseif("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "x86|i686")
30+
set("${result_var_name}" "i686" PARENT_SCOPE)
31+
else()
32+
message(FATAL_ERROR "Unrecognized architecture on host system: ${CMAKE_SYSTEM_PROCESSOR}")
33+
endif()
34+
endfunction()
135

236
if(CMAKE_VERSION VERSION_LESS 3.16)
337
if(NOT CMAKE_SYSTEM_NAME STREQUAL Windows AND NOT CMAKE_SYSTEM_NAME STREQUAL Darwin)
@@ -64,8 +98,9 @@ else()
6498
Foundation)
6599
if(NOT CMAKE_SYSTEM_NAME STREQUAL Windows)
66100
target_link_options(llbuildSwift PRIVATE "SHELL:-no-toolchain-stdlib-rpath")
101+
get_swift_host_arch(swift_arch)
67102
set_target_properties(llbuildSwift PROPERTIES
68-
INSTALL_RPATH "$ORIGIN/../../$<LOWER_CASE:${CMAKE_SYSTEM_NAME}>")
103+
INSTALL_RPATH "$ORIGIN/../../$<LOWER_CASE:${CMAKE_SYSTEM_NAME}>/${swift_arch}")
69104
endif()
70105
endif()
71106
set_target_properties(llbuildSwift PROPERTIES

0 commit comments

Comments
 (0)