Skip to content

Commit 6c14ffc

Browse files
committed
Improve host architecture detection
1 parent e245cbe commit 6c14ffc

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

CMakeLists.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ include(CheckIncludeFiles)
2121
include(CheckLibraryExists)
2222
include(CheckSymbolExists)
2323
include(GNUInstallDirs)
24+
include(SwiftSupport)
2425

2526
set(INSTALL_LIBDIR "lib" CACHE PATH "Path where the libraries should be installed")
2627
set(WITH_BLOCKS_RUNTIME "" CACHE PATH "Path to blocks runtime")
@@ -44,7 +45,9 @@ if(ENABLE_SWIFT)
4445
get_filename_component(SWIFT_TOOLCHAIN ${SWIFT_TOOLCHAIN} DIRECTORY)
4546

4647
string(TOLOWER ${CMAKE_SYSTEM_NAME} SWIFT_OS)
47-
set(SWIFT_RUNTIME_LIBDIR ${SWIFT_TOOLCHAIN}/lib/swift/${SWIFT_OS}/${CMAKE_SYSTEM_PROCESSOR})
48+
get_swift_host_arch(SWIFT_HOST_ARCH)
49+
50+
set(SWIFT_RUNTIME_LIBDIR ${SWIFT_TOOLCHAIN}/lib/swift/${SWIFT_OS}/${SWIFT_HOST_ARCH})
4851

4952
add_library(swiftCore
5053
SHARED IMPORTED GLOBAL)

cmake/modules/SwiftSupport.cmake

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,3 +71,36 @@ function(add_swift_library library)
7171
${ASL_MODULE_PATH}
7272
${module_directory}/${ASL_MODULE_NAME}.swiftdoc)
7373
endfunction()
74+
75+
# Returns the current achitecture name in a variable
76+
#
77+
# Usage:
78+
# get_swift_host_arch(result_var_name)
79+
#
80+
# If the current architecture is supported by Swift, sets ${result_var_name}
81+
# with the sanitized host architecture name derived from CMAKE_SYSTEM_PROCESSOR.
82+
function(get_swift_host_arch result_var_name)
83+
if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64")
84+
set("${result_var_name}" "x86_64" PARENT_SCOPE)
85+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "aarch64")
86+
set("${result_var_name}" "aarch64" PARENT_SCOPE)
87+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ppc64")
88+
set("${result_var_name}" "powerpc64" PARENT_SCOPE)
89+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ppc64le")
90+
set("${result_var_name}" "powerpc64le" PARENT_SCOPE)
91+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "s390x")
92+
set("${result_var_name}" "s390x" PARENT_SCOPE)
93+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "armv6l")
94+
set("${result_var_name}" "armv6" PARENT_SCOPE)
95+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "armv7l")
96+
set("${result_var_name}" "armv7" PARENT_SCOPE)
97+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "AMD64")
98+
set("${result_var_name}" "x86_64" PARENT_SCOPE)
99+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "IA64")
100+
set("${result_var_name}" "itanium" PARENT_SCOPE)
101+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86")
102+
set("${result_var_name}" "i686" PARENT_SCOPE)
103+
else()
104+
message(FATAL_ERROR "Unrecognized architecture on host system: ${CMAKE_SYSTEM_PROCESSOR}")
105+
endif()
106+
endfunction()

0 commit comments

Comments
 (0)