Skip to content

Commit 94e3638

Browse files
committed
FIX - several tests to run on linux target.
Removes several target specific arguments or platform conditional checks in some SwiftDriverTests. We still need to determine what to do with tests that use specific macOS tooling such as dsymutil or libtool.
1 parent 432e5ec commit 94e3638

File tree

3 files changed

+61
-59
lines changed

3 files changed

+61
-59
lines changed

Sources/SwiftDriver/Jobs/Toolchain+LinkerSupport.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,9 @@ extension Toolchain {
2323
let resourceDirBase: AbsolutePath
2424
if let resourceDir = parsedOptions.getLastArgument(.resourceDir) {
2525
resourceDirBase = try AbsolutePath(validating: resourceDir.asSingle)
26-
} else if let sdk = parsedOptions.getLastArgument(.sdk), !triple.isDarwin {
27-
resourceDirBase = try AbsolutePath(validating: sdk.asSingle)
26+
} else if let sdk = parsedOptions.getLastArgument(.sdk),
27+
let sdkPath = try? AbsolutePath(validating: sdk.asSingle) {
28+
resourceDirBase = sdkPath
2829
.appending(components: "usr", "lib",
2930
isShared ? "swift" : "swift_static")
3031
} else {

Tests/SwiftDriverTests/SwiftDriverTests.swift

Lines changed: 40 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -211,13 +211,9 @@ final class SwiftDriverTests: XCTestCase {
211211

212212
XCTAssertNil(try Driver(args: ["swiftc", "-j", "0"]).numParallelJobs)
213213

214-
XCTAssertEqual(
215-
try Driver(
216-
args: ["swiftc", "-j", "4", "-target", "x86_64-apple-macosx10.15"],
217-
env: ["SWIFTC_MAXIMUM_DETERMINISM": "1"]
218-
).numParallelJobs,
219-
1
220-
)
214+
var env = ProcessEnv.vars
215+
env["SWIFTC_MAXIMUM_DETERMINISM"] = "1"
216+
XCTAssertEqual(try Driver(args: ["swiftc", "-j", "4"], env: env).numParallelJobs, 1)
221217
}
222218

223219
func testMultithreadingDiagnostics() throws {
@@ -234,10 +230,9 @@ final class SwiftDriverTests: XCTestCase {
234230
$1.expect(.error("invalid value '0' in '-j'"))
235231
}
236232

237-
try assertDriverDiagnostics(
238-
args: "swiftc", "-j", "8", "-target", "x86_64-apple-macosx10.15",
239-
env: ["SWIFTC_MAXIMUM_DETERMINISM": "1"]
240-
) {
233+
var env = ProcessEnv.vars
234+
env["SWIFTC_MAXIMUM_DETERMINISM"] = "1"
235+
try assertDriverDiagnostics(args: "swiftc", "-j", "8", env: env) {
241236
$1.expect(.remark("SWIFTC_MAXIMUM_DETERMINISM overriding -j"))
242237
}
243238
}
@@ -323,27 +318,27 @@ final class SwiftDriverTests: XCTestCase {
323318
}
324319

325320
func testStandardCompileJobs() throws {
326-
var driver1 = try Driver(args: ["swiftc", "foo.swift", "bar.swift", "-module-name", "Test", "-target", "x86_64-apple-macosx10.15"])
321+
var driver1 = try Driver(args: ["swiftc", "foo.swift", "bar.swift", "-module-name", "Test"])
327322
let plannedJobs = try driver1.planBuild()
328323
XCTAssertEqual(plannedJobs.count, 3)
329324
XCTAssertEqual(plannedJobs[0].outputs.count, 1)
330325
XCTAssertEqual(plannedJobs[0].outputs.first!.file, VirtualPath.temporary(RelativePath("foo.o")))
331326
XCTAssertEqual(plannedJobs[1].outputs.count, 1)
332327
XCTAssertEqual(plannedJobs[1].outputs.first!.file, VirtualPath.temporary(RelativePath("bar.o")))
333-
XCTAssertTrue(plannedJobs[2].tool.name.contains("ld"))
328+
XCTAssertTrue(plannedJobs[2].tool.name.contains(driver1.targetTriple.isDarwin ? "ld" : "clang"))
334329
XCTAssertEqual(plannedJobs[2].outputs.count, 1)
335330
XCTAssertEqual(plannedJobs[2].outputs.first!.file, VirtualPath.relative(RelativePath("Test")))
336331

337332
// Forwarding of arguments.
338-
var driver2 = try Driver(args: ["swiftc", "-color-diagnostics", "foo.swift", "bar.swift", "-working-directory", "/tmp", "-api-diff-data-file", "diff.txt", "-Xfrontend", "-HI", "-no-color-diagnostics", "-target", "powerpc-apple-macosx10.4", "-g"])
333+
var driver2 = try Driver(args: ["swiftc", "-color-diagnostics", "foo.swift", "bar.swift", "-working-directory", "/tmp", "-api-diff-data-file", "diff.txt", "-Xfrontend", "-HI", "-no-color-diagnostics", "-g"])
339334
let plannedJobs2 = try driver2.planBuild()
340335
XCTAssert(plannedJobs2[0].commandLine.contains(Job.ArgTemplate.path(.absolute(try AbsolutePath(validating: "/tmp/diff.txt")))))
341336
XCTAssert(plannedJobs2[0].commandLine.contains(.flag("-HI")))
342337
XCTAssert(!plannedJobs2[0].commandLine.contains(.flag("-Xfrontend")))
343338
XCTAssert(plannedJobs2[0].commandLine.contains(.flag("-no-color-diagnostics")))
344339
XCTAssert(!plannedJobs2[0].commandLine.contains(.flag("-color-diagnostics")))
345340
XCTAssert(plannedJobs2[0].commandLine.contains(.flag("-target")))
346-
XCTAssert(plannedJobs2[0].commandLine.contains(.flag("powerpc-apple-macosx10.4")))
341+
XCTAssert(plannedJobs2[0].commandLine.contains(.flag(driver2.targetTriple.triple)))
347342
XCTAssert(plannedJobs2[0].commandLine.contains(.flag("-enable-anonymous-context-mangled-names")))
348343

349344
var driver3 = try Driver(args: ["swiftc", "foo.swift", "bar.swift", "-emit-library", "-module-name", "Test"])
@@ -752,7 +747,7 @@ final class SwiftDriverTests: XCTestCase {
752747
}
753748

754749
func testBatchModeCompiles() throws {
755-
var driver1 = try Driver(args: ["swiftc", "foo1.swift", "bar1.swift", "foo2.swift", "bar2.swift", "foo3.swift", "bar3.swift", "foo4.swift", "bar4.swift", "foo5.swift", "bar5.swift", "wibble.swift", "-module-name", "Test", "-target", "x86_64-apple-macosx10.15", "-enable-batch-mode", "-driver-batch-count", "3"])
750+
var driver1 = try Driver(args: ["swiftc", "foo1.swift", "bar1.swift", "foo2.swift", "bar2.swift", "foo3.swift", "bar3.swift", "foo4.swift", "bar4.swift", "foo5.swift", "bar5.swift", "wibble.swift", "-module-name", "Test", "-enable-batch-mode", "-driver-batch-count", "3"])
756751
let plannedJobs = try driver1.planBuild()
757752
XCTAssertEqual(plannedJobs.count, 4)
758753
XCTAssertEqual(plannedJobs[0].outputs.count, 4)
@@ -761,7 +756,7 @@ final class SwiftDriverTests: XCTestCase {
761756
XCTAssertEqual(plannedJobs[1].outputs.first!.file, VirtualPath.temporary(RelativePath("foo3.o")))
762757
XCTAssertEqual(plannedJobs[2].outputs.count, 3)
763758
XCTAssertEqual(plannedJobs[2].outputs.first!.file, VirtualPath.temporary(RelativePath("foo5.o")))
764-
XCTAssertTrue(plannedJobs[3].tool.name.contains("ld"))
759+
XCTAssertTrue(plannedJobs[3].tool.name.contains(driver1.targetTriple.isDarwin ? "ld" : "clang"))
765760
XCTAssertEqual(plannedJobs[3].outputs.count, 1)
766761
XCTAssertEqual(plannedJobs[3].outputs.first!.file, VirtualPath.relative(RelativePath("Test")))
767762
}
@@ -899,12 +894,7 @@ final class SwiftDriverTests: XCTestCase {
899894
XCTAssertTrue(job.commandLine.contains(.flag("foo")))
900895

901896
XCTAssertFalse(job.commandLine.contains(.flag("--")))
902-
903-
#if os(macOS)
904-
XCTAssertTrue(job.extraEnvironment.keys.contains("DYLD_LIBRARY_PATH"))
905-
#elseif os(Linux)
906-
XCTAssertTrue(job.extraEnvironment.keys.contains("LD_LIBRARY_PATH"))
907-
#endif
897+
XCTAssertTrue(job.extraEnvironment.keys.contains("\(driver.targetTriple.isDarwin ? "DYLD" : "LD")_LIBRARY_PATH"))
908898
}
909899

910900
do {
@@ -924,7 +914,7 @@ final class SwiftDriverTests: XCTestCase {
924914
XCTAssertTrue(job.commandLine.contains(.flag("args")))
925915
XCTAssertTrue(job.commandLine.contains(.flag("-for=foo")))
926916
}
927-
#if os(macOS)
917+
928918
do {
929919
var driver = try Driver(args: ["swift", "-L/path/to/lib", "-F/path/to/framework", "foo.swift"])
930920
let plannedJobs = try driver.planBuild()
@@ -933,21 +923,13 @@ final class SwiftDriverTests: XCTestCase {
933923
XCTAssertEqual(job.inputs.count, 1)
934924
XCTAssertEqual(job.inputs[0].file, .relative(RelativePath("foo.swift")))
935925
XCTAssertEqual(job.outputs.count, 0)
936-
XCTAssertTrue(job.extraEnvironment.contains { $0 == "DYLD_LIBRARY_PATH" && $1.contains("/path/to/lib") })
937-
XCTAssertTrue(job.extraEnvironment.contains { $0 == "DYLD_FRAMEWORK_PATH" && $1.contains("/path/to/framework") })
938-
}
939-
#elseif os(Linux)
940-
do {
941-
var driver = try Driver(args: ["swift", "-L/path/to/lib", "foo.swift"])
942-
let plannedJobs = try driver.planBuild()
943-
XCTAssertEqual(plannedJobs.count, 1)
944-
let job = plannedJobs[0]
945-
XCTAssertEqual(job.inputs.count, 1)
946-
XCTAssertEqual(job.inputs[0].file, .relative(RelativePath("foo.swift")))
947-
XCTAssertEqual(job.outputs.count, 0)
948-
XCTAssertTrue(job.extraEnvironment.contains { $0 == "LD_LIBRARY_PATH" && $1.contains("/path/to/lib") })
926+
XCTAssertTrue(job.extraEnvironment.contains {
927+
$0 == "\(driver.targetTriple.isDarwin ? "DYLD" : "LD")_LIBRARY_PATH" && $1.contains("/path/to/lib")
928+
})
929+
if driver.targetTriple.isDarwin {
930+
XCTAssertTrue(job.extraEnvironment.contains { $0 == "DYLD_FRAMEWORK_PATH" && $1.contains("/path/to/framework") })
931+
}
949932
}
950-
#endif
951933
}
952934

953935
func testTargetTriple() throws {
@@ -974,9 +956,8 @@ final class SwiftDriverTests: XCTestCase {
974956

975957
func testDSYMGeneration() throws {
976958
let commonArgs = [
977-
"swiftc", "-target", "x86_64-apple-macosx",
978-
"foo.swift", "bar.swift", "-emit-executable",
979-
"-module-name", "Test"
959+
"swiftc", "foo.swift", "bar.swift",
960+
"-emit-executable", "-module-name", "Test"
980961
]
981962

982963
do {
@@ -1001,29 +982,32 @@ final class SwiftDriverTests: XCTestCase {
1001982
// dSYM generation (-g)
1002983
var driver = try Driver(args: commonArgs + ["-g"])
1003984
let plannedJobs = try driver.planBuild()
1004-
1005-
XCTAssertEqual(plannedJobs.count, 5)
985+
1006986
let generateDSYMJob = plannedJobs.last!
1007-
XCTAssertEqual(generateDSYMJob.kind, .generateDSYM)
1008-
1009-
XCTAssertEqual(generateDSYMJob.outputs.last?.file, try VirtualPath(path: "Test.dSYM"))
1010-
1011987
let cmd = generateDSYMJob.commandLine
988+
989+
if generateDSYMJob.kind == .generateDSYM {
990+
XCTAssertEqual(plannedJobs.count, 5)
991+
XCTAssertEqual(generateDSYMJob.outputs.last?.file, try VirtualPath(path: "Test.dSYM"))
992+
} else {
993+
XCTAssertEqual(plannedJobs.count, 4)
994+
}
995+
1012996
XCTAssertTrue(cmd.contains(.path(try VirtualPath(path: "Test"))))
1013997
}
1014998
}
1015999

10161000
func testDOTFileEmission() throws {
10171001
var driver = try Driver(args: [
1018-
"swiftc", "-emit-executable", "test.swift", "-emit-module",
1019-
"-target", "x86_64-apple-macosx"
1002+
"swiftc", "-emit-executable", "test.swift", "-emit-module"
10201003
])
10211004
let plannedJobs = try driver.planBuild()
10221005

10231006
var serializer = DOTJobGraphSerializer(jobs: plannedJobs)
10241007
var output = ""
10251008
serializer.writeDOT(to: &output)
10261009

1010+
let dynamicLinker = driver.targetTriple.isDarwin ? "ld" : "clang"
10271011
XCTAssertEqual(output,
10281012
"""
10291013
digraph Jobs {
@@ -1040,26 +1024,25 @@ final class SwiftDriverTests: XCTestCase {
10401024
"test.swiftmodule" -> "mergeModule (swift)" [color=blue];
10411025
"mergeModule (swift)" -> "test.swiftmodule" [color=green];
10421026
"mergeModule (swift)" -> "test.swiftdoc" [color=green];
1043-
"link (ld)" [style=bold];
1044-
"test.o" -> "link (ld)" [color=blue];
1027+
"link (\(dynamicLinker))" [style=bold];
1028+
"test.o" -> "link (\(dynamicLinker))" [color=blue];
10451029
"test" [fontsize=12];
1046-
"link (ld)" -> "test" [color=green];
1030+
"link (\(dynamicLinker))" -> "test" [color=green];
10471031
}
10481032
10491033
""")
10501034
}
10511035

10521036
func testRegressions() throws {
1053-
// FIXME: This doesn't work on Linux.
1054-
#if os(macOS)
10551037
var driverWithEmptySDK = try Driver(args: ["swiftc", "-sdk", "", "file.swift"])
10561038
_ = try driverWithEmptySDK.planBuild()
1057-
#endif
10581039
}
10591040

10601041
func testToolchainUtilities() throws {
1061-
let swiftVersion = try DarwinToolchain(env: ProcessEnv.vars).swiftCompilerVersion()
1062-
assertString(swiftVersion, contains: "Swift version ")
1042+
let darwinSwiftVersion = try DarwinToolchain(env: ProcessEnv.vars).swiftCompilerVersion()
1043+
let unixSwiftVersion = try GenericUnixToolchain(env: ProcessEnv.vars).swiftCompilerVersion()
1044+
assertString(darwinSwiftVersion, contains: "Swift version ")
1045+
assertString(unixSwiftVersion, contains: "Swift version ")
10631046
}
10641047

10651048
func testToolchainClangPath() {

Tests/SwiftDriverTests/XCTestManifests.swift

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,17 @@ extension ParsableMessageTests {
3939
static let __allTests__ParsableMessageTests = [
4040
("testBeganMessage", testBeganMessage),
4141
("testFinishedMessage", testFinishedMessage),
42+
("testSignalledMessage", testSignalledMessage),
43+
]
44+
}
45+
46+
extension PredictableRandomNumberGeneratorTests {
47+
// DO NOT MODIFY: This is autogenerated, use:
48+
// `swift test --generate-linuxmain`
49+
// to regenerate.
50+
static let __allTests__PredictableRandomNumberGeneratorTests = [
51+
("testPredictability", testPredictability),
52+
("testUnusualSeeds", testUnusualSeeds),
4253
]
4354
}
4455

@@ -76,11 +87,14 @@ extension SwiftDriverTests {
7687
("testDOTFileEmission", testDOTFileEmission),
7788
("testDriverKindParsing", testDriverKindParsing),
7889
("testDSYMGeneration", testDSYMGeneration),
90+
("testImmediateMode", testImmediateMode),
7991
("testInputFiles", testInputFiles),
92+
("testInvocationRunModes", testInvocationRunModes),
8093
("testLinking", testLinking),
8194
("testMergeModulesOnly", testMergeModulesOnly),
8295
("testModuleNameFallbacks", testModuleNameFallbacks),
8396
("testModuleSettings", testModuleSettings),
97+
("testMultiThreadedWholeModuleOptimizationCompiles", testMultiThreadedWholeModuleOptimizationCompiles),
8498
("testMultithreading", testMultithreading),
8599
("testMultithreadingDiagnostics", testMultithreadingDiagnostics),
86100
("testOutputFileMapLoading", testOutputFileMapLoading),
@@ -93,10 +107,13 @@ extension SwiftDriverTests {
93107
("testResponseFileExpansion", testResponseFileExpansion),
94108
("testResponseFileTokenization", testResponseFileTokenization),
95109
("testSanitizerArgs", testSanitizerArgs),
110+
("testSingleThreadedWholeModuleOptimizationCompiles", testSingleThreadedWholeModuleOptimizationCompiles),
96111
("testStandardCompileJobs", testStandardCompileJobs),
112+
("testSubcommandsHandling", testSubcommandsHandling),
97113
("testTargetTriple", testTargetTriple),
98114
("testToolchainClangPath", testToolchainClangPath),
99115
("testToolchainUtilities", testToolchainUtilities),
116+
("testWholeModuleOptimizationOutputFileMap", testWholeModuleOptimizationOutputFileMap),
100117
]
101118
}
102119

@@ -124,6 +141,7 @@ public func __allTests() -> [XCTestCaseEntry] {
124141
testCase(IncrementalCompilationTests.__allTests__IncrementalCompilationTests),
125142
testCase(JobExecutorTests.__allTests__JobExecutorTests),
126143
testCase(ParsableMessageTests.__allTests__ParsableMessageTests),
144+
testCase(PredictableRandomNumberGeneratorTests.__allTests__PredictableRandomNumberGeneratorTests),
127145
testCase(PrefixTrieTests.__allTests__PrefixTrieTests),
128146
testCase(StringAdditionsTests.__allTests__StringAdditionsTests),
129147
testCase(SwiftDriverTests.__allTests__SwiftDriverTests),

0 commit comments

Comments
 (0)