Skip to content

Commit 5301c96

Browse files
committed
Use the arch value from the compiler
1 parent e73dc2b commit 5301c96

File tree

2 files changed

+21
-53
lines changed

2 files changed

+21
-53
lines changed

CMakeLists.txt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -315,9 +315,8 @@ if(ENABLE_SWIFT)
315315
set(SWIFT_SYSTEM_NAME "$<LOWER_CASE:${CMAKE_SYSTEM_NAME}>")
316316
endif()
317317
endif()
318-
get_swift_host_arch(swift_arch)
319318

320-
set(INSTALL_TARGET_DIR "${CMAKE_INSTALL_LIBDIR}/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>/${SWIFT_SYSTEM_NAME}/${swift_arch}" CACHE PATH "Path where the libraries will be installed")
319+
set(INSTALL_TARGET_DIR "${CMAKE_INSTALL_LIBDIR}/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>/${SWIFT_SYSTEM_NAME}/${dispatch_Swift_ARCH}" CACHE PATH "Path where the libraries will be installed")
321320
set(INSTALL_DISPATCH_HEADERS_DIR "${CMAKE_INSTALL_LIBDIR}/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>/dispatch" CACHE PATH "Path where the headers will be installed for libdispatch")
322321
set(INSTALL_BLOCK_HEADERS_DIR "${CMAKE_INSTALL_LIBDIR}/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>/Block" CACHE PATH "Path where the headers will be installed for the blocks runtime")
323322
set(INSTALL_OS_HEADERS_DIR "${CMAKE_INSTALL_LIBDIR}/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>/os" CACHE PATH "Path where the os/ headers will be installed")

cmake/modules/SwiftSupport.cmake

Lines changed: 20 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,5 @@
11
include_guard()
22

3-
# Returns the architecture name in a variable
4-
#
5-
# Usage:
6-
# get_swift_host_arch(result_var_name)
7-
#
8-
# Sets ${result_var_name} with the converted architecture name derived from
9-
# CMAKE_SYSTEM_PROCESSOR or CMAKE_HOST_SYSTEM_PROCESSOR.
10-
function(get_swift_host_arch result_var_name)
11-
if(CMAKE_SYSTEM_PROCESSOR)
12-
set(cmake_arch ${CMAKE_SYSTEM_PROCESSOR})
13-
else()
14-
set(cmake_arch ${CMAKE_HOST_SYSTEM_PROCESSOR})
15-
endif()
16-
if("${cmake_arch}" STREQUAL "x86_64")
17-
set("${result_var_name}" "x86_64" PARENT_SCOPE)
18-
elseif(cmake_arch MATCHES "aarch64|ARM64|arm64")
19-
if(NOT DEFINED CMAKE_OSX_DEPLOYMENT_TARGET OR
20-
"${CMAKE_OSX_DEPLOYMENT_TARGET}" STREQUAL "")
21-
set("${result_var_name}" "aarch64" PARENT_SCOPE)
22-
else()
23-
set("${result_var_name}" "arm64" PARENT_SCOPE)
24-
endif()
25-
elseif("${cmake_arch}" STREQUAL "ppc64")
26-
set("${result_var_name}" "powerpc64" PARENT_SCOPE)
27-
elseif("${cmake_arch}" STREQUAL "ppc64le")
28-
set("${result_var_name}" "powerpc64le" PARENT_SCOPE)
29-
elseif("${cmake_arch}" STREQUAL "s390x")
30-
set("${result_var_name}" "s390x" PARENT_SCOPE)
31-
elseif("${cmake_arch}" STREQUAL "armv6l")
32-
set("${result_var_name}" "armv6" PARENT_SCOPE)
33-
elseif("${cmake_arch}" STREQUAL "armv7-a")
34-
set("${result_var_name}" "armv7" PARENT_SCOPE)
35-
elseif("${cmake_arch}" STREQUAL "armv7l")
36-
set("${result_var_name}" "armv7" PARENT_SCOPE)
37-
elseif("${cmake_arch}" STREQUAL "amd64")
38-
set("${result_var_name}" "amd64" PARENT_SCOPE)
39-
elseif("${cmake_arch}" STREQUAL "AMD64")
40-
set("${result_var_name}" "x86_64" PARENT_SCOPE)
41-
elseif("${cmake_arch}" STREQUAL "IA64")
42-
set("${result_var_name}" "itanium" PARENT_SCOPE)
43-
elseif("${cmake_arch}" STREQUAL "x86")
44-
set("${result_var_name}" "i686" PARENT_SCOPE)
45-
elseif("${cmake_arch}" STREQUAL "i686")
46-
set("${result_var_name}" "i686" PARENT_SCOPE)
47-
elseif("${cmake_arch}" STREQUAL "riscv64")
48-
set("${result_var_name}" "riscv64" PARENT_SCOPE)
49-
else()
50-
message(FATAL_ERROR "Unrecognized architecture: ${cmake_arch}")
51-
endif()
52-
endfunction()
53-
543
if(NOT dispatch_MODULE_TRIPLE)
554
set(module_triple_command "${CMAKE_Swift_COMPILER}" -print-target-info)
565
if(CMAKE_Swift_COMPILER_TARGET)
@@ -65,6 +14,26 @@ if(NOT dispatch_MODULE_TRIPLE)
6514
message(CONFIGURE_LOG "Swift module triple: ${module_triple}")
6615
endif()
6716

17+
if(NOT dispatch_Swift_ARCH)
18+
if(CMAKE_Swift_COMPILER_VERSION VERSION_EQUAL 0.0.0 OR CMAKE_Swift_COMPILER_VERSION VERSION_GREATER_EQUAL 6.2)
19+
# For newer compilers, we can use the -print-target-info command to get the architecture.
20+
set(module_arch_command "${CMAKE_Swift_COMPILER}" -print-target-info)
21+
if(CMAKE_Swift_COMPILER_TARGET)
22+
list(APPEND module_arch_command -target ${CMAKE_Swift_COMPILER_TARGET})
23+
endif()
24+
execute_process(COMMAND ${module_arch_command} OUTPUT_VARIABLE target_info_json)
25+
string(JSON module_arch GET "${target_info_json}" "target" "arch")
26+
else()
27+
# For older compilers, extract the value from `dispatch_MODULE_TRIPLE`.
28+
string(REGEX MATCH "^[^-]+" module_arch "${dispatch_MODULE_TRIPLE}")
29+
endif()
30+
31+
set(dispatch_Swift_ARCH "${module_arch}" CACHE STRING "Arch folder name used to install libraries")
32+
mark_as_advanced(dispatch_Swift_ARCH)
33+
34+
message(CONFIGURE_LOG "Swift arch: ${dispatch_Swift_ARCH}")
35+
endif()
36+
6837
function(install_swift_module target)
6938
get_target_property(module ${target} Swift_MODULE_NAME)
7039
if(NOT module)

0 commit comments

Comments
 (0)