Skip to content

Commit 48f6682

Browse files
jmschonfeldiCharlesHu
authored andcommitted
Work towards fixing client builds in the toolchain
1 parent 6711bb8 commit 48f6682

File tree

6 files changed

+110
-18
lines changed

6 files changed

+110
-18
lines changed

CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414

1515
cmake_minimum_required(VERSION 3.22)
1616

17+
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules)
18+
1719
if(POLICY CMP0156)
1820
# Deduplicate linked libraries where appropriate
1921
cmake_policy(SET CMP0156 NEW)
@@ -102,5 +104,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android")
102104
"-I/usr/lib/swift") # dispatch
103105
endif()
104106

107+
include(SwiftSupport)
108+
105109
add_subdirectory(Sources)
106110
add_subdirectory(cmake/modules)

Sources/Foundation/CMakeLists.txt

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,18 @@ target_compile_options(Foundation PRIVATE
1919
"SHELL:$<$<COMPILE_LANGUAGE:Swift>:${_Foundation_swift_build_flags}>")
2020

2121
target_link_libraries(Foundation PRIVATE
22-
_CoreFoundation)
22+
_CoreFoundation
23+
FoundationEssentials
24+
FoundationInternationalization)
25+
26+
set_target_properties(Foundation PROPERTIES
27+
INSTALL_RPATH "$ORIGIN"
28+
BUILD_RPATH "$<TARGET_FILE_DIR:swiftDispatch>"
29+
Swift_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/swift
30+
INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_BINARY_DIR}/swift)
2331

2432
target_link_libraries(Foundation PUBLIC
25-
FoundationEssentials
26-
FoundationInternationalization
2733
swiftDispatch)
2834

29-
install(TARGETS Foundation
30-
ARCHIVE DESTINATION lib
31-
LIBRARY DESTINATION lib
32-
RUNTIME DESTINATION bin)
33-
3435
set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS Foundation)
36+
_install_target(Foundation)

Sources/FoundationNetworking/CMakeLists.txt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,5 @@ target_link_libraries(FoundationNetworking PRIVATE
2424
_CoreFoundation
2525
_CFURLSessionInterface)
2626

27-
install(TARGETS FoundationNetworking
28-
ARCHIVE DESTINATION lib
29-
LIBRARY DESTINATION lib
30-
RUNTIME DESTINATION bin)
31-
3227
set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS FoundationNetworking)
28+
_install_target(FoundationNetworking)

Sources/FoundationXML/CMakeLists.txt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,6 @@ target_link_libraries(FoundationXML PRIVATE
2424
_CoreFoundation
2525
_CFXMLInterface)
2626

27-
install(TARGETS FoundationXML
28-
ARCHIVE DESTINATION lib
29-
LIBRARY DESTINATION lib
30-
RUNTIME DESTINATION bin)
3127

3228
set_property(GLOBAL APPEND PROPERTY Foundation_EXPORTS FoundationXML)
29+
_install_target(FoundationXML)

cmake/modules/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,5 @@ configure_file(FoundationConfig.cmake.in
1818

1919
get_property(Foundation_EXPORTS GLOBAL PROPERTY Foundation_EXPORTS)
2020
export(TARGETS ${Foundation_EXPORTS}
21-
NAMESPACE Foundation::
2221
FILE ${Foundation_EXPORTS_FILE}
2322
EXPORT_LINK_INTERFACE_LIBRARIES)

cmake/modules/SwiftSupport.cmake

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
2+
# Returns the current architecture name in a variable
3+
#
4+
# Usage:
5+
# get_swift_host_arch(result_var_name)
6+
#
7+
# If the current architecture is supported by Swift, sets ${result_var_name}
8+
# with the sanitized host architecture name derived from CMAKE_SYSTEM_PROCESSOR.
9+
function(get_swift_host_arch result_var_name)
10+
if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64")
11+
set("${result_var_name}" "x86_64" PARENT_SCOPE)
12+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "aarch64")
13+
set("${result_var_name}" "aarch64" PARENT_SCOPE)
14+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ARM64")
15+
set("${result_var_name}" "aarch64" PARENT_SCOPE)
16+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ppc64")
17+
set("${result_var_name}" "powerpc64" PARENT_SCOPE)
18+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ppc64le")
19+
set("${result_var_name}" "powerpc64le" PARENT_SCOPE)
20+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "s390x")
21+
set("${result_var_name}" "s390x" PARENT_SCOPE)
22+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "armv6l")
23+
set("${result_var_name}" "armv6" PARENT_SCOPE)
24+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "armv7l")
25+
set("${result_var_name}" "armv7" PARENT_SCOPE)
26+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "armv7-a")
27+
set("${result_var_name}" "armv7" PARENT_SCOPE)
28+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "amd64")
29+
set("${result_var_name}" "amd64" PARENT_SCOPE)
30+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "AMD64")
31+
set("${result_var_name}" "x86_64" PARENT_SCOPE)
32+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "IA64")
33+
set("${result_var_name}" "itanium" PARENT_SCOPE)
34+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86")
35+
set("${result_var_name}" "i686" PARENT_SCOPE)
36+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i686")
37+
set("${result_var_name}" "i686" PARENT_SCOPE)
38+
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "wasm32")
39+
set("${result_var_name}" "wasm32" PARENT_SCOPE)
40+
else()
41+
message(FATAL_ERROR "Unrecognized architecture on host system: ${CMAKE_SYSTEM_PROCESSOR}")
42+
endif()
43+
endfunction()
44+
45+
# Returns the os name in a variable
46+
#
47+
# Usage:
48+
# get_swift_host_os(result_var_name)
49+
#
50+
#
51+
# Sets ${result_var_name} with the converted OS name derived from
52+
# CMAKE_SYSTEM_NAME.
53+
function(get_swift_host_os result_var_name)
54+
set(${result_var_name} ${SWIFT_SYSTEM_NAME} PARENT_SCOPE)
55+
endfunction()
56+
57+
function(_install_target module)
58+
get_swift_host_os(swift_os)
59+
get_target_property(type ${module} TYPE)
60+
61+
if(type STREQUAL STATIC_LIBRARY)
62+
set(swift swift_static)
63+
else()
64+
set(swift swift)
65+
endif()
66+
67+
install(TARGETS ${module}
68+
ARCHIVE DESTINATION lib/${swift}/${swift_os}
69+
LIBRARY DESTINATION lib/${swift}/${swift_os}
70+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
71+
if(type STREQUAL EXECUTABLE)
72+
return()
73+
endif()
74+
75+
get_swift_host_arch(swift_arch)
76+
get_target_property(module_name ${module} Swift_MODULE_NAME)
77+
if(NOT module_name)
78+
set(module_name ${module})
79+
endif()
80+
81+
if(CMAKE_SYSTEM_NAME STREQUAL Darwin)
82+
install(FILES $<TARGET_PROPERTY:${module},Swift_MODULE_DIRECTORY>/${module_name}.swiftdoc
83+
DESTINATION lib/${swift}/${swift_os}/${module_name}.swiftmodule
84+
RENAME ${swift_arch}.swiftdoc)
85+
install(FILES $<TARGET_PROPERTY:${module},Swift_MODULE_DIRECTORY>/${module_name}.swiftmodule
86+
DESTINATION lib/${swift}/${swift_os}/${module_name}.swiftmodule
87+
RENAME ${swift_arch}.swiftmodule)
88+
else()
89+
install(FILES
90+
$<TARGET_PROPERTY:${module},Swift_MODULE_DIRECTORY>/${module_name}.swiftdoc
91+
$<TARGET_PROPERTY:${module},Swift_MODULE_DIRECTORY>/${module_name}.swiftmodule
92+
DESTINATION lib/${swift}/${swift_os}/${swift_arch})
93+
endif()
94+
endfunction()

0 commit comments

Comments
 (0)