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
This commit is contained in:
Eric Miotto
2025-10-15 06:37:54 -07:00
committed by GitHub
parent 79960d4f58
commit e798e9c3cc
7 changed files with 43 additions and 1 deletions

View File

@@ -155,6 +155,10 @@ option(SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB_CROSS_COMPILING
set(SWIFT_EMBEDDED_STDLIB_EXTRA_TARGET_TRIPLES "" CACHE STRING set(SWIFT_EMBEDDED_STDLIB_EXTRA_TARGET_TRIPLES "" CACHE STRING
"List of extra target triples to build the embedded Swift standard library for") "List of extra target triples to build the embedded Swift standard library for")
set(SWIFT_EMBEDDED_STDLIB_SDKS_FOR_TARGET_TRIPLES "" CACHE STRING
"List of SDKs to use for target triples, in the form triple@sdkpath.
Using this variable precludes setting directly the value for SWIFT_SDK_embedded_ARCH_\$\{ARCH\}_PATH")
if((NOT SWIFT_HOST_VARIANT STREQUAL "macosx") AND if((NOT SWIFT_HOST_VARIANT STREQUAL "macosx") AND
(NOT SWIFT_HOST_VARIANT STREQUAL "linux") AND (NOT SWIFT_HOST_VARIANT STREQUAL "linux") AND
(NOT SWIFT_HOST_VARIANT STREQUAL "wasi") AND (NOT SWIFT_HOST_VARIANT STREQUAL "wasi") AND
@@ -273,7 +277,7 @@ foreach(triple ${SWIFT_EMBEDDED_STDLIB_EXTRA_TARGET_TRIPLES})
list(GET list 0 arch) list(GET list 0 arch)
list(GET list 1 vendor) list(GET list 1 vendor)
list(GET list 2 os) list(GET list 2 os)
string(REGEX REPLACE "[0-9]+(\\.[0-9]+)+" " " mod "${triple}") string(REGEX REPLACE "[0-9]+(\\.[0-9]+)+" "" mod "${triple}")
list(FILTER EMBEDDED_STDLIB_TARGET_TRIPLES EXCLUDE REGEX " ${mod} ") list(FILTER EMBEDDED_STDLIB_TARGET_TRIPLES EXCLUDE REGEX " ${mod} ")
@@ -282,6 +286,25 @@ foreach(triple ${SWIFT_EMBEDDED_STDLIB_EXTRA_TARGET_TRIPLES})
) )
endforeach() endforeach()
if(SWIFT_EMBEDDED_STDLIB_SDKS_FOR_TARGET_TRIPLES)
message(WARNING "Configuring SDKs using content of SWIFT_EMBEDDED_STDLIB_SDKS_FOR_TARGET_TRIPLES \
Setting directly SWIFT_SDK_embedded_ARCH_\$\{ARCH\}_PATH will not work")
foreach(triple_configuration ${SWIFT_EMBEDDED_STDLIB_SDKS_FOR_TARGET_TRIPLES})
if(triple_configuration STREQUAL "")
continue()
endif()
# Line format: <triple>[@<path to SDK>]
string(REPLACE "@" ";" triple_configuration_list "${triple_configuration}")
list(LENGTH triple_configuration_list triple_configuration_list_length)
if(triple_configuration_list_length GREATER_EQUAL 2)
list(GET triple_configuration_list 0 triple)
list(GET triple_configuration_list 1 sdk_path)
set(EMBEDDED_STDLIB_SDK_FOR_${triple} "${sdk_path}")
endif()
endforeach()
endif()
if(SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB) if(SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB)
set(triples) set(triples)
foreach(entry ${EMBEDDED_STDLIB_TARGET_TRIPLES}) foreach(entry ${EMBEDDED_STDLIB_TARGET_TRIPLES})

View File

@@ -55,6 +55,9 @@ if(NOT DEFINED SWIFT_BUILD_CLANG_OVERLAYS_SKIP_BUILTIN_FLOAT OR NOT SWIFT_BUILD_
set(SWIFT_SDK_embedded_ARCH_${arch}_MODULE "${mod}") set(SWIFT_SDK_embedded_ARCH_${arch}_MODULE "${mod}")
set(SWIFT_SDK_embedded_LIB_SUBDIR "embedded") set(SWIFT_SDK_embedded_LIB_SUBDIR "embedded")
set(SWIFT_SDK_embedded_ARCH_${arch}_TRIPLE "${triple}") set(SWIFT_SDK_embedded_ARCH_${arch}_TRIPLE "${triple}")
if(SWIFT_EMBEDDED_STDLIB_SDKS_FOR_TARGET_TRIPLES)
set(SWIFT_SDK_embedded_ARCH_${arch}_PATH "${EMBEDDED_STDLIB_SDK_FOR_${triple}}")
endif()
add_swift_target_library_single( add_swift_target_library_single(
embedded-builtin_float-${mod} embedded-builtin_float-${mod}
swift_Builtin_float swift_Builtin_float

View File

@@ -335,6 +335,10 @@ if(SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB AND SWIFT_SHOULD_BUILD_EMBEDDED_CONCURRENC
set(SWIFT_SDK_embedded_LIB_SUBDIR "embedded") set(SWIFT_SDK_embedded_LIB_SUBDIR "embedded")
set(SWIFT_SDK_embedded_ARCH_${arch}_TRIPLE "${triple}") set(SWIFT_SDK_embedded_ARCH_${arch}_TRIPLE "${triple}")
set(SWIFT_SDK_embedded_ARCH_${mod}_TRIPLE "${triple}") set(SWIFT_SDK_embedded_ARCH_${mod}_TRIPLE "${triple}")
if(SWIFT_EMBEDDED_STDLIB_SDKS_FOR_TARGET_TRIPLES)
set(SWIFT_SDK_embedded_ARCH_${arch}_PATH "${EMBEDDED_STDLIB_SDK_FOR_${triple}}")
set(SWIFT_SDK_embedded_ARCH_${mod}_PATH "${EMBEDDED_STDLIB_SDK_FOR_${triple}}")
endif()
# lib/swift/embedded/_Concurrency.swiftmodule # lib/swift/embedded/_Concurrency.swiftmodule
# lib/swift/embedded/<triple>/libswift_Concurrency.a # lib/swift/embedded/<triple>/libswift_Concurrency.a

View File

@@ -189,6 +189,9 @@ if(SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB)
set(SWIFT_SDK_embedded_ARCH_${arch}_MODULE "${mod}") set(SWIFT_SDK_embedded_ARCH_${arch}_MODULE "${mod}")
set(SWIFT_SDK_embedded_LIB_SUBDIR "embedded") set(SWIFT_SDK_embedded_LIB_SUBDIR "embedded")
set(SWIFT_SDK_embedded_ARCH_${arch}_TRIPLE "${triple}") set(SWIFT_SDK_embedded_ARCH_${arch}_TRIPLE "${triple}")
if(SWIFT_EMBEDDED_STDLIB_SDKS_FOR_TARGET_TRIPLES)
set(SWIFT_SDK_embedded_ARCH_${arch}_PATH "${EMBEDDED_STDLIB_SDK_FOR_${triple}}")
endif()
add_swift_target_library_single( add_swift_target_library_single(
embedded-synchronization-${mod} embedded-synchronization-${mod}
swiftSynchronization swiftSynchronization

View File

@@ -33,6 +33,9 @@ if(SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB)
set(SWIFT_SDK_embedded_ARCH_${arch}_MODULE "${mod}") set(SWIFT_SDK_embedded_ARCH_${arch}_MODULE "${mod}")
set(SWIFT_SDK_embedded_LIB_SUBDIR "embedded") set(SWIFT_SDK_embedded_LIB_SUBDIR "embedded")
set(SWIFT_SDK_embedded_ARCH_${arch}_TRIPLE "${triple}") set(SWIFT_SDK_embedded_ARCH_${arch}_TRIPLE "${triple}")
if(SWIFT_EMBEDDED_STDLIB_SDKS_FOR_TARGET_TRIPLES)
set(SWIFT_SDK_embedded_ARCH_${arch}_PATH "${EMBEDDED_STDLIB_SDK_FOR_${triple}}")
endif()
add_swift_target_library_single( add_swift_target_library_single(
embedded-volatile-${mod} embedded-volatile-${mod}
swift_Volatile swift_Volatile

View File

@@ -529,6 +529,9 @@ if(SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB)
set(SWIFT_SDK_embedded_ARCH_${arch}_MODULE "${mod}") set(SWIFT_SDK_embedded_ARCH_${arch}_MODULE "${mod}")
set(SWIFT_SDK_embedded_LIB_SUBDIR "embedded") set(SWIFT_SDK_embedded_LIB_SUBDIR "embedded")
set(SWIFT_SDK_embedded_ARCH_${arch}_TRIPLE "${triple}") set(SWIFT_SDK_embedded_ARCH_${arch}_TRIPLE "${triple}")
if(SWIFT_EMBEDDED_STDLIB_SDKS_FOR_TARGET_TRIPLES)
set(SWIFT_SDK_embedded_ARCH_${arch}_PATH "${EMBEDDED_STDLIB_SDK_FOR_${triple}}")
endif()
add_swift_target_library_single( add_swift_target_library_single(
embedded-stdlib-${mod} embedded-stdlib-${mod}
swiftCore swiftCore

View File

@@ -28,6 +28,9 @@ if(SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB)
set(SWIFT_SDK_embedded_ARCH_${mod}_MODULE "${mod}") set(SWIFT_SDK_embedded_ARCH_${mod}_MODULE "${mod}")
set(SWIFT_SDK_embedded_LIB_SUBDIR "embedded") set(SWIFT_SDK_embedded_LIB_SUBDIR "embedded")
set(SWIFT_SDK_embedded_ARCH_${mod}_TRIPLE "${triple}") set(SWIFT_SDK_embedded_ARCH_${mod}_TRIPLE "${triple}")
if(SWIFT_EMBEDDED_STDLIB_SDKS_FOR_TARGET_TRIPLES)
set(SWIFT_SDK_embedded_ARCH_${mod}_PATH "${EMBEDDED_STDLIB_SDK_FOR_${triple}}")
endif()
add_swift_target_library_single( add_swift_target_library_single(
embedded-unicode-${mod} embedded-unicode-${mod}