From 8959dd97feae2941c12209d5638257862ba867f7 Mon Sep 17 00:00:00 2001 From: Ian Anderson Date: Thu, 15 Aug 2024 15:49:50 -0700 Subject: [PATCH] [CMake] [Darwin] Don't build the SDK overlays by default on Apple platforms The Apple SDKs have been providing the Darwin overlay since macOS 10.14.4, iOS 12.2, et al. More recently the SDK version has diverged from the Swift version making them incompatible. Stop building the overlay from Swift. Once the SDK overlays aren't being built, the clang overlays need to be built in testing. %target-swift-emit-pcm doesn't use the sdk, but %target-swift-frontend does, which will cause them to have a mismatch with "builtin headers belong to system modules, and _Builtin_ modules are ignored for cstdlib headers" aka LANGOPT(BuiltinHeadersInSystemModules) aka -fbuiltin-headers-in-system-modules. rdar://115192929 --- CMakeLists.txt | 11 +++++++++-- benchmark/cmake/modules/AddSwiftBenchmarkSuite.cmake | 2 +- cmake/modules/DarwinSDKs.cmake | 6 +++++- stdlib/private/CMakeLists.txt | 7 ++++--- stdlib/public/CMakeLists.txt | 7 +++---- test/Driver/loaded_module_trace_foundation.swift | 4 ++-- test/Driver/loaded_module_trace_header.swift | 2 +- test/SIL/Serialization/deserialize_darwin.sil | 7 ------- test/embedded/concurrency-actors.swift | 4 ++++ test/embedded/concurrency-async-let.swift | 4 ++++ test/embedded/concurrency-simple.swift | 4 ++++ test/embedded/darwin-bridging-header.swift | 4 ++++ test/embedded/darwin.swift | 4 ++++ test/embedded/dependencies-concurrency.swift | 4 ++++ test/lit.cfg | 4 ++-- utils/build_swift/build_swift/driver_arguments.py | 3 ++- utils/build_swift/tests/expected_options.py | 3 ++- 17 files changed, 55 insertions(+), 25 deletions(-) delete mode 100644 test/SIL/Serialization/deserialize_darwin.sil diff --git a/CMakeLists.txt b/CMakeLists.txt index eb7b3ca61ac..0ed8a430eb1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -244,10 +244,17 @@ option(SWIFT_BUILD_CLANG_OVERLAYS "Build Swift overlays for the clang builtin modules" TRUE) +# The SDK overlay is provided by the SDK itself on Darwin platforms. +if(SWIFT_HOST_VARIANT_SDK IN_LIST SWIFT_DARWIN_PLATFORMS) + set(SWIFT_BUILD_DYNAMIC_SDK_OVERLAY_default FALSE) +else() + set(SWIFT_BUILD_DYNAMIC_SDK_OVERLAY_default TRUE) +endif() + option(SWIFT_BUILD_DYNAMIC_SDK_OVERLAY "Build dynamic variants of the Swift SDK overlay" - TRUE) - + "${SWIFT_BUILD_DYNAMIC_SDK_OVERLAY_default}") + option(SWIFT_BUILD_STATIC_SDK_OVERLAY "Build static variants of the Swift SDK overlay" FALSE) diff --git a/benchmark/cmake/modules/AddSwiftBenchmarkSuite.cmake b/benchmark/cmake/modules/AddSwiftBenchmarkSuite.cmake index 4a8f798cedf..1e8e4326a70 100644 --- a/benchmark/cmake/modules/AddSwiftBenchmarkSuite.cmake +++ b/benchmark/cmake/modules/AddSwiftBenchmarkSuite.cmake @@ -716,7 +716,7 @@ function(swift_benchmark_compile) if(NOT SWIFT_BENCHMARK_BUILT_STANDALONE) set(stdlib_dependencies "swift-frontend" "swiftCore-${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}") - if(SWIFT_HOST_VARIANT_SDK IN_LIST SWIFT_DARWIN_PLATFORMS) + if((SWIFT_HOST_VARIANT_SDK IN_LIST SWIFT_DARWIN_PLATFORMS) AND SWIFT_BUILD_SDK_OVERLAY) list(APPEND stdlib_dependencies "swiftDarwin-${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}") endif() foreach(stdlib_dependency ${UNIVERSAL_LIBRARY_NAMES_${SWIFT_BENCHMARK_COMPILE_PLATFORM}}) diff --git a/cmake/modules/DarwinSDKs.cmake b/cmake/modules/DarwinSDKs.cmake index b8f12550b23..53f18a1ee43 100644 --- a/cmake/modules/DarwinSDKs.cmake +++ b/cmake/modules/DarwinSDKs.cmake @@ -38,7 +38,11 @@ if(swift_build_freestanding AND (SWIFT_FREESTANDING_FLAVOR STREQUAL "apple")) configure_target_variant(FREESTANDING-R "FREESTANDING Release" FREESTANDING R "Release") configure_target_variant(FREESTANDING-S "FREESTANDING MinSizeRelease" FREESTANDING S "MinSizeRelease") - set(SWIFT_FREESTANDING_TEST_DEPENDENCIES "Darwin") + if(SWIFT_BUILD_SDK_OVERLAY) + set(SWIFT_FREESTANDING_TEST_DEPENDENCIES "Darwin") + else() + set(SWIFT_FREESTANDING_TEST_DEPENDENCIES "") + endif() endif() # Compatible cross-compile SDKS for Darwin OSes: IOS, IOS_SIMULATOR, TVOS, diff --git a/stdlib/private/CMakeLists.txt b/stdlib/private/CMakeLists.txt index 05ef455b755..61186a965e4 100644 --- a/stdlib/private/CMakeLists.txt +++ b/stdlib/private/CMakeLists.txt @@ -1,6 +1,7 @@ -if(SWIFT_BUILD_SDK_OVERLAY) +if(SWIFT_BUILD_SDK_OVERLAY OR (SWIFT_BUILD_TEST_SUPPORT_MODULES AND NOT SWIFT_BUILD_DYNAMIC_SDK_OVERLAY_default)) # SwiftPrivateThreadExtras makes use of Darwin/Glibc, which is part of the - # SDK overlay. It can't be built separately from the SDK overlay. + # SDK overlay. If the SDK overlay doesn't build by default, then it should + # be available in the SDK and DifferentiationUnittest can still be built. if(SWIFT_ENABLE_EXPERIMENTAL_DIFFERENTIABLE_PROGRAMMING) add_subdirectory(DifferentiationUnittest) endif() @@ -20,7 +21,7 @@ if(SWIFT_BUILD_SDK_OVERLAY OR SWIFT_BUILD_TEST_SUPPORT_MODULES) add_subdirectory(StdlibUnittest) endif() -if(SWIFT_BUILD_SDK_OVERLAY) +if(SWIFT_BUILD_SDK_OVERLAY OR (SWIFT_BUILD_TEST_SUPPORT_MODULES AND NOT SWIFT_BUILD_DYNAMIC_SDK_OVERLAY_default)) add_subdirectory(OSLog) if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") diff --git a/stdlib/public/CMakeLists.txt b/stdlib/public/CMakeLists.txt index 12a18cf589e..b359c461317 100644 --- a/stdlib/public/CMakeLists.txt +++ b/stdlib/public/CMakeLists.txt @@ -266,7 +266,7 @@ if(SWIFT_BUILD_STDLIB) add_subdirectory(core) add_subdirectory(SwiftOnoneSupport) - if(SWIFT_BUILD_CLANG_OVERLAYS) + if(SWIFT_BUILD_CLANG_OVERLAYS OR SWIFT_BUILD_TEST_SUPPORT_MODULES) add_subdirectory(ClangOverlays) endif() @@ -315,13 +315,12 @@ if(SWIFT_BUILD_REMOTE_MIRROR) add_subdirectory(SwiftRemoteMirror) endif() -if(SWIFT_BUILD_SDK_OVERLAY OR SWIFT_BUILD_TEST_SUPPORT_MODULES) +if(SWIFT_BUILD_SDK_OVERLAY OR (SWIFT_BUILD_TEST_SUPPORT_MODULES AND SWIFT_BUILD_DYNAMIC_SDK_OVERLAY_default)) add_subdirectory(Platform) endif() if(SWIFT_BUILD_SDK_OVERLAY) - # On Apple platforms, we aren't building any overlays (other than Darwin in - # Platform above). Instead, we're picking them up from the SDK. + # On Apple platforms, we aren't building any overlays. Instead, we're picking them up from the SDK. if(WINDOWS IN_LIST SWIFT_SDKS) add_subdirectory(Windows) diff --git a/test/Driver/loaded_module_trace_foundation.swift b/test/Driver/loaded_module_trace_foundation.swift index a2f3de1da5f..3a66f173361 100644 --- a/test/Driver/loaded_module_trace_foundation.swift +++ b/test/Driver/loaded_module_trace_foundation.swift @@ -9,12 +9,12 @@ // CHECK: "arch":"{{[^"]*}}" // CHECK: "swiftmodules":[ -// Darwin, Swift and SwiftOnoneSupport is expected to be locally built; +// Swift and SwiftOnoneSupport is expected to be locally built; // everything else comes from the SDK, built from swiftinterface. // CHECK-DAG: "{{[^"]*}}/ObjectiveC.swiftmodule{{(\\/[^"]+[.]swift(module|interface))?}}" // CHECK-DAG: "{{[^"]*}}/Dispatch.swiftmodule{{(\\/[^"]+[.]swift(module|interface))?}}" -// CHECK-DAG: "{{[^"]*}}/Darwin.swiftmodule{{(\\/[^"]+[.]swiftmodule)?}}" +// CHECK-DAG: "{{[^"]*}}/Darwin.swiftmodule{{(\\/[^"]+[.]swift(module|interface))?}}" // CHECK-DAG: "{{[^"]*}}/Foundation.swiftmodule{{(\\/[^"]+[.]swift(module|interface))?}}" // CHECK-DAG: "{{[^"]*}}/Swift.swiftmodule{{(\\/[^"]+[.]swiftmodule)?}}" // CHECK-DAG: "{{[^"]*}}/SwiftOnoneSupport.swiftmodule{{(\\/[^"]+[.]swiftmodule)?}}" diff --git a/test/Driver/loaded_module_trace_header.swift b/test/Driver/loaded_module_trace_header.swift index 8ce2e3c9219..14181b134d7 100644 --- a/test/Driver/loaded_module_trace_header.swift +++ b/test/Driver/loaded_module_trace_header.swift @@ -11,7 +11,7 @@ // CHECK: "swiftmodules":[ // CHECK-DAG: "{{[^"]*}}/ObjectiveC.swiftmodule{{(\\/[^"]+[.]swift(module|interface))?}}" // CHECK-DAG: "{{[^"]*}}/Dispatch.swiftmodule{{(\\/[^"]+[.]swift(module|interface))?}}" -// CHECK-DAG: "{{[^"]*}}/Darwin.swiftmodule{{(\\/[^"]+[.]swiftmodule)?}}" +// CHECK-DAG: "{{[^"]*}}/Darwin.swiftmodule{{(\\/[^"]+[.]swift(module|interface))?}}" // CHECK-DAG: "{{[^"]*}}/Foundation.swiftmodule{{(\\/[^"]+[.]swift(module|interface))?}}" // CHECK-DAG: "{{[^"]*}}/Swift.swiftmodule{{(\\/[^"]+[.]swiftmodule)?}}" // CHECK-DAG: "{{[^"]*}}/SwiftOnoneSupport.swiftmodule{{(\\/[^"]+[.]swiftmodule)?}}" diff --git a/test/SIL/Serialization/deserialize_darwin.sil b/test/SIL/Serialization/deserialize_darwin.sil deleted file mode 100644 index cb3429291d5..00000000000 --- a/test/SIL/Serialization/deserialize_darwin.sil +++ /dev/null @@ -1,7 +0,0 @@ -// Make sure that we can deserialize darwin. -// RUN: %target-sil-opt %platform-sdk-overlay-dir/Darwin.swiftmodule/%target-swiftmodule-name -module-name Darwin > /dev/null -// RUN: llvm-bcanalyzer %platform-sdk-overlay-dir/Darwin.swiftmodule/%target-swiftmodule-name | %FileCheck %s - -// REQUIRES: objc_interop - -// CHECK-NOT: Unknown diff --git a/test/embedded/concurrency-actors.swift b/test/embedded/concurrency-actors.swift index 53d3b4ea8a3..22f70fc45ce 100644 --- a/test/embedded/concurrency-actors.swift +++ b/test/embedded/concurrency-actors.swift @@ -9,6 +9,10 @@ // REQUIRES: optimized_stdlib // REQUIRES: OS=macosx +// The Darwin SDK overlay module in the macOS SDK cannot be imported in +// embedded Swift mode. +// XFAIL: OS=macosx + import _Concurrency actor Number { diff --git a/test/embedded/concurrency-async-let.swift b/test/embedded/concurrency-async-let.swift index 10869bf25c2..b1ebb1d65b9 100644 --- a/test/embedded/concurrency-async-let.swift +++ b/test/embedded/concurrency-async-let.swift @@ -9,6 +9,10 @@ // REQUIRES: optimized_stdlib // REQUIRES: OS=macosx +// The Darwin SDK overlay module in the macOS SDK cannot be imported in +// embedded Swift mode. +// XFAIL: OS=macosx + import _Concurrency func fib(_ n: Int) -> Int { diff --git a/test/embedded/concurrency-simple.swift b/test/embedded/concurrency-simple.swift index 7561ae13a0d..45733244a36 100644 --- a/test/embedded/concurrency-simple.swift +++ b/test/embedded/concurrency-simple.swift @@ -9,6 +9,10 @@ // REQUIRES: optimized_stdlib // REQUIRES: OS=macosx +// The Darwin SDK overlay module in the macOS SDK cannot be imported in +// embedded Swift mode. +// XFAIL: OS=macosx + import _Concurrency public func test() async -> Int { diff --git a/test/embedded/darwin-bridging-header.swift b/test/embedded/darwin-bridging-header.swift index e919e8ee0a1..d9fb85e5c45 100644 --- a/test/embedded/darwin-bridging-header.swift +++ b/test/embedded/darwin-bridging-header.swift @@ -11,6 +11,10 @@ // REQUIRES: VENDOR=apple // REQUIRES: OS=macosx +// The Darwin SDK overlay module in the macOS SDK cannot be imported in +// embedded Swift mode. +// XFAIL: OS=macosx + // BEGIN BridgingHeader.h #include diff --git a/test/embedded/darwin.swift b/test/embedded/darwin.swift index e15cf66d88a..e90513ea284 100644 --- a/test/embedded/darwin.swift +++ b/test/embedded/darwin.swift @@ -9,6 +9,10 @@ // REQUIRES: VENDOR=apple // REQUIRES: OS=macosx +// The Darwin SDK overlay module in the macOS SDK cannot be imported in +// embedded Swift mode. +// XFAIL: OS=macosx + import Darwin @main diff --git a/test/embedded/dependencies-concurrency.swift b/test/embedded/dependencies-concurrency.swift index 1df5612b29f..24f8afef2cc 100644 --- a/test/embedded/dependencies-concurrency.swift +++ b/test/embedded/dependencies-concurrency.swift @@ -47,6 +47,10 @@ // REQUIRES: optimized_stdlib // REQUIRES: OS=macosx +// The Darwin SDK overlay module in the macOS SDK cannot be imported in +// embedded Swift mode. +// XFAIL: OS=macosx + import _Concurrency public func test() async -> Int { diff --git a/test/lit.cfg b/test/lit.cfg index 6e9c4cdf95d..2bfda73b3c5 100644 --- a/test/lit.cfg +++ b/test/lit.cfg @@ -1533,8 +1533,8 @@ if run_vendor == 'apple': '%s -modulewrap -target %s' % (config.swiftc, config.variant_triple)) config.target_swift_emit_pcm = ( - '%s -emit-pcm -target %s' % - (config.swiftc, config.variant_triple)) + '%s -emit-pcm -target %s -sdk %r' % + (config.swiftc, config.variant_triple, config.variant_sdk)) subst_target_swift_frontend_mock_sdk_after = \ target_options_for_mock_sdk_after config.target_sil_opt = ( diff --git a/utils/build_swift/build_swift/driver_arguments.py b/utils/build_swift/build_swift/driver_arguments.py index fc29f5d4526..28072f5aadb 100644 --- a/utils/build_swift/build_swift/driver_arguments.py +++ b/utils/build_swift/build_swift/driver_arguments.py @@ -8,6 +8,7 @@ import multiprocessing import os +import platform import android.adb.commands @@ -1140,7 +1141,7 @@ def create_argument_parser(): help='build static variants of the Swift standard library') option('--build-swift-dynamic-sdk-overlay', toggle_true, - default=True, + default=platform.system() != "Darwin", help='build dynamic variants of the Swift SDK overlay') option('--build-swift-static-sdk-overlay', toggle_true, diff --git a/utils/build_swift/tests/expected_options.py b/utils/build_swift/tests/expected_options.py index 0f8075df012..fe0e90d8ce5 100644 --- a/utils/build_swift/tests/expected_options.py +++ b/utils/build_swift/tests/expected_options.py @@ -8,6 +8,7 @@ import multiprocessing +import platform from build_swift import argparse from build_swift import defaults @@ -79,7 +80,7 @@ EXPECTED_DEFAULTS = { 'build_runtime_with_host_compiler': False, 'build_stdlib_deployment_targets': ['all'], 'build_subdir': None, - 'build_swift_dynamic_sdk_overlay': True, + 'build_swift_dynamic_sdk_overlay': platform.system() != "Darwin", 'build_swift_dynamic_stdlib': True, 'build_swift_inspect': False, 'build_swift_private_stdlib': True,