Skip to content

Commit e798e9c

Browse files
authored
CMake: allow to specify a SDK when building a triple for Embedded Swift (#84817)
To achieve this, add a new cache variable `SWIFT_EMBEDDED_STDLIB_SDKS_FOR_TARGET_TRIPLES` to be set like in the following examples. ``` -DSWIFT_EMBEDDED_STDLIB_SDKS_FOR_TARGET_TRIPLES=aarch64-vendor-os@/usr/local/aarch64-vendor-os-sdk;aaarch-vendor-anotheros@/opt/aarch64-vendor-anotheros-sdk ``` We chose to use another setting instead of e.g. folding this into `SWIFT_EMBEDDED_STDLIB_EXTRA_TARGET_TRIPLES` so it is clear this is opt in and it does not regress existing configurations that set the SDK directly (like it's the case for the WASM stdlib). Addresses rdar://162368529
1 parent 79960d4 commit e798e9c

File tree

7 files changed

+43
-1
lines changed

7 files changed

+43
-1
lines changed

stdlib/public/CMakeLists.txt

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,10 @@ option(SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB_CROSS_COMPILING
155155
set(SWIFT_EMBEDDED_STDLIB_EXTRA_TARGET_TRIPLES "" CACHE STRING
156156
"List of extra target triples to build the embedded Swift standard library for")
157157

158+
set(SWIFT_EMBEDDED_STDLIB_SDKS_FOR_TARGET_TRIPLES "" CACHE STRING
159+
"List of SDKs to use for target triples, in the form triple@sdkpath.
160+
Using this variable precludes setting directly the value for SWIFT_SDK_embedded_ARCH_\$\{ARCH\}_PATH")
161+
158162
if((NOT SWIFT_HOST_VARIANT STREQUAL "macosx") AND
159163
(NOT SWIFT_HOST_VARIANT STREQUAL "linux") AND
160164
(NOT SWIFT_HOST_VARIANT STREQUAL "wasi") AND
@@ -273,7 +277,7 @@ foreach(triple ${SWIFT_EMBEDDED_STDLIB_EXTRA_TARGET_TRIPLES})
273277
list(GET list 0 arch)
274278
list(GET list 1 vendor)
275279
list(GET list 2 os)
276-
string(REGEX REPLACE "[0-9]+(\\.[0-9]+)+" " " mod "${triple}")
280+
string(REGEX REPLACE "[0-9]+(\\.[0-9]+)+" "" mod "${triple}")
277281

278282
list(FILTER EMBEDDED_STDLIB_TARGET_TRIPLES EXCLUDE REGEX " ${mod} ")
279283

@@ -282,6 +286,25 @@ foreach(triple ${SWIFT_EMBEDDED_STDLIB_EXTRA_TARGET_TRIPLES})
282286
)
283287
endforeach()
284288

289+
if(SWIFT_EMBEDDED_STDLIB_SDKS_FOR_TARGET_TRIPLES)
290+
message(WARNING "Configuring SDKs using content of SWIFT_EMBEDDED_STDLIB_SDKS_FOR_TARGET_TRIPLES \
291+
Setting directly SWIFT_SDK_embedded_ARCH_\$\{ARCH\}_PATH will not work")
292+
foreach(triple_configuration ${SWIFT_EMBEDDED_STDLIB_SDKS_FOR_TARGET_TRIPLES})
293+
if(triple_configuration STREQUAL "")
294+
continue()
295+
endif()
296+
297+
# Line format: <triple>[@<path to SDK>]
298+
string(REPLACE "@" ";" triple_configuration_list "${triple_configuration}")
299+
list(LENGTH triple_configuration_list triple_configuration_list_length)
300+
if(triple_configuration_list_length GREATER_EQUAL 2)
301+
list(GET triple_configuration_list 0 triple)
302+
list(GET triple_configuration_list 1 sdk_path)
303+
set(EMBEDDED_STDLIB_SDK_FOR_${triple} "${sdk_path}")
304+
endif()
305+
endforeach()
306+
endif()
307+
285308
if(SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB)
286309
set(triples)
287310
foreach(entry ${EMBEDDED_STDLIB_TARGET_TRIPLES})

stdlib/public/ClangOverlays/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,9 @@ if(NOT DEFINED SWIFT_BUILD_CLANG_OVERLAYS_SKIP_BUILTIN_FLOAT OR NOT SWIFT_BUILD_
5555
set(SWIFT_SDK_embedded_ARCH_${arch}_MODULE "${mod}")
5656
set(SWIFT_SDK_embedded_LIB_SUBDIR "embedded")
5757
set(SWIFT_SDK_embedded_ARCH_${arch}_TRIPLE "${triple}")
58+
if(SWIFT_EMBEDDED_STDLIB_SDKS_FOR_TARGET_TRIPLES)
59+
set(SWIFT_SDK_embedded_ARCH_${arch}_PATH "${EMBEDDED_STDLIB_SDK_FOR_${triple}}")
60+
endif()
5861
add_swift_target_library_single(
5962
embedded-builtin_float-${mod}
6063
swift_Builtin_float

stdlib/public/Concurrency/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,10 @@ if(SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB AND SWIFT_SHOULD_BUILD_EMBEDDED_CONCURRENC
335335
set(SWIFT_SDK_embedded_LIB_SUBDIR "embedded")
336336
set(SWIFT_SDK_embedded_ARCH_${arch}_TRIPLE "${triple}")
337337
set(SWIFT_SDK_embedded_ARCH_${mod}_TRIPLE "${triple}")
338+
if(SWIFT_EMBEDDED_STDLIB_SDKS_FOR_TARGET_TRIPLES)
339+
set(SWIFT_SDK_embedded_ARCH_${arch}_PATH "${EMBEDDED_STDLIB_SDK_FOR_${triple}}")
340+
set(SWIFT_SDK_embedded_ARCH_${mod}_PATH "${EMBEDDED_STDLIB_SDK_FOR_${triple}}")
341+
endif()
338342

339343
# lib/swift/embedded/_Concurrency.swiftmodule
340344
# lib/swift/embedded/<triple>/libswift_Concurrency.a

stdlib/public/Synchronization/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,9 @@ if(SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB)
189189
set(SWIFT_SDK_embedded_ARCH_${arch}_MODULE "${mod}")
190190
set(SWIFT_SDK_embedded_LIB_SUBDIR "embedded")
191191
set(SWIFT_SDK_embedded_ARCH_${arch}_TRIPLE "${triple}")
192+
if(SWIFT_EMBEDDED_STDLIB_SDKS_FOR_TARGET_TRIPLES)
193+
set(SWIFT_SDK_embedded_ARCH_${arch}_PATH "${EMBEDDED_STDLIB_SDK_FOR_${triple}}")
194+
endif()
192195
add_swift_target_library_single(
193196
embedded-synchronization-${mod}
194197
swiftSynchronization

stdlib/public/Volatile/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ if(SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB)
3333
set(SWIFT_SDK_embedded_ARCH_${arch}_MODULE "${mod}")
3434
set(SWIFT_SDK_embedded_LIB_SUBDIR "embedded")
3535
set(SWIFT_SDK_embedded_ARCH_${arch}_TRIPLE "${triple}")
36+
if(SWIFT_EMBEDDED_STDLIB_SDKS_FOR_TARGET_TRIPLES)
37+
set(SWIFT_SDK_embedded_ARCH_${arch}_PATH "${EMBEDDED_STDLIB_SDK_FOR_${triple}}")
38+
endif()
3639
add_swift_target_library_single(
3740
embedded-volatile-${mod}
3841
swift_Volatile

stdlib/public/core/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,9 @@ if(SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB)
529529
set(SWIFT_SDK_embedded_ARCH_${arch}_MODULE "${mod}")
530530
set(SWIFT_SDK_embedded_LIB_SUBDIR "embedded")
531531
set(SWIFT_SDK_embedded_ARCH_${arch}_TRIPLE "${triple}")
532+
if(SWIFT_EMBEDDED_STDLIB_SDKS_FOR_TARGET_TRIPLES)
533+
set(SWIFT_SDK_embedded_ARCH_${arch}_PATH "${EMBEDDED_STDLIB_SDK_FOR_${triple}}")
534+
endif()
532535
add_swift_target_library_single(
533536
embedded-stdlib-${mod}
534537
swiftCore

stdlib/public/stubs/Unicode/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ if(SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB)
2828
set(SWIFT_SDK_embedded_ARCH_${mod}_MODULE "${mod}")
2929
set(SWIFT_SDK_embedded_LIB_SUBDIR "embedded")
3030
set(SWIFT_SDK_embedded_ARCH_${mod}_TRIPLE "${triple}")
31+
if(SWIFT_EMBEDDED_STDLIB_SDKS_FOR_TARGET_TRIPLES)
32+
set(SWIFT_SDK_embedded_ARCH_${mod}_PATH "${EMBEDDED_STDLIB_SDK_FOR_${triple}}")
33+
endif()
3134

3235
add_swift_target_library_single(
3336
embedded-unicode-${mod}

0 commit comments

Comments
 (0)