Skip to content

Commit 27b1a7d

Browse files
committed
[Build] Fix deployment version handling for StdlibDeploymentTarget.
Where someone has told a target library to build for a _newer_ target than the current deployment target, we need to respect that newer target when setting StdlibDeploymentTarget for that target library. This trips us up when testing against older systems. rdar://155841439
1 parent d63bbb9 commit 27b1a7d

File tree

1 file changed

+65
-28
lines changed

1 file changed

+65
-28
lines changed

stdlib/cmake/modules/AddSwiftStdlib.cmake

Lines changed: 65 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,48 @@ function(add_dependencies_multiple_targets)
1919
endif()
2020
endfunction()
2121

22+
# Compute the deployment version
23+
function(deployment_version result_var_name)
24+
set(arguments
25+
SDK
26+
DEPLOYMENT_VERSION_OSX
27+
DEPLOYMENT_VERSION_IOS
28+
DEPLOYMENT_VERSION_TVOS
29+
DEPLOYMENT_VERSION_WATCHOS
30+
DEPLOYMENT_VERSION_XROS
31+
)
32+
cmake_parse_arguments(GETDEP
33+
""
34+
"${arguments}"
35+
""
36+
${ARGN})
37+
38+
if("${GETDEP_SDK}" IN_LIST SWIFT_DARWIN_PLATFORMS)
39+
# Check if there's a specific OS deployment version needed for this invocation
40+
if("${GETDEP_SDK}" STREQUAL "OSX")
41+
set(DEPLOYMENT_VERSION ${GETDEP_DEPLOYMENT_VERSION_OSX})
42+
elseif("${GETDEP_SDK}" STREQUAL "IOS" OR "${GETDEP_SDK}" STREQUAL "IOS_SIMULATOR")
43+
set(DEPLOYMENT_VERSION ${GETDEP_DEPLOYMENT_VERSION_IOS})
44+
elseif("${GETDEP_SDK}" STREQUAL "TVOS" OR "${GETDEP_SDK}" STREQUAL "TVOS_SIMULATOR")
45+
set(DEPLOYMENT_VERSION ${GETDEP_DEPLOYMENT_VERSION_TVOS})
46+
elseif("${GETDEP_SDK}" STREQUAL "WATCHOS" OR "${GETDEP_SDK}" STREQUAL "WATCHOS_SIMULATOR")
47+
set(DEPLOYMENT_VERSION ${GETDEP_DEPLOYMENT_VERSION_WATCHOS})
48+
elseif("${GETDEP_SDK}" STREQUAL "XROS" OR "${GETDEP_SDK}" STREQUAL "XROS_SIMULATOR")
49+
set(DEPLOYMENT_VERSION ${GETDEP_DEPLOYMENT_VERSION_XROS})
50+
endif()
51+
52+
if("${DEPLOYMENT_VERSION}" STREQUAL "")
53+
set(DEPLOYMENT_VERSION "${SWIFT_SDK_${GETDEP_SDK}_DEPLOYMENT_VERSION}")
54+
endif()
55+
endif()
56+
57+
if("${GETDEP_SDK}" STREQUAL "ANDROID")
58+
set(DEPLOYMENT_VERSION ${SWIFT_ANDROID_API_LEVEL})
59+
endif()
60+
61+
set("${result_var_name}" "${DEPLOYMENT_VERSION}" PARENT_SCOPE)
62+
endfunction()
63+
2264
# Usage:
2365
# _add_target_variant_c_compile_link_flags(
2466
# SDK sdk
@@ -52,32 +94,19 @@ function(_add_target_variant_c_compile_link_flags)
5294

5395
set(result ${${CFLAGS_RESULT_VAR_NAME}})
5496

55-
if("${CFLAGS_SDK}" IN_LIST SWIFT_DARWIN_PLATFORMS)
56-
# Check if there's a specific OS deployment version needed for this invocation
57-
if("${CFLAGS_SDK}" STREQUAL "OSX")
58-
if(DEFINED maccatalyst_build_flavor AND DEFINED CFLAGS_DEPLOYMENT_VERSION_MACCATALYST)
59-
set(DEPLOYMENT_VERSION ${CFLAGS_DEPLOYMENT_VERSION_MACCATALYST})
60-
else()
61-
set(DEPLOYMENT_VERSION ${CFLAGS_DEPLOYMENT_VERSION_OSX})
62-
endif()
63-
elseif("${CFLAGS_SDK}" STREQUAL "IOS" OR "${CFLAGS_SDK}" STREQUAL "IOS_SIMULATOR")
64-
set(DEPLOYMENT_VERSION ${CFLAGS_DEPLOYMENT_VERSION_IOS})
65-
elseif("${CFLAGS_SDK}" STREQUAL "TVOS" OR "${CFLAGS_SDK}" STREQUAL "TVOS_SIMULATOR")
66-
set(DEPLOYMENT_VERSION ${CFLAGS_DEPLOYMENT_VERSION_TVOS})
67-
elseif("${CFLAGS_SDK}" STREQUAL "WATCHOS" OR "${CFLAGS_SDK}" STREQUAL "WATCHOS_SIMULATOR")
68-
set(DEPLOYMENT_VERSION ${CFLAGS_DEPLOYMENT_VERSION_WATCHOS})
69-
elseif("${CFLAGS_SDK}" STREQUAL "XROS" OR "${CFLAGS_SDK}" STREQUAL "XROS_SIMULATOR")
70-
set(DEPLOYMENT_VERSION ${CFLAGS_DEPLOYMENT_VERSION_XROS})
71-
endif()
72-
73-
if("${DEPLOYMENT_VERSION}" STREQUAL "")
74-
set(DEPLOYMENT_VERSION "${SWIFT_SDK_${CFLAGS_SDK}_DEPLOYMENT_VERSION}")
75-
endif()
97+
if(DEFINED maccatalyst_build_flavor AND DEFINED CFLAGS_DEPLOYMENT_VERSION_MACCATALYST)
98+
set(DEPLOYMENT_VERSION_OSX "${CFLAGS_DEPLOYMENT_VERSION_MACCATALYST}")
99+
else()
100+
set(DEPLOYMENT_VERSION_OSX "${CFLAGS_DEPLOYMENT_VERSION_OSX}")
76101
endif()
77102

78-
if("${CFLAGS_SDK}" STREQUAL "ANDROID")
79-
set(DEPLOYMENT_VERSION ${SWIFT_ANDROID_API_LEVEL})
80-
endif()
103+
deployment_version(DEPLOYMENT_VERSION
104+
SDK ${CFLAGS_SDK}
105+
DEPLOYMENT_VERSION_OSX "${DEPLOYMENT_VERSION_OSX}"
106+
DEPLOYMENT_VERSION_IOS "${CFLAGS_DEPLOYMENT_VERSION_IOS}"
107+
DEPLOYMENT_VERSION_TVOS "${CFLAGS_DEPLOYMENT_VERSION_TVOS}"
108+
DEPLOYMENT_VERSION_WATCHOS "${CFLAGS_DEPLOYMENT_VERSION_WATCHOS}"
109+
DEPLOYMENT_VERSION_XROS "${CFLAGS_DEPLOYMENT_VERSION_XROS}")
81110

82111
# MSVC, clang-cl, gcc don't understand -target.
83112
if(CMAKE_C_COMPILER_ID MATCHES "^Clang|AppleClang$" AND
@@ -1001,6 +1030,14 @@ function(add_swift_target_library_single target name)
10011030
endif()
10021031

10031032
# Define availability macros.
1033+
deployment_version(DEPLOYMENT_VERSION
1034+
SDK "${SWIFTLIB_SINGLE_SDK}"
1035+
DEPLOYMENT_VERSION_OSX "${SWIFTLIB_SINGLE_DEPLOYMENT_VERSION_OSX}"
1036+
DEPLOYMENT_VERSION_IOS "${SWIFTLIB_SINGLE_DEPLOYMENT_VERSION_IOS}"
1037+
DEPLOYMENT_VERSION_TVOS "${SWIFTLIB_SINGLE_DEPLOYMENT_VERSION_TVOS}"
1038+
DEPLOYMENT_VERSION_WATCHOS "${SWIFTLIB_SINGLE_DEPLOYMENT_VERSION_WATCHOS}"
1039+
DEPLOYMENT_VERSION_XROS "${SWIFTLIB_SINGLE_DEPLOYMENT_VERSION_XROS}")
1040+
10041041
foreach(def ${SWIFT_STDLIB_AVAILABILITY_DEFINITIONS})
10051042
list(APPEND SWIFTLIB_SINGLE_SWIFT_COMPILE_FLAGS "-Xfrontend" "-define-availability" "-Xfrontend" "${def}")
10061043

@@ -1024,14 +1061,14 @@ function(add_swift_target_library_single target name)
10241061
string(REGEX MATCH "[0-9]+(\.[0-9]+)+" ios_version "${ios_platform_version}")
10251062
string(REGEX MATCH "macOS ([0-9]+(\.[0-9]+)+)" macos_platform_version "${def}")
10261063
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}")
1064+
if((NOT macos_version STREQUAL "9999" OR NOT ios_version STREQUAL "9999") AND (macos_version VERSION_GREATER "${DEPLOYMENT_VERSION}" OR ios_version VERSION_GREATER "${SWIFT_DARWIN_DEPLOYMENT_VERSION_MACCATALYST}"))
1065+
string(REGEX REPLACE ":.*" ": macOS ${DEPLOYMENT_VERSION}, iOS ${SWIFT_DARWIN_DEPLOYMENT_VERSION_MACCATALYST}" current "${current}")
10291066
endif()
10301067
else()
10311068
string(REGEX MATCH "${SWIFT_SDK_${SWIFTLIB_SINGLE_SDK}_AVAILABILITY_NAME} ([0-9]+(\.[0-9]+)+)" platform_version "${def}")
10321069
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}")
1070+
if(NOT version STREQUAL "9999" AND version VERSION_GREATER "${DEPLOYMENT_VERSION}")
1071+
string(REGEX REPLACE ":.*" ":${SWIFT_SDK_${SWIFTLIB_SINGLE_SDK}_AVAILABILITY_NAME} ${DEPLOYMENT_VERSION}" current "${current}")
10351072
endif()
10361073
endif()
10371074
endif()

0 commit comments

Comments
 (0)