Skip to content

Commit 9e2c870

Browse files
authored
Merge pull request #603 from artemcm/AppleSiliconTestRestore
Generalize disabled tests to also work on Apple Silicon
2 parents 480f6f0 + fd336b6 commit 9e2c870

File tree

7 files changed

+74
-61
lines changed

7 files changed

+74
-61
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
// swift-interface-format-version: 1.0
2+
// swift-module-flags: -module-name A
3+
import Swift
4+
public func FuncA() { }
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
// swift-interface-format-version: 1.0
2+
// swift-module-flags: -module-name E
3+
import Swift
4+
public func FuncE() { }
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// swift-interface-format-version: 1.0
2+
// swift-module-flags: -module-name G
3+
import Swift
4+
import E
5+
public func FuncG() { }
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// swift-interface-format-version: 1.0
2+
// swift-module-flags: -module-name H
3+
import Swift
4+
import A
5+
import E
6+
import F
7+
import G
8+
public func FuncH() { }
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
// swift-interface-format-version: 1.0
2+
// swift-module-flags: -parse-stdlib -module-name Swift

Tests/SwiftDriverTests/ExplicitModuleBuildTests.swift

Lines changed: 31 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -754,12 +754,6 @@ final class ExplicitModuleBuildTests: XCTestCase {
754754
// We only care about prebuilt modules in macOS.
755755
#if os(macOS)
756756
func testPrebuiltModuleGenerationJobs() throws {
757-
#if arch(arm64)
758-
// Disabled on Apple Silicon
759-
// rdar://76609781
760-
throw XCTSkip()
761-
#endif
762-
763757
func getInputModules(_ job: Job) -> [String] {
764758
return job.inputs.map { input in
765759
return input.file.absolutePath!.parentDirectory.basenameWithoutExt
@@ -791,7 +785,6 @@ final class ExplicitModuleBuildTests: XCTestCase {
791785
job.outputs[0].file.basenameWithoutExt == basenameWithoutExt
792786
}
793787
}
794-
795788
let packageRootPath = URL(fileURLWithPath: #file).pathComponents
796789
.prefix(while: { $0 != "Tests" }).joined(separator: "/").dropFirst()
797790
let testInputsPath = packageRootPath + "/TestInputs"
@@ -801,12 +794,12 @@ final class ExplicitModuleBuildTests: XCTestCase {
801794
let interfaceMap = try collector.collectSwiftInterfaceMap()
802795

803796
// Check interface map always contain everything
804-
XCTAssertTrue(interfaceMap["Swift"]!.count == 2)
805-
XCTAssertTrue(interfaceMap["A"]!.count == 2)
806-
XCTAssertTrue(interfaceMap["E"]!.count == 2)
797+
XCTAssertTrue(interfaceMap["Swift"]!.count == 3)
798+
XCTAssertTrue(interfaceMap["A"]!.count == 3)
799+
XCTAssertTrue(interfaceMap["E"]!.count == 3)
807800
XCTAssertTrue(interfaceMap["F"]!.count == 3)
808-
XCTAssertTrue(interfaceMap["G"]!.count == 2)
809-
XCTAssertTrue(interfaceMap["H"]!.count == 2)
801+
XCTAssertTrue(interfaceMap["G"]!.count == 3)
802+
XCTAssertTrue(interfaceMap["H"]!.count == 3)
810803

811804
try withTemporaryDirectory { path in
812805
let main = path.appending(component: "testPrebuiltModuleGenerationJobs.swift")
@@ -823,7 +816,6 @@ final class ExplicitModuleBuildTests: XCTestCase {
823816
"-sdk", mockSDKPath,
824817
"-module-cache-path", moduleCachePath
825818
])
826-
827819
let (jobs, danglingJobs) = try driver.generatePrebuitModuleGenerationJobs(with: interfaceMap,
828820
into: VirtualPath(path: "/tmp/").absolutePath!,
829821
exhaustive: true)
@@ -832,24 +824,32 @@ final class ExplicitModuleBuildTests: XCTestCase {
832824
XCTAssertTrue(danglingJobs.allSatisfy { job in
833825
job.moduleName == "MissingKit"
834826
})
835-
XCTAssertTrue(jobs.count == 13)
827+
XCTAssertTrue(jobs.count == 18)
836828
XCTAssertTrue(jobs.allSatisfy {$0.outputs.count == 1})
837829
XCTAssertTrue(jobs.allSatisfy {$0.kind == .compile})
838830
XCTAssertTrue(jobs.allSatisfy {$0.commandLine.contains(.flag("-compile-module-from-interface"))})
839831
XCTAssertTrue(jobs.allSatisfy {$0.commandLine.contains(.flag("-module-cache-path"))})
840832
XCTAssertTrue(try jobs.allSatisfy {$0.commandLine.contains(.path(try VirtualPath(path: moduleCachePath)))})
841833
let HJobs = jobs.filter { $0.moduleName == "H"}
842-
XCTAssertTrue(HJobs.count == 2)
843-
XCTAssertTrue(getInputModules(HJobs[0]) == ["A", "E", "F", "G", "Swift"])
834+
XCTAssertTrue(HJobs.count == 3)
835+
// arm64
836+
XCTAssertTrue(getInputModules(HJobs[0]) == ["A", "A", "E", "E", "F", "F", "G", "G", "Swift", "Swift"])
837+
// arm64e
844838
XCTAssertTrue(getInputModules(HJobs[1]) == ["A", "E", "F", "G", "Swift"])
839+
// x86_64
840+
XCTAssertTrue(getInputModules(HJobs[2]) == ["A", "E", "F", "G", "Swift"])
845841
XCTAssertTrue(getOutputName(HJobs[0]) != getOutputName(HJobs[1]))
842+
XCTAssertTrue(getOutputName(HJobs[1]) != getOutputName(HJobs[2]))
846843
checkInputOutputIntegrity(HJobs[0])
847844
checkInputOutputIntegrity(HJobs[1])
845+
checkInputOutputIntegrity(HJobs[2])
848846
let GJobs = jobs.filter { $0.moduleName == "G"}
849-
XCTAssertTrue(GJobs.count == 2)
850-
XCTAssertTrue(getInputModules(GJobs[0]) == ["E", "Swift"])
847+
XCTAssertTrue(GJobs.count == 3)
848+
XCTAssertTrue(getInputModules(GJobs[0]) == ["E", "E", "Swift", "Swift"])
851849
XCTAssertTrue(getInputModules(GJobs[1]) == ["E", "Swift"])
850+
XCTAssertTrue(getInputModules(GJobs[2]) == ["E", "Swift"])
852851
XCTAssertTrue(getOutputName(GJobs[0]) != getOutputName(GJobs[1]))
852+
XCTAssertTrue(getOutputName(GJobs[1]) != getOutputName(GJobs[2]))
853853
checkInputOutputIntegrity(GJobs[0])
854854
checkInputOutputIntegrity(GJobs[1])
855855
}
@@ -861,28 +861,33 @@ final class ExplicitModuleBuildTests: XCTestCase {
861861
var driver = try Driver(args: ["swiftc", main.pathString,
862862
"-sdk", mockSDKPath,
863863
])
864-
865864
let (jobs, danglingJobs) = try driver.generatePrebuitModuleGenerationJobs(with: interfaceMap,
866865
into: VirtualPath(path: "/tmp/").absolutePath!,
867866
exhaustive: false)
868867

869868
XCTAssertTrue(danglingJobs.isEmpty)
870-
XCTAssertTrue(jobs.count == 13)
869+
XCTAssertTrue(jobs.count == 18)
871870
XCTAssertTrue(jobs.allSatisfy {$0.outputs.count == 1})
872871
XCTAssertTrue(jobs.allSatisfy {$0.kind == .compile})
873872
XCTAssertTrue(jobs.allSatisfy {$0.commandLine.contains(.flag("-compile-module-from-interface"))})
874873
let HJobs = jobs.filter { $0.moduleName == "H"}
875-
XCTAssertTrue(HJobs.count == 2)
876-
XCTAssertTrue(getInputModules(HJobs[0]) == ["A", "E", "F", "G", "Swift"])
874+
XCTAssertTrue(HJobs.count == 3)
875+
// arm64
876+
XCTAssertTrue(getInputModules(HJobs[0]) == ["A", "A", "E", "E", "F", "F", "G", "G", "Swift", "Swift"])
877+
// arm64e
877878
XCTAssertTrue(getInputModules(HJobs[1]) == ["A", "E", "F", "G", "Swift"])
879+
// x86_64
880+
XCTAssertTrue(getInputModules(HJobs[2]) == ["A", "E", "F", "G", "Swift"])
878881
XCTAssertTrue(getOutputName(HJobs[0]) != getOutputName(HJobs[1]))
879882
checkInputOutputIntegrity(HJobs[0])
880883
checkInputOutputIntegrity(HJobs[1])
881884
let GJobs = jobs.filter { $0.moduleName == "G"}
882-
XCTAssertTrue(GJobs.count == 2)
883-
XCTAssertTrue(getInputModules(GJobs[0]) == ["E", "Swift"])
885+
XCTAssertTrue(GJobs.count == 3)
886+
XCTAssertTrue(getInputModules(GJobs[0]) == ["E", "E", "Swift", "Swift"])
884887
XCTAssertTrue(getInputModules(GJobs[1]) == ["E", "Swift"])
888+
XCTAssertTrue(getInputModules(GJobs[2]) == ["E", "Swift"])
885889
XCTAssertTrue(getOutputName(GJobs[0]) != getOutputName(GJobs[1]))
890+
XCTAssertTrue(getOutputName(GJobs[1]) != getOutputName(GJobs[2]))
886891
checkInputOutputIntegrity(GJobs[0])
887892
checkInputOutputIntegrity(GJobs[1])
888893
}
@@ -894,13 +899,12 @@ final class ExplicitModuleBuildTests: XCTestCase {
894899
var driver = try Driver(args: ["swiftc", main.pathString,
895900
"-sdk", mockSDKPath,
896901
])
897-
898902
let (jobs, danglingJobs) = try driver.generatePrebuitModuleGenerationJobs(with: interfaceMap,
899903
into: VirtualPath(path: "/tmp/").absolutePath!,
900904
exhaustive: false)
901905

902906
XCTAssertTrue(danglingJobs.isEmpty)
903-
XCTAssert(jobs.count == 2)
907+
XCTAssert(jobs.count == 3)
904908
XCTAssert(jobs.allSatisfy { $0.moduleName == "Swift" })
905909
}
906910
try withTemporaryDirectory { path in
@@ -911,13 +915,12 @@ final class ExplicitModuleBuildTests: XCTestCase {
911915
var driver = try Driver(args: ["swiftc", main.pathString,
912916
"-sdk", mockSDKPath,
913917
])
914-
915918
let (jobs, danglingJobs) = try driver.generatePrebuitModuleGenerationJobs(with: interfaceMap,
916919
into: VirtualPath(path: "/tmp/").absolutePath!,
917920
exhaustive: false)
918921

919922
XCTAssertTrue(danglingJobs.isEmpty)
920-
XCTAssertTrue(jobs.count == 7)
923+
XCTAssertTrue(jobs.count == 9)
921924
jobs.forEach({ job in
922925
// Check we don't pull in other modules than A, F and Swift
923926
XCTAssertTrue(["A", "F", "Swift"].contains(job.moduleName))
@@ -932,7 +935,6 @@ final class ExplicitModuleBuildTests: XCTestCase {
932935
var driver = try Driver(args: ["swiftc", main.pathString,
933936
"-sdk", mockSDKPath,
934937
])
935-
936938
let (jobs, _) = try driver.generatePrebuitModuleGenerationJobs(with: interfaceMap,
937939
into: VirtualPath(path: "/tmp/").absolutePath!,
938940
exhaustive: false)

Tests/SwiftDriverTests/JobExecutorTests.swift

Lines changed: 20 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -95,13 +95,8 @@ extension DarwinToolchain {
9595

9696
final class JobExecutorTests: XCTestCase {
9797
func testDarwinBasic() throws {
98-
#if os(macOS)
99-
#if arch(arm64)
100-
// Disabled on Apple Silicon
101-
// rdar://76609781
102-
throw XCTSkip()
103-
#endif
104-
98+
#if os(macOS)
99+
let hostTriple = try Driver(args: ["swiftc", "test.swift"]).hostTriple
105100
let executor = try SwiftDriverExecutor(diagnosticsEngine: DiagnosticsEngine(),
106101
processSet: ProcessSet(),
107102
fileSystem: localFileSystem,
@@ -142,7 +137,7 @@ final class JobExecutorTests: XCTestCase {
142137
"-primary-file",
143138
.path(inputs[ "foo"]!.file),
144139
.path(inputs["main"]!.file),
145-
"-target", "x86_64-apple-darwin18.7.0",
140+
"-target", .flag(hostTriple.triple),
146141
"-enable-objc-interop",
147142
"-sdk",
148143
.path(.absolute(try toolchain.sdk.get())),
@@ -164,7 +159,7 @@ final class JobExecutorTests: XCTestCase {
164159
.path(.relative(RelativePath("foo.swift"))),
165160
"-primary-file",
166161
.path(inputs["main"]!.file),
167-
"-target", "x86_64-apple-darwin18.7.0",
162+
"-target", .flag(hostTriple.triple),
168163
"-enable-objc-interop",
169164
"-sdk",
170165
.path(.absolute(try toolchain.sdk.get())),
@@ -185,9 +180,7 @@ final class JobExecutorTests: XCTestCase {
185180
.path(.temporary(RelativePath("main.o"))),
186181
.path(.absolute(try toolchain.clangRT.get())),
187182
"-syslibroot", .path(.absolute(try toolchain.sdk.get())),
188-
"-lobjc", "-lSystem", "-arch", "x86_64",
189-
"-force_load", .path(.absolute(try toolchain.compatibility50.get())),
190-
"-force_load", .path(.absolute(try toolchain.compatibilityDynamicReplacements.get())),
183+
"-lobjc", "-lSystem", "-arch", .flag(hostTriple.archName),
191184
"-L", .path(.absolute(try toolchain.resourcesDirectory.get())),
192185
"-L", .path(.absolute(try toolchain.sdkStdlib(sdk: toolchain.sdk.get()))),
193186
"-rpath", "/usr/lib/swift", "-macosx_version_min", "10.14.0", "-no_objc_category_merging", "-o",
@@ -200,7 +193,6 @@ final class JobExecutorTests: XCTestCase {
200193
primaryInputs: [],
201194
outputs: [.init(file: VirtualPath.relative(RelativePath("main")).intern(), type: .image)]
202195
)
203-
204196
let delegate = JobCollectingDelegate()
205197
let executor = MultiJobExecutor(workload: .all([compileFoo, compileMain, link]),
206198
resolver: resolver, executorDelegate: delegate, diagnosticsEngine: DiagnosticsEngine())
@@ -220,12 +212,8 @@ final class JobExecutorTests: XCTestCase {
220212

221213
/// Ensure the executor is capable of forwarding its standard input to the compile job that requires it.
222214
func testInputForwarding() throws {
223-
#if os(macOS)
224-
#if arch(arm64)
225-
// Disabled on Apple Silicon
226-
// rdar://76609781
227-
throw XCTSkip()
228-
#endif
215+
#if os(macOS)
216+
let hostTriple = try Driver(args: ["swiftc", "test.swift"]).hostTriple
229217
let executor = try SwiftDriverExecutor(diagnosticsEngine: DiagnosticsEngine(),
230218
processSet: ProcessSet(),
231219
fileSystem: localFileSystem,
@@ -243,7 +231,7 @@ final class JobExecutorTests: XCTestCase {
243231
"-primary-file",
244232
// This compile job must read the input from STDIN
245233
"-",
246-
"-target", "x86_64-apple-darwin18.7.0",
234+
"-target", .flag(hostTriple.triple),
247235
"-enable-objc-interop",
248236
"-sdk",
249237
.path(.absolute(try toolchain.sdk.get())),
@@ -263,9 +251,7 @@ final class JobExecutorTests: XCTestCase {
263251
.path(.temporary(RelativePath("main.o"))),
264252
.path(.absolute(try toolchain.clangRT.get())),
265253
"-syslibroot", .path(.absolute(try toolchain.sdk.get())),
266-
"-lobjc", "-lSystem", "-arch", "x86_64",
267-
"-force_load", .path(.absolute(try toolchain.compatibility50.get())),
268-
"-force_load", .path(.absolute(try toolchain.compatibilityDynamicReplacements.get())),
254+
"-lobjc", "-lSystem", "-arch", .flag(hostTriple.archName),
269255
"-L", .path(.absolute(try toolchain.resourcesDirectory.get())),
270256
"-L", .path(.absolute(try toolchain.sdkStdlib(sdk: toolchain.sdk.get()))),
271257
"-rpath", "/usr/lib/swift", "-macosx_version_min", "10.14.0", "-no_objc_category_merging",
@@ -455,13 +441,16 @@ final class JobExecutorTests: XCTestCase {
455441
}
456442
}
457443

458-
func testSaveTemps() throws {
459-
#if os(macOS) && arch(arm64)
460-
// Disabled on Apple Silicon
461-
// rdar://76609781
462-
throw XCTSkip()
444+
private func getHostToolchainSdkArg(_ executor: SwiftDriverExecutor) throws -> [String] {
445+
#if os(macOS)
446+
let toolchain = DarwinToolchain(env: ProcessEnv.vars, executor: executor)
447+
return try ["-sdk", toolchain.sdk.get().pathString]
448+
#else
449+
return []
463450
#endif
451+
}
464452

453+
func testSaveTemps() throws {
465454
do {
466455
try withTemporaryDirectory { path in
467456
let main = path.appending(component: "main.swift")
@@ -476,7 +465,7 @@ final class JobExecutorTests: XCTestCase {
476465
let outputPath = path.appending(component: "finalOutput")
477466
var driver = try Driver(args: ["swiftc", main.pathString,
478467
"-driver-filelist-threshold", "0",
479-
"-o", outputPath.pathString],
468+
"-o", outputPath.pathString] + getHostToolchainSdkArg(executor),
480469
env: ProcessEnv.vars,
481470
diagnosticsEngine: diags,
482471
fileSystem: localFileSystem,
@@ -514,7 +503,7 @@ final class JobExecutorTests: XCTestCase {
514503
var driver = try Driver(args: ["swiftc", main.pathString,
515504
"-save-temps",
516505
"-driver-filelist-threshold", "0",
517-
"-o", outputPath.pathString],
506+
"-o", outputPath.pathString] + getHostToolchainSdkArg(executor),
518507
env: ProcessEnv.vars,
519508
diagnosticsEngine: diags,
520509
fileSystem: localFileSystem,
@@ -552,7 +541,7 @@ final class JobExecutorTests: XCTestCase {
552541
var driver = try Driver(args: ["swiftc", main.pathString,
553542
"-driver-filelist-threshold", "0",
554543
"-Xfrontend", "-debug-crash-immediately",
555-
"-o", outputPath.pathString],
544+
"-o", outputPath.pathString] + getHostToolchainSdkArg(executor),
556545
env: ProcessEnv.vars,
557546
diagnosticsEngine: diags,
558547
fileSystem: localFileSystem,
@@ -572,6 +561,5 @@ final class JobExecutorTests: XCTestCase {
572561
)
573562
}
574563
}
575-
576564
}
577565
}

0 commit comments

Comments
 (0)