Skip to content

Commit fde7b96

Browse files
[windows][toolchain] Prepare non-executable Swift Runtime tests for Android
1 parent 92f99a0 commit fde7b96

File tree

4 files changed

+182
-40
lines changed

4 files changed

+182
-40
lines changed

test/lit.cfg

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -395,28 +395,6 @@ lit_config.note('Using resource dir: ' + test_resource_dir)
395395
test_clang_resource_dir = lit.util.executeCommand([config.clang, '-print-resource-dir'])[0].rstrip()
396396
lit_config.note('Using Clang resource dir: ' + test_clang_resource_dir)
397397

398-
config.swift_system_overlay_opt = ""
399-
config.clang_system_overlay_opt = ""
400-
config.windows_vfs_overlay_opt = ""
401-
if kIsWindows:
402-
# ucrt.modulemap currently requires -fbuiltin-headers-in-system-modules. -strict-implicit-module-context
403-
# is necessary for -Xcc arguments to be passed through ModuleInterfaceLoader.
404-
config.swift_system_overlay_opt = "-vfsoverlay {} -strict-implicit-module-context -Xcc -Xclang -Xcc -fbuiltin-headers-in-system-modules".format(
405-
os.path.join(config.swift_obj_root, "stdlib", "windows-vfs-overlay.yaml")
406-
)
407-
# this variant is for extract-symbolgraph which doesn't accept all the same arugments as swiftc
408-
# so the extra ceremony lets us pass in the relevant pieces needed for Windows SDK access.
409-
config.windows_vfs_overlay_opt = "-Xcc -vfsoverlay -Xcc {} -Xcc -strict-implicit-module-context -Xcc -Xclang -Xcc -fbuiltin-headers-in-system-modules".format(
410-
os.path.join(config.swift_obj_root, "stdlib", "windows-vfs-overlay.yaml")
411-
)
412-
config.clang_system_overlay_opt = "-Xcc -ivfsoverlay -Xcc {} -Xcc -Xclang -Xcc -fbuiltin-headers-in-system-modules".format(
413-
os.path.join(config.swift_obj_root, "stdlib", "windows-vfs-overlay.yaml")
414-
)
415-
config.substitutions.append( ('%windows_vfs_overlay_opt', config.windows_vfs_overlay_opt) )
416-
stdlib_resource_dir_opt = config.resource_dir_opt
417-
sourcekitd_framework_dir = config.swift_lib_dir
418-
config.substitutions.append( ('%test-resource-dir', test_resource_dir) )
419-
420398
# Parse the variant triple.
421399
# FIXME: We ought to parse 'run_environment' separately from 'run_os'.
422400
(run_cpu, run_vendor, run_os, run_vers) = re.match('([^-]+)-([^-]+)-([^0-9]+)(.*)', config.variant_triple).groups()
@@ -479,6 +457,28 @@ if test_sdk_overlay_dir is not None:
479457
lit_config.note('Using SDK overlay dir: ' + test_sdk_overlay_dir)
480458
config.resource_dir_opt += (" %s" % sdk_overlay_dir_opt)
481459

460+
config.swift_system_overlay_opt = ""
461+
config.clang_system_overlay_opt = ""
462+
config.windows_vfs_overlay_opt = ""
463+
if kIsWindows and run_os in ['windows-msvc']:
464+
# ucrt.modulemap currently requires -fbuiltin-headers-in-system-modules. -strict-implicit-module-context
465+
# is necessary for -Xcc arguments to be passed through ModuleInterfaceLoader.
466+
config.swift_system_overlay_opt = "-vfsoverlay {} -strict-implicit-module-context -Xcc -Xclang -Xcc -fbuiltin-headers-in-system-modules".format(
467+
os.path.join(config.swift_obj_root, "stdlib", "windows-vfs-overlay.yaml")
468+
)
469+
# this variant is for extract-symbolgraph which doesn't accept all the same arugments as swiftc
470+
# so the extra ceremony lets us pass in the relevant pieces needed for Windows SDK access.
471+
config.windows_vfs_overlay_opt = "-Xcc -vfsoverlay -Xcc {} -Xcc -strict-implicit-module-context -Xcc -Xclang -Xcc -fbuiltin-headers-in-system-modules".format(
472+
os.path.join(config.swift_obj_root, "stdlib", "windows-vfs-overlay.yaml")
473+
)
474+
config.clang_system_overlay_opt = "-Xcc -ivfsoverlay -Xcc {} -Xcc -Xclang -Xcc -fbuiltin-headers-in-system-modules".format(
475+
os.path.join(config.swift_obj_root, "stdlib", "windows-vfs-overlay.yaml")
476+
)
477+
config.substitutions.append( ('%windows_vfs_overlay_opt', config.windows_vfs_overlay_opt) )
478+
stdlib_resource_dir_opt = config.resource_dir_opt
479+
sourcekitd_framework_dir = config.swift_lib_dir
480+
config.substitutions.append( ('%test-resource-dir', test_resource_dir) )
481+
482482
# Default to Swift 4 for now.
483483
# Note that this accepts both `--param swift-version` (like the compiler flag)
484484
# and `--param swift_version` (like a lit configuration parameter).
@@ -1944,6 +1944,7 @@ elif run_os == 'linux-androideabi' or run_os == 'linux-android':
19441944
config.target_swift_symbolgraph_extract = ' '.join([
19451945
config.swift_symbolgraph_extract,
19461946
'-target', config.variant_triple,
1947+
'-sdk', config.variant_sdk, config.resource_dir_opt,
19471948
mcp_opt])
19481949
config.target_swift_synthesize_interface = ' '.join([
19491950
config.swift_synthesize_interface,
@@ -2747,6 +2748,7 @@ config.substitutions.insert(0, ('%check-c-header-in-clang',
27472748
# Verifies that a C++ file can be compiled without warnings except for some exceptions.
27482749
config.substitutions.insert(0, ('%check-cxx-header-in-clang',
27492750
'%clangxx -fsyntax-only -x c++-header ' + extraCheckWarningFlags +
2751+
' --sysroot %r ' % config.variant_sdk +
27502752
# Use standard header/framework search paths.
27512753
'-F %%clang-importer-sdk-path/frameworks '
27522754
'-I %%clang-include-dir %%cxx-stdlib-include '

test/refactoring/lit.local.cfg

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
config.substitutions.append((r'%refactor-check-compiles', f'{config.python} {config.refactor_check_compiles} -swift-refactor {config.swift_refactor} -swift-frontend {config.swift_frontend} -temp-dir %t {config.resource_dir_opt}'))
2-
config.substitutions.append((r'%refactor', f'{config.swift_refactor} {config.resource_dir_opt}'))
1+
config.substitutions.append((r'%refactor-check-compiles', f'{config.python} {config.refactor_check_compiles} -swift-refactor {config.swift_refactor} -swift-frontend {config.swift_frontend} -temp-dir %t {config.resource_dir_opt} -target {config.variant_triple}'))
2+
config.substitutions.append((r'%refactor', f'{config.swift_refactor} {config.resource_dir_opt} -target {config.variant_triple}'))

utils/build.ps1

Lines changed: 61 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ if ($AndroidSDKs.Length -gt 0) {
227227

228228
if ($Test -contains "*") {
229229
# Explicitly don't include llbuild yet since tests are known to fail on Windows
230-
$Test = @("lld", "lldb", "swift", "dispatch", "foundation", "xctest", "swift-format", "sourcekit-lsp")
230+
$Test = @("lld", "lldb", "swift", "dispatch", "foundation", "xctest", "swift-format", "sourcekit-lsp", "android")
231231
}
232232

233233
# Architecture definitions
@@ -1637,6 +1637,24 @@ function Write-PList {
16371637
-OutFile $Path
16381638
}
16391639

1640+
function Load-LitTestOverrides($Filename) {
1641+
function Select-LitTestOverrides($Prefix) {
1642+
$MatchingLines = Get-Content $Filename | Select-String -Pattern "`^${Prefix}.*$"
1643+
return $MatchingLines | ForEach-Object { ($_ -replace $Prefix,"").Trim() }
1644+
}
1645+
1646+
$TestsToXFail = Select-LitTestOverrides "xfail"
1647+
Write-Host "TestsToXFail=$TestsToXFail"
1648+
if ($TestsToXFail -and $TestsToXFail.Length -ne 0) {
1649+
$env:LIT_XFAIL = $TestsToXFail -join ";"
1650+
}
1651+
$TestsToSkip = Select-LitTestOverrides "skip"
1652+
Write-Host "TestsToSkip=$TestsToSkip"
1653+
if ($TestsToSkip -and $TestsToSkip.Length -gt 0) {
1654+
$env:LIT_FILTER_OUT = "($($TestsToSkip -join '|'))"
1655+
}
1656+
}
1657+
16401658
function Build-Compilers() {
16411659
[CmdletBinding(PositionalBinding = $false)]
16421660
param
@@ -1676,19 +1694,8 @@ function Build-Compilers() {
16761694
if ($TestLLDB) {
16771695
$Targets += @("check-lldb")
16781696

1679-
function Select-LitTestOverrides {
1680-
param([string] $TestStatus)
1681-
1682-
$MatchingLines=(Get-Content $PSScriptRoot/windows-llvm-lit-test-overrides.txt | Select-String -Pattern "`^${TestStatus}.*$")
1683-
$TestNames=$MatchingLines | ForEach-Object { ($_ -replace $TestStatus,"").Trim() }
1684-
return $TestNames
1685-
}
1686-
1687-
# Override some test results with llvm-lit.
1688-
$TestsToXFail=Select-LitTestOverrides "xfail"
1689-
$TestsToSkip=Select-LitTestOverrides "skip"
1690-
$env:LIT_XFAIL=$TestsToXFail -join ";"
1691-
$env:LIT_FILTER_OUT="($($TestsToSkip -join '|'))"
1697+
# Override test filter for known issues in downstream LLDB
1698+
Load-LitTestOverrides $PSScriptRoot/windows-llvm-lit-test-overrides.txt
16921699

16931700
# Transitive dependency of _lldb.pyd
16941701
$RuntimeBinaryCache = Get-TargetProjectBinaryCache $Arch Runtime
@@ -2138,8 +2145,6 @@ function Build-Runtime([Platform]$Platform, $Arch) {
21382145
$PlatformDefines += @{
21392146
LLVM_ENABLE_LIBCXX = "YES";
21402147
SWIFT_USE_LINKER = "lld";
2141-
SWIFT_INCLUDE_TESTS = "NO";
2142-
SWIFT_INCLUDE_TEST_BINARIES = "NO";
21432148
# Clang[<18] doesn't provide the _Builtin_float module.
21442149
SWIFT_BUILD_CLANG_OVERLAYS_SKIP_BUILTIN_FLOAT = "YES";
21452150
}
@@ -2183,6 +2188,40 @@ function Build-Runtime([Platform]$Platform, $Arch) {
21832188
}
21842189
}
21852190

2191+
function Test-Runtime([Platform]$Platform, $Arch) {
2192+
if ($IsCrossCompiling) {
2193+
throw "Swift runtime tests are not supported when cross-compiling"
2194+
}
2195+
if (-not (Test-Path (Get-TargetProjectBinaryCache $Arch Runtime))) {
2196+
throw "Swift runtime tests are supposed to reconfigure the existing build"
2197+
}
2198+
$CompilersBinaryCache = Get-HostProjectBinaryCache Compilers
2199+
if (-not (Test-Path "$CompilersBinaryCache\bin\FileCheck.exe")) {
2200+
# These will exist if we test any of llvm/clang/lldb/lld/swift as well
2201+
throw "LIT test utilities not found in $CompilersBinaryCache\bin"
2202+
}
2203+
2204+
Isolate-EnvVars {
2205+
# Filter known issues when testing on Windows
2206+
Load-LitTestOverrides $PSScriptRoot/windows-swift-android-lit-test-overrides.txt
2207+
$env:Path = "$(Get-CMarkBinaryCache $Arch)\src;$(Get-PinnedToolchainRuntime);${env:Path};$UnixToolsBinDir"
2208+
Build-CMakeProject `
2209+
-Src $SourceCache\swift `
2210+
-Bin (Get-TargetProjectBinaryCache $Arch Runtime) `
2211+
-Arch $Arch `
2212+
-Platform $Platform `
2213+
-UseBuiltCompilers C,CXX,Swift `
2214+
-BuildTargets check-swift-validation-only_non_executable `
2215+
-Defines @{
2216+
SWIFT_INCLUDE_TESTS = "YES";
2217+
SWIFT_INCLUDE_TEST_BINARIES = "YES";
2218+
SWIFT_BUILD_TEST_SUPPORT_MODULES = "YES";
2219+
SWIFT_NATIVE_LLVM_TOOLS_PATH = Join-Path -Path $CompilersBinaryCache -ChildPath "bin";
2220+
LLVM_LIT_ARGS = "-vv";
2221+
}
2222+
}
2223+
}
2224+
21862225
function Build-ExperimentalRuntime {
21872226
[CmdletBinding(PositionalBinding = $false)]
21882227
param
@@ -3330,6 +3369,12 @@ if (-not $IsCrossCompiling) {
33303369
if ($Test -contains "swiftpm") { Test-PackageManager $HostArch }
33313370
if ($Test -contains "swift-format") { Test-Format }
33323371
if ($Test -contains "sourcekit-lsp") { Test-SourceKitLSP }
3372+
3373+
if ($Test -contains "swift") {
3374+
foreach ($Arch in $AndroidSDKArchs) {
3375+
Test-Runtime Android $Arch
3376+
}
3377+
}
33333378
}
33343379

33353380
# Custom exception printing for more detailed exception information
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
# build.ps1 overrides the status of each test in this file when LLVM tests are run with lit.
2+
#
3+
# Prefer `xfail` for tests that fail reliably. Use `skip` for flaky tests.
4+
# Test summaries call them "excluded". Please find the right "Tests that ..."
5+
# category for new entries.
6+
7+
xfail Swift(android-aarch64) :: ClangImporter/clang_builtin_pcm.swift
8+
xfail Swift(android-aarch64) :: Concurrency/fail_implicit_concurrency_load.swift
9+
xfail Swift(android-aarch64) :: DebugInfo/file_compilation_dir.swift
10+
xfail Swift(android-aarch64) :: DebugInfo/modulecache.swift
11+
xfail Swift(android-aarch64) :: Driver/autolink_extract.swift
12+
xfail Swift(android-aarch64) :: Driver/batch_mode_parseable_output_cancellation.swift
13+
xfail Swift(android-aarch64) :: Driver/driver_mode.swift
14+
xfail Swift(android-aarch64) :: Driver/embed-bitcode.swift
15+
xfail Swift(android-aarch64) :: Driver/environment.swift
16+
xfail Swift(android-aarch64) :: Driver/filelists.swift
17+
xfail Swift(android-aarch64) :: Driver/frontend.swift
18+
xfail Swift(android-aarch64) :: Driver/linker-autolink-extract.swift
19+
xfail Swift(android-aarch64) :: Driver/macabi-environment.swift
20+
xfail Swift(android-aarch64) :: Driver/pipe_round_robin.swift.gyb
21+
xfail Swift(android-aarch64) :: Driver/swift-version-7-no-asserts.swift
22+
xfail Swift(android-aarch64) :: Driver/swift-version-default.swift
23+
xfail Swift(android-aarch64) :: Driver/unknown-inputs.swift
24+
xfail Swift(android-aarch64) :: FixCode/batch-mode.swift
25+
xfail Swift(android-aarch64) :: FixCode/fixits-apply-all.swift
26+
xfail Swift(android-aarch64) :: FixCode/fixits-if-else.swift
27+
xfail Swift(android-aarch64) :: FixCode/verify-fixits.swift
28+
xfail Swift(android-aarch64) :: Frontend/ast-dump-json-zlib.swift
29+
xfail Swift(android-aarch64) :: Frontend/experimental-features-no-asserts.swift
30+
xfail Swift(android-aarch64) :: Frontend/module-alias-explicit-build.swift
31+
xfail Swift(android-aarch64) :: IDE/complete_issue-56012.swift
32+
xfail Swift(android-aarch64) :: IDE/complete_issue-56811.swift
33+
xfail Swift(android-aarch64) :: IDE/complete_issue-57061.swift
34+
xfail Swift(android-aarch64) :: IDE/complete_issue-57263.swift
35+
xfail Swift(android-aarch64) :: IDE/complete_multiple_files.swift
36+
xfail Swift(android-aarch64) :: IDE/complete_rdar67155695.swift
37+
xfail Swift(android-aarch64) :: IDE/complete_skipbody.swift
38+
xfail Swift(android-aarch64) :: IDE/complete_with_visible_members.swift
39+
xfail Swift(android-aarch64) :: IDE/module_api_smoketest.swift
40+
xfail Swift(android-aarch64) :: IDE/print_opaque_result_type.swift
41+
xfail Swift(android-aarch64) :: IDE/rdar141440011.swift
42+
xfail Swift(android-aarch64) :: IRGen/stdlib/Mutex.swift
43+
xfail Swift(android-aarch64) :: Index/Store/output-failure.swift
44+
xfail Swift(android-aarch64) :: ModuleInterface/BadStdlib.swiftinterface
45+
xfail Swift(android-aarch64) :: ModuleInterface/ModuleCache/module-cache-options.swift
46+
xfail Swift(android-aarch64) :: ModuleInterface/ModuleCache/prebuilt-module-cache-root.swift
47+
xfail Swift(android-aarch64) :: ModuleInterface/swift_build_sdk_interfaces/check-only-mode.swift
48+
xfail Swift(android-aarch64) :: ModuleInterface/swift_build_sdk_interfaces/compiler-uses-prebuilt-envvar.swift
49+
xfail Swift(android-aarch64) :: ModuleInterface/swift_build_sdk_interfaces/compiler-uses-prebuilt.swift
50+
xfail Swift(android-aarch64) :: ModuleInterface/swift_build_sdk_interfaces/track-system-dependencies.swift
51+
xfail Swift(android-aarch64) :: SIL/clang-function-types-android.swift
52+
xfail Swift(android-aarch64) :: SILGen/magic_identifier_file_conflicting.swift.gyb
53+
xfail Swift(android-aarch64) :: SILOptimizer/simplify_convert_escape_to_noescape.sil
54+
xfail Swift(android-aarch64) :: ScanDependencies/can_import_with_map.swift
55+
xfail Swift(android-aarch64) :: ScanDependencies/cannot_import_with_map_duplicate_entries.swift
56+
xfail Swift(android-aarch64) :: ScanDependencies/explicit-dependencies-headerdeps.swift
57+
xfail Swift(android-aarch64) :: ScanDependencies/explicit-module-map-clang-and-swift.swift
58+
xfail Swift(android-aarch64) :: ScanDependencies/explicit-module-map-clang-implicit.swift
59+
xfail Swift(android-aarch64) :: ScanDependencies/explicit-module-map-forwarding-module.swift
60+
xfail Swift(android-aarch64) :: ScanDependencies/explicit-module-map.swift
61+
xfail Swift(android-aarch64) :: Sema/fixits-derived-conformances.swift
62+
xfail Swift(android-aarch64) :: SynthesizeInterfaceTool/fully-qualified-types.swift
63+
xfail Swift(android-aarch64) :: SynthesizeInterfaceTool/include-submodules.swift
64+
xfail Swift(android-aarch64) :: SynthesizeInterfaceTool/synthesize-interface-cxx.swift
65+
xfail Swift(android-aarch64) :: SynthesizeInterfaceTool/synthesize-interface-pcm.swift
66+
xfail Swift(android-aarch64) :: SynthesizeInterfaceTool/synthesize-interface-swift.swift
67+
xfail Swift(android-aarch64) :: SynthesizeInterfaceTool/synthesize-interface.swift
68+
xfail Swift(android-aarch64) :: TypeDecoder/builtins.swift
69+
xfail Swift(android-aarch64) :: TypeDecoder/clashing_abi_name.swift
70+
xfail Swift(android-aarch64) :: TypeDecoder/concurrency.swift
71+
xfail Swift(android-aarch64) :: TypeDecoder/constrained_existentials.swift
72+
xfail Swift(android-aarch64) :: TypeDecoder/different_abi_name.swift
73+
xfail Swift(android-aarch64) :: TypeDecoder/dynamic_self.swift
74+
xfail Swift(android-aarch64) :: TypeDecoder/existentials.swift
75+
xfail Swift(android-aarch64) :: TypeDecoder/extensions.swift
76+
xfail Swift(android-aarch64) :: TypeDecoder/generic_local_types.swift
77+
xfail Swift(android-aarch64) :: TypeDecoder/generic_typealias.swift
78+
xfail Swift(android-aarch64) :: TypeDecoder/generics.swift
79+
xfail Swift(android-aarch64) :: TypeDecoder/invalid_types.swift
80+
xfail Swift(android-aarch64) :: TypeDecoder/local_types.swift
81+
xfail Swift(android-aarch64) :: TypeDecoder/lowered_function_types.swift
82+
xfail Swift(android-aarch64) :: TypeDecoder/lowered_metatypes.swift
83+
xfail Swift(android-aarch64) :: TypeDecoder/nominal_types.swift
84+
xfail Swift(android-aarch64) :: TypeDecoder/opaque_return_type.swift
85+
xfail Swift(android-aarch64) :: TypeDecoder/reference_storage.swift
86+
xfail Swift(android-aarch64) :: TypeDecoder/structural_types.swift
87+
xfail Swift(android-aarch64) :: TypeDecoder/sugar.swift
88+
xfail Swift(android-aarch64) :: TypeDecoder/typealias.swift
89+
xfail Swift(android-aarch64) :: TypeDecoder/variadic_nominal_types.swift
90+
xfail Swift(android-aarch64) :: api-digester/imported_iuo.test
91+
xfail Swift(android-aarch64) :: api-digester/macro-gen-json.swift
92+
xfail Swift(android-aarch64) :: api-digester/macro-gen.swift
93+
xfail Swift(android-aarch64) :: sil-func-extractor/basic.sil
94+
xfail Swift(android-aarch64) :: sil-func-extractor/basic.swift
95+
xfail Swift(android-aarch64) :: stdlib/FloatConstants.swift

0 commit comments

Comments
 (0)