Skip to content

Commit e73dc2b

Browse files
committed
build: Install libraries in an arch sub-folder
This is the proper installation scheme for Swift libraries and prevents having to manually copy them in `build.ps1`.
1 parent bb7641e commit e73dc2b

File tree

3 files changed

+67
-5
lines changed

3 files changed

+67
-5
lines changed

CMakeLists.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,15 +306,18 @@ add_compile_definitions($<$<COMPILE_LANGUAGE:C,CXX>:HAVE_CONFIG_H>)
306306

307307

308308
if(ENABLE_SWIFT)
309+
include(SwiftSupport)
310+
309311
if(NOT SWIFT_SYSTEM_NAME)
310312
if(APPLE)
311313
set(SWIFT_SYSTEM_NAME macosx)
312314
else()
313315
set(SWIFT_SYSTEM_NAME "$<LOWER_CASE:${CMAKE_SYSTEM_NAME}>")
314316
endif()
315317
endif()
318+
get_swift_host_arch(swift_arch)
316319

317-
set(INSTALL_TARGET_DIR "${CMAKE_INSTALL_LIBDIR}/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>/${SWIFT_SYSTEM_NAME}" CACHE PATH "Path where the libraries will be installed")
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")
318321
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")
319322
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")
320323
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: 63 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,56 @@
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+
354
if(NOT dispatch_MODULE_TRIPLE)
455
set(module_triple_command "${CMAKE_Swift_COMPILER}" -print-target-info)
556
if(CMAKE_Swift_COMPILER_TARGET)
@@ -19,12 +70,22 @@ function(install_swift_module target)
1970
if(NOT module)
2071
set(module ${target})
2172
endif()
73+
74+
if(NOT SWIFT_SYSTEM_NAME)
75+
if(APPLE)
76+
set(SWIFT_SYSTEM_NAME macosx)
77+
else()
78+
set(SWIFT_SYSTEM_NAME "$<LOWER_CASE:${CMAKE_SYSTEM_NAME}>")
79+
endif()
80+
endif()
81+
set(INSTALL_SWIFT_MODULE_DIR "${CMAKE_INSTALL_LIBDIR}/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>/${SWIFT_SYSTEM_NAME}" CACHE PATH "Path where the swift modules will be installed")
82+
2283
install(
2384
FILES $<TARGET_PROPERTY:${target},Swift_MODULE_DIRECTORY>/${module}.swiftdoc
24-
DESTINATION ${INSTALL_TARGET_DIR}/${module}.swiftmodule
85+
DESTINATION ${INSTALL_SWIFT_MODULE_DIR}/${module}.swiftmodule
2586
RENAME ${dispatch_MODULE_TRIPLE}.swiftdoc)
2687
install(
2788
FILES $<TARGET_PROPERTY:${target},Swift_MODULE_DIRECTORY>/${module}.swiftmodule
28-
DESTINATION ${INSTALL_TARGET_DIR}/${module}.swiftmodule
89+
DESTINATION ${INSTALL_SWIFT_MODULE_DIR}/${module}.swiftmodule
2990
RENAME ${dispatch_MODULE_TRIPLE}.swiftmodule)
3091
endfunction()

src/swift/CMakeLists.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
include(SwiftSupport)
2-
31
if(HAVE_OBJC)
42
add_library(DispatchStubs STATIC
53
DispatchStubs.m)

0 commit comments

Comments
 (0)