diff --git a/utils/build-presets.ini b/utils/build-presets.ini index dbdcc7e48506b..5ba48a09f2c5c 100644 --- a/utils/build-presets.ini +++ b/utils/build-presets.ini @@ -383,6 +383,8 @@ sourcekit-lsp # swift-inspect swiftsyntax swiftformat +swift-testing +swift-testing-macros skstresstester @@ -406,6 +408,8 @@ install-swiftpm install-swift-driver install-swiftsyntax install-swiftformat +install-swift-testing +install-swift-testing-macros [preset: buildbot_incremental,tools=RA,stdlib=RA,apple_silicon] mixin-preset=buildbot_incremental,tools=RA,stdlib=RA @@ -839,6 +843,8 @@ mixin-preset= llbuild swiftpm swift-driver +swift-testing +swift-testing-macros xctest swiftdocc swiftformat @@ -852,6 +858,8 @@ install-llbuild install-swiftpm install-swift-driver install-swiftsyntax +install-swift-testing +install-swift-testing-macros install-xctest install-prefix=/usr install-sourcekit-lsp @@ -1180,12 +1188,15 @@ llbuild swiftpm swift-driver xctest +swift-testing +swift-testing-macros foundation libdispatch swiftsyntax swiftformat indexstore-db sourcekit-lsp + install-llvm install-static-linux-config install-swift @@ -1196,6 +1207,8 @@ install-swiftsyntax install-foundation install-libdispatch install-xctest +install-swift-testing +install-swift-testing-macros install-swiftformat [preset: buildbot_incremental_linux,long_test] @@ -1319,6 +1332,8 @@ swift-driver # Failing to build in CI: rdar://78408440 # swift-inspect swiftsyntax +swift-testing +swift-testing-macros swiftformat playgroundsupport indexstore-db @@ -1363,6 +1378,8 @@ install-llbuild install-swiftpm install-swift-driver install-swiftsyntax +install-swift-testing +install-swift-testing-macros install-playgroundsupport install-sourcekit-lsp install-swiftformat @@ -1686,6 +1703,8 @@ swiftpm # swift-inspect swift-driver swiftsyntax +swift-testing +swift-testing-macros swiftformat swiftdocc @@ -1705,6 +1724,8 @@ install-llbuild install-swiftpm install-swift-driver install-swiftsyntax +install-swift-testing +install-swift-testing-macros install-swiftdocc install-swiftformat diff --git a/utils/build.ps1 b/utils/build.ps1 index 2b441dc6633dd..3a2c50f43a1f6 100644 --- a/utils/build.ps1 +++ b/utils/build.ps1 @@ -215,6 +215,7 @@ $ArchX64 = @{ PlatformInstallRoot = "$BinaryCache\x64\Windows.platform"; SDKInstallRoot = "$BinaryCache\x64\Windows.platform\Developer\SDKs\Windows.sdk"; XCTestInstallRoot = "$BinaryCache\x64\Windows.platform\Developer\Library\XCTest-development"; + SwiftTestingInstallRoot = "$BinaryCache\x64\Windows.platform\Developer\Library\Testing-development"; ToolchainInstallRoot = "$BinaryCache\x64\toolchains\$ProductVersion+Asserts"; } @@ -230,6 +231,7 @@ $ArchX86 = @{ PlatformInstallRoot = "$BinaryCache\x86\Windows.platform"; SDKInstallRoot = "$BinaryCache\x86\Windows.platform\Developer\SDKs\Windows.sdk"; XCTestInstallRoot = "$BinaryCache\x86\Windows.platform\Developer\Library\XCTest-development"; + SwiftTestingInstallRoot = "$BinaryCache\x86\Windows.platform\Developer\Library\Testing-development"; } $ArchARM64 = @{ @@ -245,6 +247,7 @@ $ArchARM64 = @{ SDKInstallRoot = "$BinaryCache\arm64\Windows.platform\Developer\SDKs\Windows.sdk"; XCTestInstallRoot = "$BinaryCache\arm64\Windows.platform\Developer\Library\XCTest-development"; ToolchainInstallRoot = "$BinaryCache\arm64\toolchains\$ProductVersion+Asserts"; + SwiftTestingInstallRoot = "$BinaryCache\arm64\Windows.platform\Developer\Library\Testing-development"; } $AndroidARM64 = @{ @@ -258,6 +261,7 @@ $AndroidARM64 = @{ PlatformInstallRoot = "$BinaryCache\arm64\Android.platform"; SDKInstallRoot = "$BinaryCache\arm64\Android.platform\Developer\SDKs\Android.sdk"; XCTestInstallRoot = "$BinaryCache\arm64\Android.platform\Developer\Library\XCTest-development"; + SwiftTestingInstallRoot = "$BinaryCache\arm64\Android.platform\Developer\Library\Testing-development"; } $AndroidARMv7 = @{ @@ -271,6 +275,7 @@ $AndroidARMv7 = @{ PlatformInstallRoot = "$BinaryCache\armv7\Android.platform"; SDKInstallRoot = "$BinaryCache\armv7\Android.platform\Developer\SDKs\Android.sdk"; XCTestInstallRoot = "$BinaryCache\armv7\Android.platform\Developer\Library\XCTest-development"; + SwiftTestingInstallRoot = "$BinaryCache\armv7\Android.platform\Developer\Library\Testing-development"; } $AndroidX86 = @{ @@ -284,6 +289,7 @@ $AndroidX86 = @{ PlatformInstallRoot = "$BinaryCache\x86\Android.platform"; SDKInstallRoot = "$BinaryCache\x86\Android.platform\Developer\SDKs\Android.sdk"; XCTestInstallRoot = "$BinaryCache\x86\Android.platform\Developer\Library\XCTest-development"; + SwiftTestingInstallRoot = "$BinaryCache\x86\Android.platform\Developer\Library\Testing-development"; } $AndroidX64 = @{ @@ -297,6 +303,7 @@ $AndroidX64 = @{ PlatformInstallRoot = "$BinaryCache\x64\Android.platform"; SDKInstallRoot = "$BinaryCache\x64\Android.platform\Developer\SDKs\Android.sdk"; XCTestInstallRoot = "$BinaryCache\x64\Android.platform\Developer\Library\XCTest-development"; + SwiftTestingInstallRoot = "$BinaryCache\x64\Android.platform\Developer\Library\Testing-development"; } $HostArch = switch ($HostArchName) { @@ -387,6 +394,7 @@ enum TargetComponent { Dispatch Foundation XCTest + SwiftTesting } function Get-TargetProjectBinaryCache($Arch, [TargetComponent]$Project) { @@ -413,6 +421,7 @@ enum HostComponent { LMDB SymbolKit DocC + SwiftTestingMacros } function Get-HostProjectBinaryCache([HostComponent]$Project) { @@ -1731,11 +1740,43 @@ function Build-XCTest([Platform]$Platform, $Arch, [switch]$Test = $false) { dispatch_DIR = "$DispatchBinaryCache\cmake\modules"; Foundation_DIR = "$FoundationBinaryCache\cmake\modules"; } + $TestingDefines) + } +} + +function Build-SwiftTesting([Platform]$Platform, $Arch, [switch]$Test = $false) { + $SwiftTestingBinaryCache = Get-TargetProjectBinaryCache $Arch SwiftTesting + + Isolate-EnvVars { + if ($Test) { + # TODO: Test + return + } else { + $Targets = @("default") + $InstallPath = "$($Arch.SwiftTestingInstallRoot)\usr" + } + + Build-CMakeProject ` + -Src $SourceCache\swift-testing ` + -Bin $SwiftTestingBinaryCache ` + -InstallTo $InstallPath ` + -Arch $Arch ` + -Platform $Platform ` + -UseBuiltCompilers C,CXX,Swift ` + -BuildTargets $Targets ` + -Defines (@{ + BUILD_SHARED_LIBS = "YES"; + CMAKE_BUILD_WITH_INSTALL_RPATH = "YES"; + SwiftSyntax_DIR = (Get-HostProjectCMakeModules Compilers); + # FIXME: Build the plugin for the builder and specify the path. + SwiftTesting_MACRO = "NO"; + }) + } +} +function Write-PlatformInfoPlist($Arch) { $PList = Join-Path -Path $Arch.PlatformInstallRoot -ChildPath "Info.plist" - Invoke-Program $python -c "import plistlib; print(str(plistlib.dumps({ 'DefaultProperties': { 'XCTEST_VERSION': 'development', 'SWIFTC_FLAGS': ['-use-ld=lld'] } }), encoding='utf-8'))" ` + Invoke-Program $python -c "import plistlib; print(str(plistlib.dumps({ 'DefaultProperties': { 'XCTEST_VERSION': 'development', 'SWIFT_TESTING_VERSION': 'development', 'SWIFTC_FLAGS': ['-use-ld=lld'] } }), encoding='utf-8'))" ` -OutFile "$PList" - } } # Copies files installed by CMake from the arch-specific platform root, @@ -2167,6 +2208,21 @@ function Build-SourceKitLSP($Arch) { } } +function Build-SwiftTestingMacros($Arch) { + Build-CMakeProject ` + -Src $SourceCache\swift-testing\Sources\TestingMacros ` + -Bin (Get-HostProjectBinaryCache SwiftTestingMacros) ` + -InstallTo "$($Arch.ToolchainInstallRoot)\usr" ` + -Arch $Arch ` + -Platform Windows ` + -UseBuiltCompilers Swift ` + -SwiftSDK (Get-HostSwiftSDK) ` + -BuildTargets default ` + -Defines @{ + SwiftSyntax_DIR = (Get-HostProjectCMakeModules Compilers); + } +} + function Install-HostToolchain() { if ($ToBatch) { return } @@ -2325,20 +2381,24 @@ if (-not $SkipBuild) { Invoke-BuildStep Build-Dispatch Windows $Arch Invoke-BuildStep Build-Foundation Windows $Arch Invoke-BuildStep Build-XCTest Windows $Arch + Invoke-BuildStep Build-SwiftTesting Windows $Arch + Invoke-BuildStep Write-PlatformInfoPlist $Arch } - foreach ($Arch in $AndroidSDKArchs) { - Invoke-BuildStep Build-ZLib Android $Arch - Invoke-BuildStep Build-XML2 Android $Arch - Invoke-BuildStep Build-CURL Android $Arch - Invoke-BuildStep Build-LLVM Android $Arch + foreach ($Arch in $AndroidSDKArchs) { + Invoke-BuildStep Build-ZLib Android $Arch + Invoke-BuildStep Build-XML2 Android $Arch + Invoke-BuildStep Build-CURL Android $Arch + Invoke-BuildStep Build-LLVM Android $Arch - # Build platform: SDK, Redist and XCTest - Invoke-BuildStep Build-Runtime Android $Arch - Invoke-BuildStep Build-Dispatch Android $Arch - Invoke-BuildStep Build-Foundation Android $Arch - Invoke-BuildStep Build-XCTest Android $Arch - } + # Build platform: SDK, Redist and XCTest + Invoke-BuildStep Build-Runtime Android $Arch + Invoke-BuildStep Build-Dispatch Android $Arch + Invoke-BuildStep Build-Foundation Android $Arch + Invoke-BuildStep Build-XCTest Android $Arch + Invoke-BuildStep Build-SwiftTesting Android $Arch + Invoke-BuildStep Write-PlatformInfoPlist $Arch + } } if (-not $ToBatch) { @@ -2360,6 +2420,8 @@ if (-not $ToBatch) { } if (-not $SkipBuild) { + # TestingMacros can't be built before the standard library for the host as it is required for the Swift code. + Invoke-BuildStep Build-SwiftTestingMacros $HostArch Invoke-BuildStep Build-SQLite $HostArch Invoke-BuildStep Build-System $HostArch Invoke-BuildStep Build-ToolsSupportCore $HostArch @@ -2414,6 +2476,9 @@ if (-not $IsCrossCompiling) { if ($Test -contains "xctest") { Build-XCTest Windows $HostArch -Test } + if ($Test -contains "testing") { + Build-SwiftTesting Windows $HostArch -Test + } if ($Test -contains "llbuild") { Build-LLBuild $HostArch -Test } if ($Test -contains "swiftpm") { Test-PackageManager $HostArch } } diff --git a/utils/build_swift/build_swift/driver_arguments.py b/utils/build_swift/build_swift/driver_arguments.py index 3ea1927032551..81d284a5f31f6 100644 --- a/utils/build_swift/build_swift/driver_arguments.py +++ b/utils/build_swift/build_swift/driver_arguments.py @@ -809,6 +809,16 @@ def create_argument_parser(): option(['--wasmkit'], toggle_true('build_wasmkit'), help='build WasmKit') + option('--swift-testing', toggle_true('build_swift_testing'), + help='build Swift Testing') + option('--install-swift-testing', toggle_true('install_swift_testing'), + help='install Swift Testing') + option('--swift-testing-macros', toggle_true('build_swift_testing_macros'), + help='build Swift Testing macro plugin') + option('--install-swift-testing-macros', + toggle_true('install_swift_testing_macros'), + help='install Swift Testing macro plugin') + option('--xctest', toggle_true('build_xctest'), help='build xctest') diff --git a/utils/build_swift/tests/expected_options.py b/utils/build_swift/tests/expected_options.py index 632d03b7a8c8c..5738f88736623 100644 --- a/utils/build_swift/tests/expected_options.py +++ b/utils/build_swift/tests/expected_options.py @@ -95,6 +95,8 @@ 'build_swiftpm': False, 'build_swift_driver': False, 'build_swift_libexec': True, + 'build_swift_testing': False, + 'build_swift_testing_macros': False, 'build_early_swift_driver': True, 'build_early_swiftsyntax': True, 'build_swiftsyntax': False, @@ -111,6 +113,8 @@ 'install_static_linux_config': False, 'install_swiftpm': False, 'install_swiftsyntax': False, + 'install_swift_testing': False, + 'install_swift_testing_macros': False, 'install_swift_driver': False, 'install_swiftdocc': False, 'swiftsyntax_verify_generated_files': False, @@ -566,6 +570,8 @@ class BuildScriptImplOption(_BaseOption): SetTrueOption('--swiftpm', dest='build_swiftpm'), SetTrueOption('--swift-driver', dest='build_swift_driver'), SetTrueOption('--swiftsyntax', dest='build_swiftsyntax'), + SetTrueOption('--swift-testing', dest='build_swift_testing'), + SetTrueOption('--swift-testing-macros', dest='build_swift_testing_macros'), SetTrueOption('--skstresstester', dest='build_skstresstester'), SetTrueOption('--swiftformat', dest='build_swiftformat'), SetTrueOption('--swiftdocc', dest='build_swiftdocc'), @@ -646,6 +652,9 @@ class BuildScriptImplOption(_BaseOption): EnableOption('--install-llvm', dest='install_llvm'), EnableOption('--install-static-linux-config', dest='install_static_linux_config'), EnableOption('--install-swiftsyntax', dest='install_swiftsyntax'), + EnableOption('--install-swift-testing', dest='install_swift_testing'), + EnableOption('--install-swift-testing-macros', + dest='install_swift_testing_macros'), EnableOption('--swiftsyntax-verify-generated-files', dest='swiftsyntax_verify_generated_files'), EnableOption('--swiftsyntax-enable-rawsyntax-validation', diff --git a/utils/swift_build_support/swift_build_support/build_script_invocation.py b/utils/swift_build_support/swift_build_support/build_script_invocation.py index 3f4aa70338d67..75d393edee695 100644 --- a/utils/swift_build_support/swift_build_support/build_script_invocation.py +++ b/utils/swift_build_support/swift_build_support/build_script_invocation.py @@ -678,6 +678,10 @@ def compute_product_pipelines(self): is_enabled=self.args.build_foundation) builder.add_product(products.SwiftSyntax, is_enabled=self.args.build_swiftsyntax) + builder.add_product(products.SwiftTestingMacros, + is_enabled=self.args.build_swift_testing_macros) + builder.add_product(products.SwiftTesting, + is_enabled=self.args.build_swift_testing) builder.add_product(products.SwiftFormat, is_enabled=self.args.build_swiftformat) builder.add_product(products.SKStressTester, diff --git a/utils/swift_build_support/swift_build_support/productpipeline_list_builder.py b/utils/swift_build_support/swift_build_support/productpipeline_list_builder.py index 09c16611090ef..056e8af2f117f 100644 --- a/utils/swift_build_support/swift_build_support/productpipeline_list_builder.py +++ b/utils/swift_build_support/swift_build_support/productpipeline_list_builder.py @@ -101,7 +101,7 @@ def add_product(self, product_cls, is_enabled): self.current_pipeline.append(product_cls, is_enabled) def add_impl_product(self, product_cls, is_enabled): - """Add a non-impl product to the current pipeline begin constructed""" + """Add an impl product to the current pipeline begin constructed""" assert self.current_pipeline is not None assert self.is_current_pipeline_impl assert product_cls.is_build_script_impl_product() diff --git a/utils/swift_build_support/swift_build_support/products/__init__.py b/utils/swift_build_support/swift_build_support/products/__init__.py index a029b952e0faa..ebd7eaabfb630 100644 --- a/utils/swift_build_support/swift_build_support/products/__init__.py +++ b/utils/swift_build_support/swift_build_support/products/__init__.py @@ -30,6 +30,8 @@ from .sourcekitlsp import SourceKitLSP from .staticswiftlinux import StaticSwiftLinuxConfig from .swift import Swift +from .swift_testing import SwiftTesting +from .swift_testing_macros import SwiftTestingMacros from .swiftdocc import SwiftDocC from .swiftdoccrender import SwiftDocCRender from .swiftdriver import SwiftDriver @@ -68,6 +70,8 @@ 'SwiftInspect', 'SwiftPM', 'SwiftDriver', + 'SwiftTesting', + 'SwiftTestingMacros', 'EarlySwiftDriver', 'XCTest', 'SwiftSyntax', diff --git a/utils/swift_build_support/swift_build_support/products/product.py b/utils/swift_build_support/swift_build_support/products/product.py index de813c2bcb58d..e62eb23c8bb5e 100644 --- a/utils/swift_build_support/swift_build_support/products/product.py +++ b/utils/swift_build_support/swift_build_support/products/product.py @@ -293,7 +293,8 @@ def target_for_platform(self, platform, arch, include_version=True): arch, self.args.darwin_deployment_version_xros) return target - def generate_darwin_toolchain_file(self, platform, arch): + def generate_darwin_toolchain_file(self, platform, arch, + macos_deployment_version=None): """ Generates a new CMake tolchain file that specifies Darwin as a target platform. @@ -306,9 +307,14 @@ def generate_darwin_toolchain_file(self, platform, arch): cmake_osx_sysroot = xcrun.sdk_path(platform) - target = self.target_for_platform(platform, arch) - if not target: - raise RuntimeError('Unhandled platform {}?!'.format(platform)) + if platform == 'macosx': + if macos_deployment_version is None: + macos_deployment_version = self.args.darwin_deployment_version_osx + target = '{}-apple-macosx{}'.format(arch, macos_deployment_version) + else: + target = self.target_for_platform(platform, arch) + if not target: + raise RuntimeError('Unhandled platform {}?!'.format(platform)) toolchain_args = {} @@ -429,7 +435,8 @@ def generate_linux_toolchain_file(self, platform, arch): return toolchain_file - def generate_toolchain_file_for_darwin_or_linux(self, host_target): + def generate_toolchain_file_for_darwin_or_linux( + self, host_target, override_macos_deployment_version=None): """ Checks `host_target` platform and generates a new CMake tolchain file appropriate for that target platform (either Darwin or Linux). Defines @@ -448,7 +455,9 @@ def generate_toolchain_file_for_darwin_or_linux(self, host_target): toolchain_file = None if self.is_darwin_host(host_target): - toolchain_file = self.generate_darwin_toolchain_file(platform, arch) + toolchain_file = self.generate_darwin_toolchain_file( + platform, arch, + macos_deployment_version=override_macos_deployment_version) self.cmake_options.define('CMAKE_TOOLCHAIN_FILE:PATH', toolchain_file) elif platform == "linux": toolchain_file = self.generate_linux_toolchain_file(platform, arch) diff --git a/utils/swift_build_support/swift_build_support/products/swift_testing.py b/utils/swift_build_support/swift_build_support/products/swift_testing.py new file mode 100644 index 0000000000000..0e96f71f14c06 --- /dev/null +++ b/utils/swift_build_support/swift_build_support/products/swift_testing.py @@ -0,0 +1,115 @@ +# swift_build_support/products/swift_testing.py -----------------*- python -*- +# +# This source file is part of the Swift.org open source project +# +# Copyright (c) 2024 Apple Inc. and the Swift project authors +# Licensed under Apache License v2.0 with Runtime Library Exception +# +# See https://swift.org/LICENSE.txt for license information +# See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +# +# ---------------------------------------------------------------------------- + +import os + +from build_swift.build_swift.versions import Version + +from . import cmake_product +from . import product +from . import swift + + +class SwiftTesting(product.Product): + @classmethod + def is_build_script_impl_product(cls): + return False + + @classmethod + def is_before_build_script_impl_product(cls): + return False + + @classmethod + def product_source_name(cls): + return "swift-testing" + + @classmethod + def get_dependencies(cls): + return [swift.Swift] + + def should_build(self, host_target): + return True + + def should_test(self, host_target): + # TODO: Implement. + return False + + def should_install(self, host_target): + return self.args.install_swift_testing_macros + + def _cmake_product(self, host_target): + build_root = os.path.dirname(self.build_dir) + build_dir = os.path.join( + build_root, '%s-%s' % (self.product_name(), host_target)) + + return SwiftTestingCMakeShim( + args=self.args, + toolchain=self.toolchain, + source_dir=self.source_dir, + build_dir=build_dir) + + def _build_with_cmake(self, host_target): + self._cmake_product(host_target).build(host_target) + + def build(self, host_target): + self._build_with_cmake(host_target) + + # For Darwin host, 'build' is only called for the builder. + # Manually iterate the cross compile hosts. + if self.has_cross_compile_hosts() and self.is_darwin_host(host_target): + for target in self.args.cross_compile_hosts: + self._build_with_cmake(target) + + # FIXME: build testing library for 'stdlib_deployment_targets'? + pass + + def _install_with_cmake(self, host_target): + self._cmake_product(host_target).install(host_target) + + def install(self, host_target): + self._install_with_cmake(host_target) + + # For Darwin host, 'install' is only called for the builder. + # Manually iterate the cross compile hosts. + if self.has_cross_compile_hosts() and self.is_darwin_host(host_target): + for target in self.args.cross_compile_hosts: + self._install_with_cmake(target) + + +class SwiftTestingCMakeShim(cmake_product.CMakeProduct): + def build(self, host_target): + override_deployment_version = None + if host_target.startswith('macosx'): + if Version(self.args.darwin_deployment_version_osx) < Version('10.15'): + override_deployment_version = '10.15' + + self.cmake_options.define('BUILD_SHARED_LIBS', 'YES') + + # Use empty CMake install prefix, since the `DESTDIR` env var is set by + # `install_with_cmake` later which already has the same prefix. + self.cmake_options.define('CMAKE_INSTALL_PREFIX', '') + + self.cmake_options.define('CMAKE_BUILD_TYPE', self.args.build_variant) + + # FIXME: If we build macros for the builder, specify the path. + self.cmake_options.define('SwiftTesting_MACRO', 'NO') + + self.generate_toolchain_file_for_darwin_or_linux( + host_target, override_macos_deployment_version=override_deployment_version) + self.build_with_cmake([], self.args.build_variant, [], + prefer_native_toolchain=True) + + def install(self, host_target): + install_destdir = self.host_install_destdir(host_target) + install_prefix = install_destdir + self.args.install_prefix + + self.install_with_cmake(['install'], install_prefix) diff --git a/utils/swift_build_support/swift_build_support/products/swift_testing_macros.py b/utils/swift_build_support/swift_build_support/products/swift_testing_macros.py new file mode 100644 index 0000000000000..38e2d8ab3a8fa --- /dev/null +++ b/utils/swift_build_support/swift_build_support/products/swift_testing_macros.py @@ -0,0 +1,112 @@ +# swift_build_support/products/swift_testing_macros.py ----------*- python -*- +# +# This source file is part of the Swift.org open source project +# +# Copyright (c) 2024 Apple Inc. and the Swift project authors +# Licensed under Apache License v2.0 with Runtime Library Exception +# +# See https://swift.org/LICENSE.txt for license information +# See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +# +# ---------------------------------------------------------------------------- + +import os + +from build_swift.build_swift.versions import Version + +from . import cmake_product +from . import product +from . import swift + + +class SwiftTestingMacros(product.Product): + @classmethod + def is_build_script_impl_product(cls): + return False + + @classmethod + def is_before_build_script_impl_product(cls): + return False + + @classmethod + def product_source_name(cls): + return "swift-testing/Sources/TestingMacros" + + @classmethod + def get_dependencies(cls): + return [swift.Swift] + + def should_build(self, host_target): + return True + + def should_test(self, host_target): + return False + + def should_install(self, host_target): + return self.args.install_swift_testing_macros + + def _cmake_product(self, host_target): + build_root = os.path.dirname(self.build_dir) + build_dir = os.path.join( + build_root, '%s-%s' % (self.product_name(), host_target)) + + return SwiftTestingMacrosCMakeShim( + args=self.args, + toolchain=self.toolchain, + source_dir=self.source_dir, + build_dir=build_dir) + + def _build_with_cmake(self, host_target): + self._cmake_product(host_target).build(host_target) + + def build(self, host_target): + self._build_with_cmake(host_target) + + # For Darwin host, 'build' is only called for the builder. + # Manually iterate the cross compile hosts. + if self.has_cross_compile_hosts() and self.is_darwin_host(host_target): + for target in self.args.cross_compile_hosts: + self._build_with_cmake(target) + + def _install_with_cmake(self, host_target): + self._cmake_product(host_target).install(host_target) + + def install(self, host_target): + self._install_with_cmake(host_target) + + # For Darwin host, 'install' is only called for the builder. + # Manually iterate the cross compile hosts. + if self.has_cross_compile_hosts() and self.is_darwin_host(host_target): + for target in self.args.cross_compile_hosts: + self._install_with_cmake(target) + + +class SwiftTestingMacrosCMakeShim(cmake_product.CMakeProduct): + def build(self, host_target): + override_deployment_version = None + if host_target.startswith('macosx'): + if Version(self.args.darwin_deployment_version_osx) < Version('10.15'): + override_deployment_version = '10.15' + + # Use empty CMake install prefix, since the `DESTDIR` env var is set by + # `install_with_cmake` later which already has the same prefix. + self.cmake_options.define('CMAKE_INSTALL_PREFIX', '') + + self.cmake_options.define('CMAKE_BUILD_TYPE', self.args.build_variant) + + build_root = os.path.dirname(self.build_dir) + swift_build_dir = os.path.join( + '..', build_root, '%s-%s' % ('swift', host_target)) + swift_cmake_dir = os.path.join(swift_build_dir, 'cmake', 'modules') + self.cmake_options.define('SwiftSyntax_DIR:PATH', swift_cmake_dir) + + self.generate_toolchain_file_for_darwin_or_linux( + host_target, override_macos_deployment_version=override_deployment_version) + self.build_with_cmake([], self.args.build_variant, [], + prefer_native_toolchain=True) + + def install(self, host_target): + install_destdir = self.host_install_destdir(host_target) + install_prefix = install_destdir + self.args.install_prefix + + self.install_with_cmake(['install'], install_prefix) diff --git a/utils/update_checkout/update-checkout-config.json b/utils/update_checkout/update-checkout-config.json index 18889754f4882..7072a92f3b860 100644 --- a/utils/update_checkout/update-checkout-config.json +++ b/utils/update_checkout/update-checkout-config.json @@ -40,6 +40,8 @@ "remote": { "id": "apple/swift-system" } }, "swift-stress-tester": { "remote": { "id": "swiftlang/swift-stress-tester" } }, + "swift-testing": { + "remote": { "id": "swiftlang/swift-testing" } }, "swift-corelibs-xctest": { "remote": { "id": "apple/swift-corelibs-xctest" } }, "swift-corelibs-foundation": { @@ -139,6 +141,7 @@ "swift-syntax": "main", "swift-system": "1.3.0", "swift-stress-tester": "main", + "swift-testing": "main", "swift-corelibs-xctest": "main", "swift-corelibs-foundation": "main", "swift-foundation-icu": "main", @@ -290,6 +293,7 @@ "swift-syntax": "main", "swift-system": "1.3.0", "swift-stress-tester": "main", + "swift-testing": "main", "swift-corelibs-xctest": "main", "swift-corelibs-foundation": "main", "swift-foundation-icu": "main", @@ -674,6 +678,7 @@ "swift-syntax": "main", "swift-system": "1.3.0", "swift-stress-tester": "main", + "swift-testing": "main", "swift-corelibs-xctest": "main", "swift-corelibs-foundation": "main", "swift-corelibs-libdispatch": "main",