Overlay: support Catalyst, hooks and backdeployment on Apple platforms

This involves copying the correct source file to generate the magic
symbols (the one for SwiftCore would not work here), and listening to
the backdeployment configuration of Core.

Take the chance to add hooks for vendor overrides.

Addresses rdar://156436695
This commit is contained in:
Eric Miotto
2025-07-22 14:45:39 -07:00
parent d7bdbcb1c0
commit 94d554dd61
6 changed files with 58 additions and 1 deletions

View File

@@ -4,3 +4,5 @@ include("${CMAKE_CURRENT_LIST_DIR}/SwiftCoreTargets.cmake")
set(SwiftCore_ENABLE_LIBRARY_EVOLUTION @SwiftCore_ENABLE_LIBRARY_EVOLUTION@)
set(SwiftCore_ENABLE_VECTOR_TYPES @SwiftCore_ENABLE_VECTOR_TYPES@)
set(SwiftCore_ENABLE_BACKDEPLOYMENT_SUPPORT @SwiftCore_ENABLE_BACKDEPLOYMENT_SUPPORT@)

View File

@@ -41,6 +41,9 @@ set(SwiftOverlay_SWIFTC_SOURCE_DIR
"${PROJECT_SOURCE_DIR}/../../"
CACHE FILEPATH "Path to the root source directory of the Swift compiler")
set(${PROJECT_NAME}_VENDOR_MODULE_DIR "${CMAKE_SOURCE_DIR}/cmake/modules/vendor"
CACHE FILEPATH "Location for private build system extension")
include(GNUInstallDirs)
include(gyb)
@@ -51,6 +54,8 @@ include(InstallSwiftInterface)
include(PlatformInfo)
include(ResourceEmbedding)
include("${${PROJECT_NAME}_VENDOR_MODULE_DIR}/Settings.cmake" OPTIONAL)
defaulted_option(SwiftOverlay_ENABLE_REFLECTION "Enable runtime support for mirrors and reflection support")
option(SwiftOverlay_INSTALL_NESTED_SUBDIR "Install libraries under a platform and architecture subdirectory" ON)
@@ -59,6 +64,8 @@ set(SwiftOverlay_INSTALL_SWIFTMODULEDIR "${CMAKE_INSTALL_LIBDIR}/swift$<$<NOT:$<
option(SwiftOverlay_ENABLE_LIBRARY_EVOLUTION "Generate ABI resilient runtime libraries"
${SwiftCore_ENABLE_LIBRARY_EVOLUTION})
option(SwiftOverlay_ENABLE_BACKDEPLOYMENT_SUPPORT "Add symbols for runtime backdeployment"
${SwiftCore_ENABLE_BACKDEPLOYMENT_SUPPORT})
add_compile_options(
$<$<COMPILE_LANGUAGE:Swift>:-explicit-module-build>
@@ -71,6 +78,9 @@ add_compile_options(
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-Xfrontend -disable-implicit-concurrency-module-import>"
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-Xfrontend -disable-implicit-string-processing-module-import>")
add_compile_definitions(
$<$<BOOL:${SwiftOverlay_ENABLE_BACKDEPLOYMENT_SUPPORT}>:SWIFT_STDLIB_SUPPORT_BACK_DEPLOYMENT>)
include(ExperimentalFeatures)
add_subdirectory(clang)
@@ -99,3 +109,5 @@ install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/cmake/SwiftOverlay/SwiftOverlayConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/cmake/SwiftOverlay/SwiftOverlayConfigVersion.cmake"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/SwiftOverlay")
include("${${PROJECT_NAME}_VENDOR_MODULE_DIR}/swiftOverlay.cmake" OPTIONAL)

View File

@@ -1,3 +1,4 @@
include(CatalystSupport)
gyb_expand(float.swift.gyb float.swift)

View File

@@ -1,6 +1,8 @@
set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "")
set(BUILD_SHARED_LIBS YES CACHE BOOL "")
set(SwiftOverlay_INSTALL_NESTED_SUBDIR OFF CACHE BOOL "")
set(SwiftOverlay_ENABLE_LIBRARY_EVOLUTION ON CACHE BOOL "")
set(SwiftOverlay_ENABLE_BACKDEPLOYMENT_SUPPORT ON CACHE BOOL "")
set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os -g -DNDEBUG" CACHE STRING "")
set(CMAKE_C_FLAGS_MINSIZEREL "-Os -g -DNDEBUG" CACHE STRING "")

View File

@@ -0,0 +1,40 @@
include(CheckCompilerFlag)
# Add flags for generating the zippered target variant in the build
# Initialize `${PROJECT_NAME}_VARIANT_MODULE_TRIPLE` if the driver is able to emit
# modules for the target variant.
if(${PROJECT_NAME}_COMPILER_VARIANT_TARGET)
add_compile_options(
"$<$<COMPILE_LANGUAGE:C,CXX>:SHELL:-darwin-target-variant ${${PROJECT_NAME}_COMPILER_VARIANT_TARGET}>"
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-target-variant ${${PROJECT_NAME}_COMPILER_VARIANT_TARGET}>"
# TODO: Remove me once we have a driver with
# https://github.com/swiftlang/swift-driver/pull/1803
"$<$<COMPILE_LANGUAGE:Swift>:SHELL:-Xclang-linker -darwin-target-variant -Xclang-linker ${${PROJECT_NAME}_COMPILER_VARIANT_TARGET}>")
add_link_options(
"$<$<LINK_LANGUAGE:C,CXX>:SHELL:-darwin-target-variant ${${PROJECT_NAME}_COMPILER_VARIANT_TARGET}>"
"$<$<LINK_LANGUAGE:Swift>:SHELL:-target-variant ${${PROJECT_NAME}_COMPILER_VARIANT_TARGET}>"
# TODO: Remove me once we have a driver with
# https://github.com/swiftlang/swift-driver/pull/1803
"$<$<LINK_LANGUAGE:Swift>:SHELL:-Xclang-linker -darwin-target-variant -Xclang-linker ${${PROJECT_NAME}_COMPILER_VARIANT_TARGET}>")
# TODO: Once we are guaranteed to have a driver with the variant module path
# support everywhere, we should integrate this into PlatformInfo.cmake
check_compiler_flag(Swift "-emit-variant-module-path ${CMAKE_CURRENT_BINARY_DIR}/CompilerID/variant.swiftmodule" HAVE_Swift_VARIANT_MODULE_PATH_FLAG)
if(HAVE_Swift_VARIANT_MODULE_PATH_FLAG)
# Get variant module triple
set(module_triple_command "${CMAKE_Swift_COMPILER}" -print-target-info -target ${${PROJECT_NAME}_COMPILER_VARIANT_TARGET})
execute_process(COMMAND ${module_triple_command} OUTPUT_VARIABLE target_info_json)
message(CONFIGURE_LOG "Swift target variant info: ${target_info_json}")
string(JSON module_triple GET "${target_info_json}" "target" "moduleTriple")
set(${PROJECT_NAME}_VARIANT_MODULE_TRIPLE "${module_triple}" CACHE STRING "Triple used for installed swift{module,interface} files for the target variant")
mark_as_advanced(${PROJECT_NAME}_VARIANT_MODULE_TRIPLE)
message(CONFIGURE_LOG "Swift target variant module triple: ${module_triple}")
endif()
endif()

View File

@@ -105,7 +105,7 @@ copy_files("" "Supplemental/Distributed" FILES "Info.plist.in")
# Platform Overlays
# Copy magic linker symbols
copy_library_sources("linker-support" "" "Overlay")
copy_library_sources("linker-support" "public/ClangOverlays" "Overlay")
message(STATUS "Clang[${StdlibSources}/public/ClangOverlays] -> ${CMAKE_CURRENT_LIST_DIR}/Overlay/clang")
copy_files(public/ClangOverlays Overlay/clang FILES float.swift.gyb)