Merge pull request #322 from uraimo/system_arch_fix
Improve host architecture detection
diff --git a/CMakeLists.txt b/CMakeLists.txt
index eb30889..7fe4aa3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -21,6 +21,7 @@
include(CheckLibraryExists)
include(CheckSymbolExists)
include(GNUInstallDirs)
+include(SwiftSupport)
set(INSTALL_LIBDIR "lib" CACHE PATH "Path where the libraries should be installed")
set(WITH_BLOCKS_RUNTIME "" CACHE PATH "Path to blocks runtime")
@@ -44,7 +45,9 @@
get_filename_component(SWIFT_TOOLCHAIN ${SWIFT_TOOLCHAIN} DIRECTORY)
string(TOLOWER ${CMAKE_SYSTEM_NAME} SWIFT_OS)
- set(SWIFT_RUNTIME_LIBDIR ${SWIFT_TOOLCHAIN}/lib/swift/${SWIFT_OS}/${CMAKE_SYSTEM_PROCESSOR})
+ get_swift_host_arch(SWIFT_HOST_ARCH)
+
+ set(SWIFT_RUNTIME_LIBDIR ${SWIFT_TOOLCHAIN}/lib/swift/${SWIFT_OS}/${SWIFT_HOST_ARCH})
add_library(swiftCore
SHARED IMPORTED GLOBAL)
diff --git a/cmake/modules/SwiftSupport.cmake b/cmake/modules/SwiftSupport.cmake
index 3f19070..bae1f9f 100644
--- a/cmake/modules/SwiftSupport.cmake
+++ b/cmake/modules/SwiftSupport.cmake
@@ -72,3 +72,36 @@
${ASL_MODULE_PATH}
${module_directory}/${ASL_MODULE_NAME}.swiftdoc)
endfunction()
+
+# Returns the current achitecture name in a variable
+#
+# Usage:
+# get_swift_host_arch(result_var_name)
+#
+# If the current architecture is supported by Swift, sets ${result_var_name}
+# with the sanitized host architecture name derived from CMAKE_SYSTEM_PROCESSOR.
+function(get_swift_host_arch result_var_name)
+ if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64")
+ set("${result_var_name}" "x86_64" PARENT_SCOPE)
+ elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "aarch64")
+ set("${result_var_name}" "aarch64" PARENT_SCOPE)
+ elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ppc64")
+ set("${result_var_name}" "powerpc64" PARENT_SCOPE)
+ elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ppc64le")
+ set("${result_var_name}" "powerpc64le" PARENT_SCOPE)
+ elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "s390x")
+ set("${result_var_name}" "s390x" PARENT_SCOPE)
+ elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "armv6l")
+ set("${result_var_name}" "armv6" PARENT_SCOPE)
+ elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "armv7l")
+ set("${result_var_name}" "armv7" PARENT_SCOPE)
+ elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "AMD64")
+ set("${result_var_name}" "x86_64" PARENT_SCOPE)
+ elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "IA64")
+ set("${result_var_name}" "itanium" PARENT_SCOPE)
+ elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86")
+ set("${result_var_name}" "i686" PARENT_SCOPE)
+ else()
+ message(FATAL_ERROR "Unrecognized architecture on host system: ${CMAKE_SYSTEM_PROCESSOR}")
+ endif()
+endfunction()