Skip to content

Commit cd7701c

Browse files
committed
[Build] Add catalyst support to SwiftStdlibCurrentOS.
Add catalyst support for SwiftStdlibCurrentOS. Also, set a minimum deployment target when building Concurrency; this stops the build failing when we're trying to build on older systems where Concurrency didn't really exist yet. rdar://150966361
1 parent 28f96e6 commit cd7701c

File tree

6 files changed

+74
-18
lines changed

6 files changed

+74
-18
lines changed

Runtimes/Core/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,14 +78,14 @@ set(SwiftCore_VENDOR_MODULE_DIR "${SwiftCore_CMAKE_MODULES_DIR}/vendor"
7878
include(GNUInstallDirs)
7979
include(CheckSymbolExists)
8080
include(CheckIncludeFileCXX)
81-
include(AvailabilityMacros)
8281
include(CompilerSettings)
8382
include(DefaultSettings)
8483
include(EmitSwiftInterface)
8584
include(PlatformInfo)
8685
include(gyb)
8786
include(ResourceEmbedding)
8887
include(CatalystSupport)
88+
include(AvailabilityMacros)
8989

9090
check_symbol_exists("asl_log" "asl.h" SwiftCore_HAS_ASL)
9191
check_symbol_exists("dladdr" "dlfcn.h" SwiftCore_HAS_DLADDR)

Runtimes/Core/cmake/modules/AvailabilityMacros.cmake

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,28 @@ foreach(def ${availability_defs})
77
add_compile_options("$<$<COMPILE_LANGUAGE:Swift>:SHELL:-Xfrontend -define-availability -Xfrontend \"${def}\">")
88

99
if("${def}" MATCHES "SwiftStdlib .*")
10-
# For each SwiftStdlib x.y, also define SwiftStdlibTargetOS x.y, which,
10+
# For each SwiftStdlib x.y, also define SwiftStdlibCurrentOS x.y, which,
1111
# will expand to the current `-target` platform if the macro defines a
1212
# newer platform as its availability.
1313
#
1414
# There is a setting, SwiftCore_ENABLE_STRICT_AVAILABILITY, which if set
1515
# ON will cause us to use the "proper" availability instead.
1616
string(REPLACE "SwiftStdlib" "SwiftStdlibCurrentOS" current "${def}")
1717
if(NOT SwiftCore_ENABLE_STRICT_AVAILABILITY AND SwiftCore_SWIFT_AVAILABILITY_PLATFORM)
18-
string(REGEX MATCH "${SwiftCore_SWIFT_AVAILABILITY_PLATFORM} ([0-9]+(\.[0-9]+)+)" platform_version "${def}")
19-
string(REGEX MATCH "[0-9]+(\.[0-9]+)+" version "${platform_version}")
20-
if(NOT version STREQUAL "9999" AND version VERSION_GREATER CMAKE_OSX_DEPLOYMENT_TARGET)
21-
string(REGEX REPLACE ":.*" ":${SwiftCore_SWIFT_AVAILABILITY_PLATFORM} ${CMAKE_OSX_DEPLOYMENT_TARGET}" current "${current}")
18+
if(SwiftCore_SWIFT_AVAILABILITY_PLATFORM STREQUAL "macOS" and SwiftCore_VARIANT_AVAILABILITY_PLATFORM STREQUAL "iOS")
19+
string(REGEX MATCH "iOS ([0-9]+(\.[0-9]+)+)" ios_platform_version "${def}")
20+
string(REGEX MATCH "[0-9]+(\.[0-9]+)+" ios_version "${ios_platform_version}")
21+
string(REGEX MATCH "macOS ([0-9]+(\.[0-9]+)+)" macos_platform_version "${def}")
22+
string(REGEX MATCH "[0-9]+(\.[0-9]+)+" macos_version "${macos_platform_version}")
23+
if((NOT macos_version STREQUAL "9999" OR NOT ios_version STREQUAL "9999") AND (macos_version VERSION_GREATER CMAKE_OSX_DEPLOYMENT_TARGET OR ios_version VERSION_GREATER SwiftCore_VARIANT_DEPLOYMENT_VERSION))
24+
string(REGEX REPLACE ":.*" ": macOS ${CMAKE_OSX_DEPLOYMENT_VERSION}, iOS ${SwiftCore_VARIANT_DEPLOYMENT_VERSION}" current "${current}")
25+
endif()
26+
else()
27+
string(REGEX MATCH "${SwiftCore_SWIFT_AVAILABILITY_PLATFORM} ([0-9]+(\.[0-9]+)+)" platform_version "${def}")
28+
string(REGEX MATCH "[0-9]+(\.[0-9]+)+" version "${platform_version}")
29+
if(NOT version STREQUAL "9999" AND version VERSION_GREATER CMAKE_OSX_DEPLOYMENT_TARGET)
30+
string(REGEX REPLACE ":.*" ":${SwiftCore_SWIFT_AVAILABILITY_PLATFORM} ${CMAKE_OSX_DEPLOYMENT_TARGET}" current "${current}")
31+
endif()
2232
endif()
2333
endif()
2434
add_compile_options("$<$<COMPILE_LANGUAGE:Swift>:SHELL:-Xfrontend -define-availability -Xfrontend \"${current}\">")

Runtimes/Core/cmake/modules/CatalystSupport.cmake

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,12 @@ if(SwiftCore_COMPILER_VARIANT_TARGET)
3434
set(SwiftCore_VARIANT_MODULE_TRIPLE "${module_triple}" CACHE STRING "Triple used for installed swift{module,interface} files for the target variant")
3535
mark_as_advanced(SwiftCore_VARIANT_MODULE_TRIPLE)
3636
message(CONFIGURE_LOG "Swift target variant module triple: ${module_triple}")
37+
38+
string(JSON triple GET "${target_info_json}" "target" "triple")
39+
if(triple MATCHES "apple-([a-zA-Z]+)([0-9]+[.0-9]*)-macabi")
40+
set(SwiftCore_VARIANT_DEPLOYMENT_VERSION "${CMAKE_MATCH_2}")
41+
mark_as_advanced(SwiftCore_VARIANT_DEPLOYMENT_VERSION)
42+
message(CONFIGURE_LOG "Swift target variant deployment version: ${SwiftCore_VARIANT_DEPLOYMENT_VERSION}")
43+
endif()
3744
endif()
3845
endif()

Runtimes/Core/cmake/modules/PlatformInfo.cmake

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,14 @@ if(NOT SwiftCore_ARCH_SUBDIR)
3737
message(CONFIGURE_LOG "Swift Arch: ${arch}")
3838
endif()
3939

40-
if(NOT SwiftCore_SWIFT_AVAILABILITY_PLATFORM)
41-
set(availability_platform_macosx "macOS")
42-
set(availability_platform_ios "iOS")
43-
set(availability_platform_watchos "watchOS")
44-
set(availability_platform_tvos "tvOS")
45-
set(availability_platform_xros "visionOS")
46-
set(availability_platform_bridgeos "bridgeOS")
40+
set(availability_platform_macosx "macOS")
41+
set(availability_platform_ios "iOS")
42+
set(availability_platform_watchos "watchOS")
43+
set(availability_platform_tvos "tvOS")
44+
set(availability_platform_xros "visionOS")
45+
set(availability_platform_bridgeos "bridgeOS")
4746

47+
if(NOT SwiftCore_SWIFT_AVAILABILITY_PLATFORM)
4848
if(SwiftCore_SWIFT_MODULE_TRIPLE MATCHES ".*-([^-]+)-simulator$")
4949
set(platform "${CMAKE_MATCH_1}")
5050
elseif(SwiftCore_SWIFT_MODULE_TRIPLE MATCHES ".*-([^-]+)$")
@@ -59,3 +59,17 @@ if(NOT SwiftCore_SWIFT_AVAILABILITY_PLATFORM)
5959
message(ERROR "Unknown platform ${platform} for availability")
6060
endif()
6161
endif()
62+
63+
if(SwiftCore_VARIANT_MODULE_TRIPLE)
64+
if(SwiftCore_VARIANT_MODULE_TRIPLE MATCHES ".*-([^-]+)$")
65+
set(platform "${CMAKE_MATCH_1}")
66+
else()
67+
message(ERROR "Unable to extract platform name from triple ${SwiftCore_SWIFT_MODULE_TRIPLE}")
68+
endif()
69+
70+
if(availability_platform_${platform})
71+
set(SwiftCore_VARIANT_AVAILABILITY_PLATFORM "${availability_platform_${platform}}")
72+
else()
73+
message(ERROR "Unknown platform ${platform} for variant availability")
74+
endif()
75+
endif()

stdlib/cmake/modules/AddSwiftStdlib.cmake

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1005,18 +1005,34 @@ function(add_swift_target_library_single target name)
10051005
list(APPEND SWIFTLIB_SINGLE_SWIFT_COMPILE_FLAGS "-Xfrontend" "-define-availability" "-Xfrontend" "${def}")
10061006

10071007
if("${def}" MATCHES "SwiftStdlib .*")
1008-
# For each SwiftStdlib x.y, also define SwiftStdlibTargetOS x.y, which,
1008+
# For each SwiftStdlib x.y, also define SwiftStdlibCurrentOS x.y, which,
10091009
# will expand to the current `-target` platform if the macro defines a
10101010
# newer platform as its availability.
10111011
#
10121012
# There is a setting, SWIFT_STDLIB_ENABLE_STRICT_AVAILABILITY, which if set
10131013
# ON will cause us to use the "proper" availability instead.
10141014
string(REPLACE "SwiftStdlib" "SwiftStdlibCurrentOS" current "${def}")
10151015
if(NOT SWIFT_STDLIB_ENABLE_STRICT_AVAILABILITY AND SWIFT_SDK_${SWIFTLIB_SINGLE_SDK}_AVAILABILITY_NAME)
1016-
string(REGEX MATCH "${SWIFT_SDK_${SWIFTLIB_SINGLE_SDK}_AVAILABILITY_NAME} ([0-9]+(\.[0-9]+)+)" platform_version "${def}")
1017-
string(REGEX MATCH "[0-9]+(\.[0-9]+)+" version "${platform_version}")
1018-
if(NOT version STREQUAL "9999" AND version VERSION_GREATER "${SWIFT_SDK_${SWIFTLIB_SINGLE_SDK}_DEPLOYMENT_VERSION}")
1019-
string(REGEX REPLACE ":.*" ":${SWIFT_SDK_${SWIFTLIB_SINGLE_SDK}_AVAILABILITY_NAME} ${SWIFT_SDK_${SWIFTLIB_SINGLE_SDK}_DEPLOYMENT_VERSION}" current "${current}")
1016+
if(SWIFTLIB_SINGLE_SDK STREQUAL "OSX" AND SWIFTLIB_SINGLE_MACCATALYST_BUILD_FLAVOR STREQUAL "ios-like")
1017+
string(REGEX MATCH "iOS ([0-9]+(\.[0-9]+)+)" platform_version "${def}")
1018+
string(REGEX MATCH "[0-9]+(\.[0-9]+)+" version "${platform_version}")
1019+
if(NOT version STREQUAL "9999" AND version VERSION_GREATER "${SWIFT_DARWIN_DEPLOYMENT_VERSION_MACCATALYST}")
1020+
string(REGEX REPLACE ":.*" ":iOS ${SWIFT_DARWIN_DEPLOYMENT_VERSION_MACCATALYST}" current "${current}")
1021+
endif()
1022+
elseif(SWIFTLIB_SINGLE_SDK STREQUAL "OSX" AND SWIFTLIB_SINGLE_MACCATALYST_BUILD_FLAVOR STREQUAL "zippered")
1023+
string(REGEX MATCH "iOS ([0-9]+(\.[0-9]+)+)" ios_platform_version "${def}")
1024+
string(REGEX MATCH "[0-9]+(\.[0-9]+)+" ios_version "${ios_platform_version}")
1025+
string(REGEX MATCH "macOS ([0-9]+(\.[0-9]+)+)" macos_platform_version "${def}")
1026+
string(REGEX MATCH "[0-9]+(\.[0-9]+)+" macos_version "${macos_platform_version}")
1027+
if((NOT macos_version STREQUAL "9999" OR NOT ios_version STREQUAL "9999") AND (macos_version VERSION_GREATER "${SWIFT_SDK_OSX_DEPLOYMENT_VERSION}" OR ios_version VERSION_GREATER "${SWIFT_DARWIN_DEPLOYMENT_VERSION_MACCATALYST}"))
1028+
string(REGEX REPLACE ":.*" ": macOS ${SWIFT_SDK_OSX_DEPLOYMENT_VERSION}, iOS ${SWIFT_DARWIN_DEPLOYMENT_VERSION_MACCATALYST}" current "${current}")
1029+
endif()
1030+
else()
1031+
string(REGEX MATCH "${SWIFT_SDK_${SWIFTLIB_SINGLE_SDK}_AVAILABILITY_NAME} ([0-9]+(\.[0-9]+)+)" platform_version "${def}")
1032+
string(REGEX MATCH "[0-9]+(\.[0-9]+)+" version "${platform_version}")
1033+
if(NOT version STREQUAL "9999" AND version VERSION_GREATER "${SWIFT_SDK_${SWIFTLIB_SINGLE_SDK}_DEPLOYMENT_VERSION}")
1034+
string(REGEX REPLACE ":.*" ":${SWIFT_SDK_${SWIFTLIB_SINGLE_SDK}_AVAILABILITY_NAME} ${SWIFT_SDK_${SWIFTLIB_SINGLE_SDK}_DEPLOYMENT_VERSION}" current "${current}")
1035+
endif()
10201036
endif()
10211037
endif()
10221038

stdlib/public/Concurrency/CMakeLists.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,13 @@ if((SWIFT_BUILD_CLANG_OVERLAYS
214214
set(SWIFT_CONCURRENCY_DEPENDENCIES _Builtin_float)
215215
endif()
216216

217+
# Build with a minimum deployment target of 10.15
218+
if(SWIFT_DARWIN_DEPLOYMENT_VERSION_OSX VERSION_LESS "10.15")
219+
set(osx_deployment_target "10.15")
220+
else()
221+
set(osx_deployment_target "${SWIFT_DARWIN_DEPLOYMENT_VERSION_OSX}")
222+
endif()
223+
217224
add_swift_target_library(swift_Concurrency ${SWIFT_STDLIB_LIBRARY_BUILD_TYPES} IS_STDLIB
218225
${SWIFT_RUNTIME_CONCURRENCY_C_SOURCES}
219226
${SWIFT_RUNTIME_CONCURRENCY_EXECUTOR_SOURCES}
@@ -240,6 +247,8 @@ add_swift_target_library(swift_Concurrency ${SWIFT_STDLIB_LIBRARY_BUILD_TYPES} I
240247
${swift_concurrency_incorporate_object_libraries_so}
241248
LINK_LIBRARIES ${swift_concurrency_link_libraries}
242249

250+
DEPLOYMENT_VERSION_OSX ${osx_deployment_target}
251+
243252
C_COMPILE_FLAGS
244253
-Dswift_Concurrency_EXPORTS ${SWIFT_RUNTIME_CONCURRENCY_C_FLAGS}
245254
-I${SWIFT_SOURCE_DIR}/stdlib/include

0 commit comments

Comments
 (0)