Skip to content

Commit 0869919

Browse files
committed
Test: allow different deployment target versions for tests on Darwin
Currently we are using the same versions we use to build compiler and standard library. This is an unnecessary coupling especially when testing the generation of backdeployed executables for macOS -- here we have interest in being able to run the tests on previous OSes, not the compiler itself. To support this, add new `--darwin-test-deployment-version-<platform>` flags to build-script, which by default take the same value as the matching `--darwin-deployment-version-<platform>` ones. Addresses rdar://156724078
1 parent 9b1292d commit 0869919

File tree

8 files changed

+109
-13
lines changed

8 files changed

+109
-13
lines changed

CMakeLists.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -630,6 +630,17 @@ set(COMPATIBILITY_MINIMUM_DEPLOYMENT_VERSION_WATCHOS "2.0")
630630
set(COMPATIBILITY_MINIMUM_DEPLOYMENT_VERSION_XROS "1.0")
631631
set(COMPATIBILITY_MINIMUM_DEPLOYMENT_VERSION_MACCATALYST "13.1")
632632

633+
set(SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_OSX "${SWIFT_DARWIN_DEPLOYMENT_VERSION_OSX}" CACHE STRING
634+
"Deployment target version for building macOS tests")
635+
set(SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_IOS "${SWIFT_DARWIN_DEPLOYMENT_VERSION_IOS}" CACHE STRING
636+
"Deployment target version for building iOS tests")
637+
set(SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_TVOS "${SWIFT_DARWIN_DEPLOYMENT_VERSION_TVOS}" CACHE STRING
638+
"Deployment target version for building tvOS tests")
639+
set(SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_WATCHOS "${SWIFT_DARWIN_DEPLOYMENT_VERSION_WATCHOS}" CACHE STRING
640+
"Deployment target version for building watchOS tests")
641+
set(SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_XROS "${SWIFT_DARWIN_DEPLOYMENT_VERSION_XROS}" CACHE STRING
642+
"Deployment target version for building visionOS tests")
643+
633644
#
634645
# User-configurable debugging options.
635646
#

cmake/modules/DarwinSDKs.cmake

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ is_sdk_requested(OSX swift_build_osx)
1212
if(swift_build_osx)
1313
configure_sdk_darwin(
1414
OSX "OS X" "${SWIFT_DARWIN_DEPLOYMENT_VERSION_OSX}"
15-
macosx macosx macos macOS "${SUPPORTED_OSX_ARCHS}")
15+
macosx macosx macos macOS "${SUPPORTED_OSX_ARCHS}"
16+
"${SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_OSX}")
1617
configure_target_variant(OSX-DA "OS X Debug+Asserts" OSX DA "Debug+Asserts")
1718
configure_target_variant(OSX-RA "OS X Release+Asserts" OSX RA "Release+Asserts")
1819
configure_target_variant(OSX-R "OS X Release" OSX R "Release")
@@ -36,7 +37,8 @@ if(swift_build_freestanding AND (SWIFT_FREESTANDING_FLAVOR STREQUAL "apple"))
3637
FREESTANDING "FREESTANDING" "${SWIFT_FREESTANDING_DEPLOYMENT_VERSION}"
3738
"${SWIFT_FREESTANDING_SDK}"
3839
"${SWIFT_FREESTANDING_TRIPLE_NAME}" "${SWIFT_FREESTANDING_MODULE_NAME}"
39-
"${SWIFT_FREESTANDING_AVAILABILITY_NAME}" "${SWIFT_FREESTANDING_ARCHS}")
40+
"${SWIFT_FREESTANDING_AVAILABILITY_NAME}" "${SWIFT_FREESTANDING_ARCHS}"
41+
"${SWIFT_FREESTANDING_DEPLOYMENT_VERSION}")
4042
set(SWIFT_SDK_FREESTANDING_LIB_SUBDIR "freestanding")
4143
configure_target_variant(FREESTANDING-DA "FREESTANDING Debug+Asserts" FREESTANDING DA "Debug+Asserts")
4244
configure_target_variant(FREESTANDING-RA "FREESTANDING Release+Asserts" FREESTANDING RA "Release+Asserts")
@@ -54,7 +56,8 @@ is_sdk_requested(IOS swift_build_ios)
5456
if(swift_build_ios)
5557
configure_sdk_darwin(
5658
IOS "iOS" "${SWIFT_DARWIN_DEPLOYMENT_VERSION_IOS}"
57-
iphoneos ios ios iOS "${SUPPORTED_IOS_ARCHS}")
59+
iphoneos ios ios iOS "${SUPPORTED_IOS_ARCHS}"
60+
"${SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_IOS}")
5861
configure_target_variant(IOS-DA "iOS Debug+Asserts" IOS DA "Debug+Asserts")
5962
configure_target_variant(IOS-RA "iOS Release+Asserts" IOS RA "Release+Asserts")
6063
configure_target_variant(IOS-R "iOS Release" IOS R "Release")
@@ -65,7 +68,8 @@ if(swift_build_ios_simulator)
6568
configure_sdk_darwin(
6669
IOS_SIMULATOR "iOS Simulator" "${SWIFT_DARWIN_DEPLOYMENT_VERSION_IOS}"
6770
iphonesimulator ios ios-simulator iOS
68-
"${SUPPORTED_IOS_SIMULATOR_ARCHS}")
71+
"${SUPPORTED_IOS_SIMULATOR_ARCHS}"
72+
"${SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_IOS}")
6973
configure_target_variant(
7074
IOS_SIMULATOR-DA "iOS Debug+Asserts" IOS_SIMULATOR DA "Debug+Asserts")
7175
configure_target_variant(
@@ -78,7 +82,8 @@ is_sdk_requested(TVOS swift_build_tvos)
7882
if(swift_build_tvos)
7983
configure_sdk_darwin(
8084
TVOS "tvOS" "${SWIFT_DARWIN_DEPLOYMENT_VERSION_TVOS}"
81-
appletvos tvos tvos tvOS "${SUPPORTED_TVOS_ARCHS}")
85+
appletvos tvos tvos tvOS "${SUPPORTED_TVOS_ARCHS}"
86+
"${SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_TVOS}")
8287
configure_target_variant(TVOS-DA "tvOS Debug+Asserts" TVOS DA "Debug+Asserts")
8388
configure_target_variant(TVOS-RA "tvOS Release+Asserts" TVOS RA "Release+Asserts")
8489
configure_target_variant(TVOS-R "tvOS Release" TVOS R "Release")
@@ -89,7 +94,8 @@ if(swift_build_tvos_simulator)
8994
configure_sdk_darwin(
9095
TVOS_SIMULATOR "tvOS Simulator" "${SWIFT_DARWIN_DEPLOYMENT_VERSION_TVOS}"
9196
appletvsimulator tvos tvos-simulator tvOS
92-
"${SUPPORTED_TVOS_SIMULATOR_ARCHS}")
97+
"${SUPPORTED_TVOS_SIMULATOR_ARCHS}"
98+
"${SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_TVOS}")
9399
configure_target_variant(
94100
TVOS_SIMULATOR-DA "tvOS Debug+Asserts" TVOS_SIMULATOR DA "Debug+Asserts")
95101
configure_target_variant(
@@ -102,7 +108,8 @@ is_sdk_requested(WATCHOS swift_build_watchos)
102108
if(swift_build_watchos)
103109
configure_sdk_darwin(
104110
WATCHOS "watchOS" "${SWIFT_DARWIN_DEPLOYMENT_VERSION_WATCHOS}"
105-
watchos watchos watchos watchOS "${SUPPORTED_WATCHOS_ARCHS}")
111+
watchos watchos watchos watchOS "${SUPPORTED_WATCHOS_ARCHS}"
112+
"${SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_WATCHOS}")
106113
configure_target_variant(WATCHOS-DA "watchOS Debug+Asserts" WATCHOS DA "Debug+Asserts")
107114
configure_target_variant(WATCHOS-RA "watchOS Release+Asserts" WATCHOS RA "Release+Asserts")
108115
configure_target_variant(WATCHOS-R "watchOS Release" WATCHOS R "Release")
@@ -113,7 +120,8 @@ if(swift_build_watchos_simulator)
113120
configure_sdk_darwin(
114121
WATCHOS_SIMULATOR "watchOS Simulator" "${SWIFT_DARWIN_DEPLOYMENT_VERSION_WATCHOS}"
115122
watchsimulator watchos watchos-simulator watchOS
116-
"${SUPPORTED_WATCHOS_SIMULATOR_ARCHS}")
123+
"${SUPPORTED_WATCHOS_SIMULATOR_ARCHS}"
124+
"${SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_WATCHOS}")
117125
configure_target_variant(WATCHOS_SIMULATOR-DA "watchOS Debug+Asserts" WATCHOS_SIMULATOR DA "Debug+Asserts")
118126
configure_target_variant(WATCHOS_SIMULATOR-RA "watchOS Release+Asserts" WATCHOS_SIMULATOR RA "Release+Asserts")
119127
configure_target_variant(WATCHOS_SIMULATOR-R "watchOS Release" WATCHOS_SIMULATOR R "Release")
@@ -123,7 +131,8 @@ is_sdk_requested(XROS swift_build_xros)
123131
if(swift_build_xros)
124132
configure_sdk_darwin(
125133
XROS "xrOS" "${SWIFT_DARWIN_DEPLOYMENT_VERSION_XROS}"
126-
xros xros xros visionOS "${SUPPORTED_XROS_ARCHS}")
134+
xros xros xros visionOS "${SUPPORTED_XROS_ARCHS}"
135+
"${SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_XROS}")
127136
configure_target_variant(XROS-DA "xrOS Debug+Asserts" XROS DA "Debug+Asserts")
128137
configure_target_variant(XROS-RA "xrOS Release+Asserts" XROS RA "Release+Asserts")
129138
configure_target_variant(XROS-R "xrOS Release" XROS R "Release")
@@ -134,7 +143,8 @@ if(swift_build_xros_simulator)
134143
configure_sdk_darwin(
135144
XROS_SIMULATOR "xrOS Simulator" "${SWIFT_DARWIN_DEPLOYMENT_VERSION_XROS}"
136145
xrsimulator xros xros-simulator visionOS
137-
"${SUPPORTED_XROS_SIMULATOR_ARCHS}")
146+
"${SUPPORTED_XROS_SIMULATOR_ARCHS}"
147+
"${SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_XROS}")
138148

139149
configure_target_variant(
140150
XROS_SIMULATOR-DA "xrOS Simulator Debug+Asserts" XROS_SIMULATOR DA "Debug+Asserts")

cmake/modules/SwiftConfigureSDK.cmake

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ function(_report_sdk prefix)
3232
message(STATUS " Version: ${SWIFT_SDK_${prefix}_VERSION}")
3333
message(STATUS " Build number: ${SWIFT_SDK_${prefix}_BUILD_NUMBER}")
3434
message(STATUS " Deployment version: ${SWIFT_SDK_${prefix}_DEPLOYMENT_VERSION}")
35+
message(STATUS " Deployment version for tests: ${SWIFT_SDK_${prefix}_TEST_DEPLOYMENT_VERSION}")
3536
message(STATUS " Triple name: ${SWIFT_SDK_${prefix}_TRIPLE_NAME}")
3637
message(STATUS " Simulator: ${SWIFT_SDK_${prefix}_IS_SIMULATOR}")
3738
endif()
@@ -138,6 +139,7 @@ endfunction()
138139
# triple_name # The name used in Swift's -triple
139140
# availability_name # The name used in Swift's @availability
140141
# architectures # A list of architectures this SDK supports
142+
# test_deployment_version # Deployment versions to be used for tests
141143
# )
142144
#
143145
# Sadly there are three OS naming conventions.
@@ -170,7 +172,8 @@ endfunction()
170172
#
171173
macro(configure_sdk_darwin
172174
prefix name deployment_version xcrun_name
173-
triple_name module_name availability_name architectures)
175+
triple_name module_name availability_name architectures
176+
test_deployment_version)
174177
# Note: this has to be implemented as a macro because it sets global
175178
# variables.
176179

@@ -202,6 +205,11 @@ macro(configure_sdk_darwin
202205
# Set other variables.
203206
set(SWIFT_SDK_${prefix}_NAME "${name}")
204207
set(SWIFT_SDK_${prefix}_DEPLOYMENT_VERSION "${deployment_version}")
208+
if(NOT "${test_deployment_version}" STREQUAL "")
209+
set(SWIFT_SDK_${prefix}_TEST_DEPLOYMENT_VERSION "${test_deployment_version}")
210+
else()
211+
set(SWIFT_SDK_${prefix}_TEST_DEPLOYMENT_VERSION "${deployment_version}")
212+
endif()
205213
set(SWIFT_SDK_${prefix}_LIB_SUBDIR "${xcrun_name}")
206214
set(SWIFT_SDK_${prefix}_TRIPLE_NAME "${triple_name}")
207215
set(SWIFT_SDK_${prefix}_AVAILABILITY_NAME "${availability_name}")

test/cmake/modules/SwiftTestUtils.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ function(get_swift_test_versioned_target_triple variant_triple_out_var sdk arch
3030
# Use the macCatalyst target triple and compiler resources for the iOS-like build flavor.
3131
set(variant_triple "${arch}-apple-ios13.1-macabi")
3232
else()
33-
get_versioned_target_triple(variant_triple ${sdk} ${arch} "${SWIFT_SDK_${sdk}_DEPLOYMENT_VERSION}")
33+
get_versioned_target_triple(variant_triple ${sdk} ${arch} "${SWIFT_SDK_${sdk}_TEST_DEPLOYMENT_VERSION}")
3434
endif()
3535

3636
set(${variant_triple_out_var} "${variant_triple}" PARENT_SCOPE)

utils/build_swift/build_swift/driver_arguments.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -549,6 +549,27 @@ def create_argument_parser():
549549
metavar='MAJOR.MINOR',
550550
help='minimum deployment target version for xrOS')
551551

552+
option('--darwin-test-deployment-version-osx', store,
553+
default=defaults.DARWIN_DEPLOYMENT_VERSION_OSX,
554+
metavar='MAJOR.MINOR',
555+
help='deployment target version to use when building macOS tests')
556+
option('--darwin-test-deployment-version-ios', store,
557+
default=defaults.DARWIN_DEPLOYMENT_VERSION_IOS,
558+
metavar='MAJOR.MINOR',
559+
help='deployment target version to use when building iOS tests')
560+
option('--darwin-test-deployment-version-tvos', store,
561+
default=defaults.DARWIN_DEPLOYMENT_VERSION_TVOS,
562+
metavar='MAJOR.MINOR',
563+
help='deployment target version to use when building tvOS tests')
564+
option('--darwin-test-deployment-version-watchos', store,
565+
default=defaults.DARWIN_DEPLOYMENT_VERSION_WATCHOS,
566+
metavar='MAJOR.MINOR',
567+
help='deployment target version to use when building watchOS tests')
568+
option('--darwin-test-deployment-version-xros', store,
569+
default=defaults.DARWIN_DEPLOYMENT_VERSION_XROS,
570+
metavar='MAJOR.MINOR',
571+
help='deployment target version to use when building visionOS tests')
572+
552573
option('--extra-cmake-options', append,
553574
type=argparse.ShellSplitType(),
554575
help='Pass through extra options to CMake in the form of comma '

utils/build_swift/tests/expected_options.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,16 @@
169169
defaults.DARWIN_DEPLOYMENT_VERSION_WATCHOS,
170170
'darwin_deployment_version_xros':
171171
defaults.DARWIN_DEPLOYMENT_VERSION_XROS,
172+
'darwin_test_deployment_version_osx':
173+
defaults.DARWIN_DEPLOYMENT_VERSION_OSX,
174+
'darwin_test_deployment_version_ios':
175+
defaults.DARWIN_DEPLOYMENT_VERSION_IOS,
176+
'darwin_test_deployment_version_tvos':
177+
defaults.DARWIN_DEPLOYMENT_VERSION_TVOS,
178+
'darwin_test_deployment_version_watchos':
179+
defaults.DARWIN_DEPLOYMENT_VERSION_WATCHOS,
180+
'darwin_test_deployment_version_xros':
181+
defaults.DARWIN_DEPLOYMENT_VERSION_XROS,
172182
'darwin_symroot_path_filters': [],
173183
'darwin_xcrun_toolchain': None,
174184
'distcc': False,
@@ -805,6 +815,11 @@ class BuildScriptImplOption(_BaseOption):
805815
StrOption('--darwin-deployment-version-tvos'),
806816
StrOption('--darwin-deployment-version-watchos'),
807817
StrOption('--darwin-deployment-version-xros'),
818+
StrOption('--darwin-test-deployment-version-osx'),
819+
StrOption('--darwin-test-deployment-version-ios'),
820+
StrOption('--darwin-test-deployment-version-tvos'),
821+
StrOption('--darwin-test-deployment-version-watchos'),
822+
StrOption('--darwin-test-deployment-version-xros'),
808823
DisableOption('--skip-test-xros-host', dest='test_xros_host'),
809824
DisableOption('--skip-test-xros', dest='test_xros'),
810825
DisableOption('--skip-test-xros-simulator', dest='test_xros_simulator'),

utils/swift_build_support/swift_build_support/products/swift.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,9 @@ def __init__(self, args, toolchain, source_dir, build_dir):
106106
self.cmake_options.extend(
107107
self._enable_new_runtime_build)
108108

109+
self.cmake_options.extend(
110+
self._darwin_test_deployment_versions)
111+
109112
self.cmake_options.extend_raw(self.args.extra_swift_cmake_options)
110113

111114
@classmethod
@@ -307,6 +310,19 @@ def _enable_new_runtime_build(self):
307310
return [('SWIFT_ENABLE_NEW_RUNTIME_BUILD:BOOL',
308311
self.args.enable_new_runtime_build)]
309312

313+
@property
314+
def _darwin_test_deployment_versions(self):
315+
return [('SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_OSX:STRING',
316+
self.args.darwin_test_deployment_version_osx),
317+
('SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_IOS:STRING',
318+
self.args.darwin_test_deployment_version_ios),
319+
('SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_TVOS:STRING',
320+
self.args.darwin_test_deployment_version_tvos),
321+
('SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_WATCHOS:STRING',
322+
self.args.darwin_test_deployment_version_watchos),
323+
('SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_XROS:STRING',
324+
self.args.darwin_test_deployment_version_xros)]
325+
310326
def _handle_swift_debuginfo_non_lto_args(self):
311327
if ('swift_debuginfo_non_lto_args' not in self.args
312328
or self.args.swift_debuginfo_non_lto_args is None):

utils/swift_build_support/tests/products/test_swift.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,12 @@ def setUp(self):
7474
build_swift_private_stdlib=True,
7575
swift_tools_ld64_lto_codegen_only_for_supporting_targets=False,
7676
build_stdlib_docs=False,
77-
enable_new_runtime_build=False)
77+
enable_new_runtime_build=False,
78+
darwin_test_deployment_version_osx="10.9",
79+
darwin_test_deployment_version_ios="15.0",
80+
darwin_test_deployment_version_tvos="14.0",
81+
darwin_test_deployment_version_watchos="6.0",
82+
darwin_test_deployment_version_xros="1.0")
7883

7984
# Setup shell
8085
shell.dry_run = True
@@ -126,6 +131,11 @@ def test_by_default_no_cmake_options(self):
126131
'-USWIFT_DEBUGINFO_NON_LTO_ARGS',
127132
'-DSWIFT_STDLIB_BUILD_SYMBOL_GRAPHS:BOOL=FALSE',
128133
'-DSWIFT_ENABLE_NEW_RUNTIME_BUILD:BOOL=FALSE',
134+
'-DSWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_OSX:STRING=10.9',
135+
'-DSWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_IOS:STRING=15.0',
136+
'-DSWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_TVOS:STRING=14.0',
137+
'-DSWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_WATCHOS:STRING=6.0',
138+
'-DSWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_XROS:STRING=1.0',
129139
'-DHELLO=YES',
130140
]
131141
self.assertEqual(set(swift.cmake_options), set(expected))
@@ -163,6 +173,11 @@ def test_swift_runtime_tsan(self):
163173
'-USWIFT_DEBUGINFO_NON_LTO_ARGS',
164174
'-DSWIFT_STDLIB_BUILD_SYMBOL_GRAPHS:BOOL=FALSE',
165175
'-DSWIFT_ENABLE_NEW_RUNTIME_BUILD:BOOL=FALSE',
176+
'-DSWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_OSX:STRING=10.9',
177+
'-DSWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_IOS:STRING=15.0',
178+
'-DSWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_TVOS:STRING=14.0',
179+
'-DSWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_WATCHOS:STRING=6.0',
180+
'-DSWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_XROS:STRING=1.0',
166181
'-DHELLO=YES',
167182
]
168183
self.assertEqual(set(swift.cmake_options), set(flags_set))

0 commit comments

Comments
 (0)