Merge pull request #83464 from edymtt/edymtt/separate-deployment-version-for-tests

Test: allow different deployment target versions for tests on Darwin
This commit is contained in:
Eric Miotto
2025-08-04 12:13:30 -07:00
committed by GitHub
9 changed files with 111 additions and 16 deletions

View File

@@ -630,6 +630,17 @@ set(COMPATIBILITY_MINIMUM_DEPLOYMENT_VERSION_WATCHOS "2.0")
set(COMPATIBILITY_MINIMUM_DEPLOYMENT_VERSION_XROS "1.0")
set(COMPATIBILITY_MINIMUM_DEPLOYMENT_VERSION_MACCATALYST "13.1")
set(SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_OSX "${SWIFT_DARWIN_DEPLOYMENT_VERSION_OSX}" CACHE STRING
"Deployment target version for building macOS tests")
set(SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_IOS "${SWIFT_DARWIN_DEPLOYMENT_VERSION_IOS}" CACHE STRING
"Deployment target version for building iOS tests")
set(SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_TVOS "${SWIFT_DARWIN_DEPLOYMENT_VERSION_TVOS}" CACHE STRING
"Deployment target version for building tvOS tests")
set(SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_WATCHOS "${SWIFT_DARWIN_DEPLOYMENT_VERSION_WATCHOS}" CACHE STRING
"Deployment target version for building watchOS tests")
set(SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_XROS "${SWIFT_DARWIN_DEPLOYMENT_VERSION_XROS}" CACHE STRING
"Deployment target version for building visionOS tests")
#
# User-configurable debugging options.
#

View File

@@ -12,7 +12,8 @@ is_sdk_requested(OSX swift_build_osx)
if(swift_build_osx)
configure_sdk_darwin(
OSX "OS X" "${SWIFT_DARWIN_DEPLOYMENT_VERSION_OSX}"
macosx macosx macos macOS "${SUPPORTED_OSX_ARCHS}")
macosx macosx macos macOS "${SUPPORTED_OSX_ARCHS}"
"${SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_OSX}")
configure_target_variant(OSX-DA "OS X Debug+Asserts" OSX DA "Debug+Asserts")
configure_target_variant(OSX-RA "OS X Release+Asserts" OSX RA "Release+Asserts")
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"))
FREESTANDING "FREESTANDING" "${SWIFT_FREESTANDING_DEPLOYMENT_VERSION}"
"${SWIFT_FREESTANDING_SDK}"
"${SWIFT_FREESTANDING_TRIPLE_NAME}" "${SWIFT_FREESTANDING_MODULE_NAME}"
"${SWIFT_FREESTANDING_AVAILABILITY_NAME}" "${SWIFT_FREESTANDING_ARCHS}")
"${SWIFT_FREESTANDING_AVAILABILITY_NAME}" "${SWIFT_FREESTANDING_ARCHS}"
"${SWIFT_FREESTANDING_DEPLOYMENT_VERSION}")
set(SWIFT_SDK_FREESTANDING_LIB_SUBDIR "freestanding")
configure_target_variant(FREESTANDING-DA "FREESTANDING Debug+Asserts" FREESTANDING DA "Debug+Asserts")
configure_target_variant(FREESTANDING-RA "FREESTANDING Release+Asserts" FREESTANDING RA "Release+Asserts")
@@ -54,7 +56,8 @@ is_sdk_requested(IOS swift_build_ios)
if(swift_build_ios)
configure_sdk_darwin(
IOS "iOS" "${SWIFT_DARWIN_DEPLOYMENT_VERSION_IOS}"
iphoneos ios ios iOS "${SUPPORTED_IOS_ARCHS}")
iphoneos ios ios iOS "${SUPPORTED_IOS_ARCHS}"
"${SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_IOS}")
configure_target_variant(IOS-DA "iOS Debug+Asserts" IOS DA "Debug+Asserts")
configure_target_variant(IOS-RA "iOS Release+Asserts" IOS RA "Release+Asserts")
configure_target_variant(IOS-R "iOS Release" IOS R "Release")
@@ -65,7 +68,8 @@ if(swift_build_ios_simulator)
configure_sdk_darwin(
IOS_SIMULATOR "iOS Simulator" "${SWIFT_DARWIN_DEPLOYMENT_VERSION_IOS}"
iphonesimulator ios ios-simulator iOS
"${SUPPORTED_IOS_SIMULATOR_ARCHS}")
"${SUPPORTED_IOS_SIMULATOR_ARCHS}"
"${SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_IOS}")
configure_target_variant(
IOS_SIMULATOR-DA "iOS Debug+Asserts" IOS_SIMULATOR DA "Debug+Asserts")
configure_target_variant(
@@ -78,7 +82,8 @@ is_sdk_requested(TVOS swift_build_tvos)
if(swift_build_tvos)
configure_sdk_darwin(
TVOS "tvOS" "${SWIFT_DARWIN_DEPLOYMENT_VERSION_TVOS}"
appletvos tvos tvos tvOS "${SUPPORTED_TVOS_ARCHS}")
appletvos tvos tvos tvOS "${SUPPORTED_TVOS_ARCHS}"
"${SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_TVOS}")
configure_target_variant(TVOS-DA "tvOS Debug+Asserts" TVOS DA "Debug+Asserts")
configure_target_variant(TVOS-RA "tvOS Release+Asserts" TVOS RA "Release+Asserts")
configure_target_variant(TVOS-R "tvOS Release" TVOS R "Release")
@@ -89,7 +94,8 @@ if(swift_build_tvos_simulator)
configure_sdk_darwin(
TVOS_SIMULATOR "tvOS Simulator" "${SWIFT_DARWIN_DEPLOYMENT_VERSION_TVOS}"
appletvsimulator tvos tvos-simulator tvOS
"${SUPPORTED_TVOS_SIMULATOR_ARCHS}")
"${SUPPORTED_TVOS_SIMULATOR_ARCHS}"
"${SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_TVOS}")
configure_target_variant(
TVOS_SIMULATOR-DA "tvOS Debug+Asserts" TVOS_SIMULATOR DA "Debug+Asserts")
configure_target_variant(
@@ -102,7 +108,8 @@ is_sdk_requested(WATCHOS swift_build_watchos)
if(swift_build_watchos)
configure_sdk_darwin(
WATCHOS "watchOS" "${SWIFT_DARWIN_DEPLOYMENT_VERSION_WATCHOS}"
watchos watchos watchos watchOS "${SUPPORTED_WATCHOS_ARCHS}")
watchos watchos watchos watchOS "${SUPPORTED_WATCHOS_ARCHS}"
"${SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_WATCHOS}")
configure_target_variant(WATCHOS-DA "watchOS Debug+Asserts" WATCHOS DA "Debug+Asserts")
configure_target_variant(WATCHOS-RA "watchOS Release+Asserts" WATCHOS RA "Release+Asserts")
configure_target_variant(WATCHOS-R "watchOS Release" WATCHOS R "Release")
@@ -113,7 +120,8 @@ if(swift_build_watchos_simulator)
configure_sdk_darwin(
WATCHOS_SIMULATOR "watchOS Simulator" "${SWIFT_DARWIN_DEPLOYMENT_VERSION_WATCHOS}"
watchsimulator watchos watchos-simulator watchOS
"${SUPPORTED_WATCHOS_SIMULATOR_ARCHS}")
"${SUPPORTED_WATCHOS_SIMULATOR_ARCHS}"
"${SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_WATCHOS}")
configure_target_variant(WATCHOS_SIMULATOR-DA "watchOS Debug+Asserts" WATCHOS_SIMULATOR DA "Debug+Asserts")
configure_target_variant(WATCHOS_SIMULATOR-RA "watchOS Release+Asserts" WATCHOS_SIMULATOR RA "Release+Asserts")
configure_target_variant(WATCHOS_SIMULATOR-R "watchOS Release" WATCHOS_SIMULATOR R "Release")
@@ -123,7 +131,8 @@ is_sdk_requested(XROS swift_build_xros)
if(swift_build_xros)
configure_sdk_darwin(
XROS "xrOS" "${SWIFT_DARWIN_DEPLOYMENT_VERSION_XROS}"
xros xros xros visionOS "${SUPPORTED_XROS_ARCHS}")
xros xros xros visionOS "${SUPPORTED_XROS_ARCHS}"
"${SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_XROS}")
configure_target_variant(XROS-DA "xrOS Debug+Asserts" XROS DA "Debug+Asserts")
configure_target_variant(XROS-RA "xrOS Release+Asserts" XROS RA "Release+Asserts")
configure_target_variant(XROS-R "xrOS Release" XROS R "Release")
@@ -134,7 +143,8 @@ if(swift_build_xros_simulator)
configure_sdk_darwin(
XROS_SIMULATOR "xrOS Simulator" "${SWIFT_DARWIN_DEPLOYMENT_VERSION_XROS}"
xrsimulator xros xros-simulator visionOS
"${SUPPORTED_XROS_SIMULATOR_ARCHS}")
"${SUPPORTED_XROS_SIMULATOR_ARCHS}"
"${SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_XROS}")
configure_target_variant(
XROS_SIMULATOR-DA "xrOS Simulator Debug+Asserts" XROS_SIMULATOR DA "Debug+Asserts")

View File

@@ -32,6 +32,7 @@ function(_report_sdk prefix)
message(STATUS " Version: ${SWIFT_SDK_${prefix}_VERSION}")
message(STATUS " Build number: ${SWIFT_SDK_${prefix}_BUILD_NUMBER}")
message(STATUS " Deployment version: ${SWIFT_SDK_${prefix}_DEPLOYMENT_VERSION}")
message(STATUS " Deployment version for tests: ${SWIFT_SDK_${prefix}_TEST_DEPLOYMENT_VERSION}")
message(STATUS " Triple name: ${SWIFT_SDK_${prefix}_TRIPLE_NAME}")
message(STATUS " Simulator: ${SWIFT_SDK_${prefix}_IS_SIMULATOR}")
endif()
@@ -138,6 +139,7 @@ endfunction()
# triple_name # The name used in Swift's -triple
# availability_name # The name used in Swift's @availability
# architectures # A list of architectures this SDK supports
# test_deployment_version # Deployment versions to be used for tests
# )
#
# Sadly there are three OS naming conventions.
@@ -170,7 +172,8 @@ endfunction()
#
macro(configure_sdk_darwin
prefix name deployment_version xcrun_name
triple_name module_name availability_name architectures)
triple_name module_name availability_name architectures
test_deployment_version)
# Note: this has to be implemented as a macro because it sets global
# variables.
@@ -202,6 +205,11 @@ macro(configure_sdk_darwin
# Set other variables.
set(SWIFT_SDK_${prefix}_NAME "${name}")
set(SWIFT_SDK_${prefix}_DEPLOYMENT_VERSION "${deployment_version}")
if(NOT "${test_deployment_version}" STREQUAL "")
set(SWIFT_SDK_${prefix}_TEST_DEPLOYMENT_VERSION "${test_deployment_version}")
else()
set(SWIFT_SDK_${prefix}_TEST_DEPLOYMENT_VERSION "${deployment_version}")
endif()
set(SWIFT_SDK_${prefix}_LIB_SUBDIR "${xcrun_name}")
set(SWIFT_SDK_${prefix}_TRIPLE_NAME "${triple_name}")
set(SWIFT_SDK_${prefix}_AVAILABILITY_NAME "${availability_name}")

View File

@@ -30,7 +30,7 @@ function(get_swift_test_versioned_target_triple variant_triple_out_var sdk arch
# Use the macCatalyst target triple and compiler resources for the iOS-like build flavor.
set(variant_triple "${arch}-apple-ios13.1-macabi")
else()
get_versioned_target_triple(variant_triple ${sdk} ${arch} "${SWIFT_SDK_${sdk}_DEPLOYMENT_VERSION}")
get_versioned_target_triple(variant_triple ${sdk} ${arch} "${SWIFT_SDK_${sdk}_TEST_DEPLOYMENT_VERSION}")
endif()
set(${variant_triple_out_var} "${variant_triple}" PARENT_SCOPE)

View File

@@ -549,6 +549,27 @@ def create_argument_parser():
metavar='MAJOR.MINOR',
help='minimum deployment target version for xrOS')
option('--darwin-test-deployment-version-osx', store,
default=defaults.DARWIN_DEPLOYMENT_VERSION_OSX,
metavar='MAJOR.MINOR',
help='deployment target version to use when building macOS tests')
option('--darwin-test-deployment-version-ios', store,
default=defaults.DARWIN_DEPLOYMENT_VERSION_IOS,
metavar='MAJOR.MINOR',
help='deployment target version to use when building iOS tests')
option('--darwin-test-deployment-version-tvos', store,
default=defaults.DARWIN_DEPLOYMENT_VERSION_TVOS,
metavar='MAJOR.MINOR',
help='deployment target version to use when building tvOS tests')
option('--darwin-test-deployment-version-watchos', store,
default=defaults.DARWIN_DEPLOYMENT_VERSION_WATCHOS,
metavar='MAJOR.MINOR',
help='deployment target version to use when building watchOS tests')
option('--darwin-test-deployment-version-xros', store,
default=defaults.DARWIN_DEPLOYMENT_VERSION_XROS,
metavar='MAJOR.MINOR',
help='deployment target version to use when building visionOS tests')
option('--extra-cmake-options', append,
type=argparse.ShellSplitType(),
help='Pass through extra options to CMake in the form of comma '

View File

@@ -169,6 +169,16 @@ EXPECTED_DEFAULTS = {
defaults.DARWIN_DEPLOYMENT_VERSION_WATCHOS,
'darwin_deployment_version_xros':
defaults.DARWIN_DEPLOYMENT_VERSION_XROS,
'darwin_test_deployment_version_osx':
defaults.DARWIN_DEPLOYMENT_VERSION_OSX,
'darwin_test_deployment_version_ios':
defaults.DARWIN_DEPLOYMENT_VERSION_IOS,
'darwin_test_deployment_version_tvos':
defaults.DARWIN_DEPLOYMENT_VERSION_TVOS,
'darwin_test_deployment_version_watchos':
defaults.DARWIN_DEPLOYMENT_VERSION_WATCHOS,
'darwin_test_deployment_version_xros':
defaults.DARWIN_DEPLOYMENT_VERSION_XROS,
'darwin_symroot_path_filters': [],
'darwin_xcrun_toolchain': None,
'distcc': False,
@@ -805,6 +815,11 @@ EXPECTED_OPTIONS = [
StrOption('--darwin-deployment-version-tvos'),
StrOption('--darwin-deployment-version-watchos'),
StrOption('--darwin-deployment-version-xros'),
StrOption('--darwin-test-deployment-version-osx'),
StrOption('--darwin-test-deployment-version-ios'),
StrOption('--darwin-test-deployment-version-tvos'),
StrOption('--darwin-test-deployment-version-watchos'),
StrOption('--darwin-test-deployment-version-xros'),
DisableOption('--skip-test-xros-host', dest='test_xros_host'),
DisableOption('--skip-test-xros', dest='test_xros'),
DisableOption('--skip-test-xros-simulator', dest='test_xros_simulator'),

View File

@@ -106,6 +106,9 @@ class Swift(product.Product):
self.cmake_options.extend(
self._enable_new_runtime_build)
self.cmake_options.extend(
self._darwin_test_deployment_versions)
self.cmake_options.extend_raw(self.args.extra_swift_cmake_options)
@classmethod
@@ -307,6 +310,19 @@ updated without updating swift.py?")
return [('SWIFT_ENABLE_NEW_RUNTIME_BUILD:BOOL',
self.args.enable_new_runtime_build)]
@property
def _darwin_test_deployment_versions(self):
return [('SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_OSX:STRING',
self.args.darwin_test_deployment_version_osx),
('SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_IOS:STRING',
self.args.darwin_test_deployment_version_ios),
('SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_TVOS:STRING',
self.args.darwin_test_deployment_version_tvos),
('SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_WATCHOS:STRING',
self.args.darwin_test_deployment_version_watchos),
('SWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_XROS:STRING',
self.args.darwin_test_deployment_version_xros)]
def _handle_swift_debuginfo_non_lto_args(self):
if ('swift_debuginfo_non_lto_args' not in self.args
or self.args.swift_debuginfo_non_lto_args is None):

View File

@@ -74,7 +74,12 @@ class SwiftTestCase(unittest.TestCase):
build_swift_private_stdlib=True,
swift_tools_ld64_lto_codegen_only_for_supporting_targets=False,
build_stdlib_docs=False,
enable_new_runtime_build=False)
enable_new_runtime_build=False,
darwin_test_deployment_version_osx="10.9",
darwin_test_deployment_version_ios="15.0",
darwin_test_deployment_version_tvos="14.0",
darwin_test_deployment_version_watchos="6.0",
darwin_test_deployment_version_xros="1.0")
# Setup shell
shell.dry_run = True
@@ -126,6 +131,11 @@ class SwiftTestCase(unittest.TestCase):
'-USWIFT_DEBUGINFO_NON_LTO_ARGS',
'-DSWIFT_STDLIB_BUILD_SYMBOL_GRAPHS:BOOL=FALSE',
'-DSWIFT_ENABLE_NEW_RUNTIME_BUILD:BOOL=FALSE',
'-DSWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_OSX:STRING=10.9',
'-DSWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_IOS:STRING=15.0',
'-DSWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_TVOS:STRING=14.0',
'-DSWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_WATCHOS:STRING=6.0',
'-DSWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_XROS:STRING=1.0',
'-DHELLO=YES',
]
self.assertEqual(set(swift.cmake_options), set(expected))
@@ -163,6 +173,11 @@ class SwiftTestCase(unittest.TestCase):
'-USWIFT_DEBUGINFO_NON_LTO_ARGS',
'-DSWIFT_STDLIB_BUILD_SYMBOL_GRAPHS:BOOL=FALSE',
'-DSWIFT_ENABLE_NEW_RUNTIME_BUILD:BOOL=FALSE',
'-DSWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_OSX:STRING=10.9',
'-DSWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_IOS:STRING=15.0',
'-DSWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_TVOS:STRING=14.0',
'-DSWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_WATCHOS:STRING=6.0',
'-DSWIFT_DARWIN_TEST_DEPLOYMENT_VERSION_XROS:STRING=1.0',
'-DHELLO=YES',
]
self.assertEqual(set(swift.cmake_options), set(flags_set))

View File

@@ -53,9 +53,8 @@ class ToolchainTestCase(unittest.TestCase):
tc = host_toolchain()
# CMake
self.assertIsNotNone(tc.cmake)
self.assertTrue(
os.path.basename(tc.cmake).startswith('cmake'))
self.assertTrue(tc.cmake is None or
os.path.basename(tc.cmake).startswith('cmake'))
# Ninja
self.assertTrue(tc.ninja is None or