From 6dcf1ab30c297720d7e6a90b262c5f52ca4500d5 Mon Sep 17 00:00:00 2001 From: Eric Miotto Date: Fri, 10 Oct 2025 09:12:30 -0700 Subject: [PATCH] CMake: allow to specify a SDK when building a triple for Embedded Swift To achieve so, allow each item in `SWIFT_EMBEDDED_STDLIB_EXTRA_TARGET_TRIPLES` to append a SDK path after a @ character, e.g. ``` -DSWIFT_EMBEDDED_STDLIB_EXTRA_TARGET_TRIPLES=aarch64-vendor-os@/usr/local/aarch64-vendor-os-sdk;aaarch-vendor-anotheros ``` Addresses rdar://162368529 --- stdlib/public/CMakeLists.txt | 15 ++++++++++++--- stdlib/public/ClangOverlays/CMakeLists.txt | 1 + stdlib/public/Concurrency/CMakeLists.txt | 2 ++ stdlib/public/Synchronization/CMakeLists.txt | 1 + stdlib/public/Volatile/CMakeLists.txt | 1 + stdlib/public/core/CMakeLists.txt | 1 + stdlib/public/stubs/Unicode/CMakeLists.txt | 1 + 7 files changed, 19 insertions(+), 3 deletions(-) diff --git a/stdlib/public/CMakeLists.txt b/stdlib/public/CMakeLists.txt index 0c479ae35085a..2e8c246b3eafa 100644 --- a/stdlib/public/CMakeLists.txt +++ b/stdlib/public/CMakeLists.txt @@ -264,22 +264,31 @@ if(SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB AND NOT SWIFT_WASI_SYSROOT_PATH) endif() endif() -foreach(triple ${SWIFT_EMBEDDED_STDLIB_EXTRA_TARGET_TRIPLES}) - if(triple STREQUAL "") +foreach(triple_configuration ${SWIFT_EMBEDDED_STDLIB_EXTRA_TARGET_TRIPLES}) + if(triple_configuration STREQUAL "") continue() endif() + # Line format: [@] + string(REPLACE "@" ";" triple_configuration_list "${triple_configuration}") + list(GET triple_configuration_list 0 triple) string(REGEX REPLACE "-" ";" list "${triple}") list(GET list 0 arch) list(GET list 1 vendor) 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(APPEND EMBEDDED_STDLIB_TARGET_TRIPLES "${arch} ${mod} ${triple}" ) + + list(LENGTH triple_configuration_list triple_configuration_list_length) + if(triple_configuration_list_length GREATER_EQUAL 2) + list(GET triple_configuration_list 1 sdk_path) + set(EMBEDDED_STDLIB_SDK_FOR_${triple} "${sdk_path}") + endif() endforeach() if(SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB) diff --git a/stdlib/public/ClangOverlays/CMakeLists.txt b/stdlib/public/ClangOverlays/CMakeLists.txt index 5b91e00ccff98..27b5ae1878a2d 100644 --- a/stdlib/public/ClangOverlays/CMakeLists.txt +++ b/stdlib/public/ClangOverlays/CMakeLists.txt @@ -55,6 +55,7 @@ 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_LIB_SUBDIR "embedded") set(SWIFT_SDK_embedded_ARCH_${arch}_TRIPLE "${triple}") + set(SWIFT_SDK_embedded_ARCH_${arch}_PATH "${EMBEDDED_STDLIB_SDK_FOR_${triple}}") add_swift_target_library_single( embedded-builtin_float-${mod} swift_Builtin_float diff --git a/stdlib/public/Concurrency/CMakeLists.txt b/stdlib/public/Concurrency/CMakeLists.txt index d2e82536ddcbd..505e4f84ab208 100644 --- a/stdlib/public/Concurrency/CMakeLists.txt +++ b/stdlib/public/Concurrency/CMakeLists.txt @@ -335,6 +335,8 @@ if(SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB AND SWIFT_SHOULD_BUILD_EMBEDDED_CONCURRENC set(SWIFT_SDK_embedded_LIB_SUBDIR "embedded") set(SWIFT_SDK_embedded_ARCH_${arch}_TRIPLE "${triple}") set(SWIFT_SDK_embedded_ARCH_${mod}_TRIPLE "${triple}") + set(SWIFT_SDK_embedded_ARCH_${arch}_PATH "${EMBEDDED_STDLIB_SDK_FOR_${triple}}") + set(SWIFT_SDK_embedded_ARCH_${mod}_PATH "${EMBEDDED_STDLIB_SDK_FOR_${triple}}") # lib/swift/embedded/_Concurrency.swiftmodule # lib/swift/embedded//libswift_Concurrency.a diff --git a/stdlib/public/Synchronization/CMakeLists.txt b/stdlib/public/Synchronization/CMakeLists.txt index 7eeb1b4bc2ad3..47fb8b450d96d 100644 --- a/stdlib/public/Synchronization/CMakeLists.txt +++ b/stdlib/public/Synchronization/CMakeLists.txt @@ -189,6 +189,7 @@ if(SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB) set(SWIFT_SDK_embedded_ARCH_${arch}_MODULE "${mod}") set(SWIFT_SDK_embedded_LIB_SUBDIR "embedded") set(SWIFT_SDK_embedded_ARCH_${arch}_TRIPLE "${triple}") + set(SWIFT_SDK_embedded_ARCH_${arch}_PATH "${EMBEDDED_STDLIB_SDK_FOR_${triple}}") add_swift_target_library_single( embedded-synchronization-${mod} swiftSynchronization diff --git a/stdlib/public/Volatile/CMakeLists.txt b/stdlib/public/Volatile/CMakeLists.txt index dd91f0fa88f52..166f0d5ca350f 100644 --- a/stdlib/public/Volatile/CMakeLists.txt +++ b/stdlib/public/Volatile/CMakeLists.txt @@ -33,6 +33,7 @@ if(SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB) set(SWIFT_SDK_embedded_ARCH_${arch}_MODULE "${mod}") set(SWIFT_SDK_embedded_LIB_SUBDIR "embedded") set(SWIFT_SDK_embedded_ARCH_${arch}_TRIPLE "${triple}") + set(SWIFT_SDK_embedded_ARCH_${arch}_PATH "${EMBEDDED_STDLIB_SDK_FOR_${triple}}") add_swift_target_library_single( embedded-volatile-${mod} swift_Volatile diff --git a/stdlib/public/core/CMakeLists.txt b/stdlib/public/core/CMakeLists.txt index 7146ea7f6c82f..4ca298826f5af 100644 --- a/stdlib/public/core/CMakeLists.txt +++ b/stdlib/public/core/CMakeLists.txt @@ -527,6 +527,7 @@ if(SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB) set(SWIFT_SDK_embedded_ARCH_${arch}_MODULE "${mod}") set(SWIFT_SDK_embedded_LIB_SUBDIR "embedded") set(SWIFT_SDK_embedded_ARCH_${arch}_TRIPLE "${triple}") + set(SWIFT_SDK_embedded_ARCH_${arch}_PATH "${EMBEDDED_STDLIB_SDK_FOR_${triple}}") add_swift_target_library_single( embedded-stdlib-${mod} swiftCore diff --git a/stdlib/public/stubs/Unicode/CMakeLists.txt b/stdlib/public/stubs/Unicode/CMakeLists.txt index 7e60f517574b2..c62f0c3bed9e0 100644 --- a/stdlib/public/stubs/Unicode/CMakeLists.txt +++ b/stdlib/public/stubs/Unicode/CMakeLists.txt @@ -28,6 +28,7 @@ if(SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB) set(SWIFT_SDK_embedded_ARCH_${mod}_MODULE "${mod}") set(SWIFT_SDK_embedded_LIB_SUBDIR "embedded") set(SWIFT_SDK_embedded_ARCH_${mod}_TRIPLE "${triple}") + set(SWIFT_SDK_embedded_ARCH_${mod}_PATH "${EMBEDDED_STDLIB_SDK_FOR_${triple}}") add_swift_target_library_single( embedded-unicode-${mod}