@@ -211,13 +211,9 @@ final class SwiftDriverTests: XCTestCase {
211
211
212
212
XCTAssertNil ( try Driver ( args: [ " swiftc " , " -j " , " 0 " ] ) . numParallelJobs)
213
213
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 )
221
217
}
222
218
223
219
func testMultithreadingDiagnostics( ) throws {
@@ -234,10 +230,9 @@ final class SwiftDriverTests: XCTestCase {
234
230
$1. expect ( . error( " invalid value '0' in '-j' " ) )
235
231
}
236
232
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) {
241
236
$1. expect ( . remark( " SWIFTC_MAXIMUM_DETERMINISM overriding -j " ) )
242
237
}
243
238
}
@@ -323,27 +318,27 @@ final class SwiftDriverTests: XCTestCase {
323
318
}
324
319
325
320
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 " ] )
327
322
let plannedJobs = try driver1. planBuild ( )
328
323
XCTAssertEqual ( plannedJobs. count, 3 )
329
324
XCTAssertEqual ( plannedJobs [ 0 ] . outputs. count, 1 )
330
325
XCTAssertEqual ( plannedJobs [ 0 ] . outputs. first!. file, VirtualPath . temporary ( RelativePath ( " foo.o " ) ) )
331
326
XCTAssertEqual ( plannedJobs [ 1 ] . outputs. count, 1 )
332
327
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 " ) )
334
329
XCTAssertEqual ( plannedJobs [ 2 ] . outputs. count, 1 )
335
330
XCTAssertEqual ( plannedJobs [ 2 ] . outputs. first!. file, VirtualPath . relative ( RelativePath ( " Test " ) ) )
336
331
337
332
// 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 " ] )
339
334
let plannedJobs2 = try driver2. planBuild ( )
340
335
XCTAssert ( plannedJobs2 [ 0 ] . commandLine. contains ( Job . ArgTemplate. path ( . absolute( try AbsolutePath ( validating: " /tmp/diff.txt " ) ) ) ) )
341
336
XCTAssert ( plannedJobs2 [ 0 ] . commandLine. contains ( . flag( " -HI " ) ) )
342
337
XCTAssert ( !plannedJobs2[ 0 ] . commandLine. contains ( . flag( " -Xfrontend " ) ) )
343
338
XCTAssert ( plannedJobs2 [ 0 ] . commandLine. contains ( . flag( " -no-color-diagnostics " ) ) )
344
339
XCTAssert ( !plannedJobs2[ 0 ] . commandLine. contains ( . flag( " -color-diagnostics " ) ) )
345
340
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 ) ) )
347
342
XCTAssert ( plannedJobs2 [ 0 ] . commandLine. contains ( . flag( " -enable-anonymous-context-mangled-names " ) ) )
348
343
349
344
var driver3 = try Driver ( args: [ " swiftc " , " foo.swift " , " bar.swift " , " -emit-library " , " -module-name " , " Test " ] )
@@ -474,10 +469,13 @@ final class SwiftDriverTests: XCTestCase {
474
469
}
475
470
476
471
func testLinking( ) throws {
472
+ var env = ProcessEnv . vars
473
+ env [ " SWIFT_DRIVER_TESTS_ENABLE_EXEC_PATH_FALLBACK " ] = " 1 "
474
+
477
475
let commonArgs = [ " swiftc " , " foo.swift " , " bar.swift " , " -module-name " , " Test " ]
478
476
do {
479
477
// macOS target
480
- var driver = try Driver ( args: commonArgs + [ " -emit-library " , " -target " , " x86_64-apple-macosx10.15 " ] )
478
+ var driver = try Driver ( args: commonArgs + [ " -emit-library " , " -target " , " x86_64-apple-macosx10.15 " ] , env : env )
481
479
let plannedJobs = try driver. planBuild ( )
482
480
483
481
XCTAssertEqual ( 3 , plannedJobs. count)
@@ -500,7 +498,7 @@ final class SwiftDriverTests: XCTestCase {
500
498
501
499
do {
502
500
// iOS target
503
- var driver = try Driver ( args: commonArgs + [ " -emit-library " , " -target " , " arm64-apple-ios10.0 " ] )
501
+ var driver = try Driver ( args: commonArgs + [ " -emit-library " , " -target " , " arm64-apple-ios10.0 " ] , env : env )
504
502
let plannedJobs = try driver. planBuild ( )
505
503
506
504
XCTAssertEqual ( 3 , plannedJobs. count)
@@ -523,7 +521,7 @@ final class SwiftDriverTests: XCTestCase {
523
521
524
522
do {
525
523
// Xlinker flags
526
- var driver = try Driver ( args: commonArgs + [ " -emit-library " , " -L " , " /tmp " , " -Xlinker " , " -w " , " -target " , " x86_64-apple-macosx10.15 " ] )
524
+ var driver = try Driver ( args: commonArgs + [ " -emit-library " , " -L " , " /tmp " , " -Xlinker " , " -w " , " -target " , " x86_64-apple-macosx10.15 " ] , env : env )
527
525
let plannedJobs = try driver. planBuild ( )
528
526
529
527
XCTAssertEqual ( 3 , plannedJobs. count)
@@ -545,7 +543,7 @@ final class SwiftDriverTests: XCTestCase {
545
543
546
544
do {
547
545
// static linking
548
- var driver = try Driver ( args: commonArgs + [ " -emit-library " , " -static " , " -L " , " /tmp " , " -Xlinker " , " -w " , " -target " , " x86_64-apple-macosx10.15 " ] )
546
+ var driver = try Driver ( args: commonArgs + [ " -emit-library " , " -static " , " -L " , " /tmp " , " -Xlinker " , " -w " , " -target " , " x86_64-apple-macosx10.15 " ] , env : env )
549
547
let plannedJobs = try driver. planBuild ( )
550
548
551
549
XCTAssertEqual ( plannedJobs. count, 3 )
@@ -573,7 +571,7 @@ final class SwiftDriverTests: XCTestCase {
573
571
574
572
do {
575
573
// executable linking
576
- var driver = try Driver ( args: commonArgs + [ " -emit-executable " , " -target " , " x86_64-apple-macosx10.15 " ] )
574
+ var driver = try Driver ( args: commonArgs + [ " -emit-executable " , " -target " , " x86_64-apple-macosx10.15 " ] , env : env )
577
575
let plannedJobs = try driver. planBuild ( )
578
576
XCTAssertEqual ( 3 , plannedJobs. count)
579
577
XCTAssertFalse ( plannedJobs. contains { $0. kind == . autolinkExtract } )
@@ -752,7 +750,7 @@ final class SwiftDriverTests: XCTestCase {
752
750
}
753
751
754
752
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 " ] )
753
+ 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 " ] )
756
754
let plannedJobs = try driver1. planBuild ( )
757
755
XCTAssertEqual ( plannedJobs. count, 4 )
758
756
XCTAssertEqual ( plannedJobs [ 0 ] . outputs. count, 4 )
@@ -761,7 +759,7 @@ final class SwiftDriverTests: XCTestCase {
761
759
XCTAssertEqual ( plannedJobs [ 1 ] . outputs. first!. file, VirtualPath . temporary ( RelativePath ( " foo3.o " ) ) )
762
760
XCTAssertEqual ( plannedJobs [ 2 ] . outputs. count, 3 )
763
761
XCTAssertEqual ( plannedJobs [ 2 ] . outputs. first!. file, VirtualPath . temporary ( RelativePath ( " foo5.o " ) ) )
764
- XCTAssertTrue ( plannedJobs [ 3 ] . tool. name. contains ( " ld " ) )
762
+ XCTAssertTrue ( plannedJobs [ 3 ] . tool. name. contains ( driver1 . targetTriple . isDarwin ? " ld " : " clang " ) )
765
763
XCTAssertEqual ( plannedJobs [ 3 ] . outputs. count, 1 )
766
764
XCTAssertEqual ( plannedJobs [ 3 ] . outputs. first!. file, VirtualPath . relative ( RelativePath ( " Test " ) ) )
767
765
}
@@ -782,8 +780,10 @@ final class SwiftDriverTests: XCTestCase {
782
780
}
783
781
784
782
func testMultiThreadedWholeModuleOptimizationCompiles( ) throws {
785
- var driver1 = try Driver ( args: [ " swiftc " , " -whole-module-optimization " , " foo.swift " , " bar.swift " , " wibble.swift " , " -module-name " , " Test " ,
786
- " -num-threads " , " 4 " , " -target " , " x86_64-apple-macosx10.15 " ] )
783
+ var driver1 = try Driver ( args: [
784
+ " swiftc " , " -whole-module-optimization " , " foo.swift " , " bar.swift " , " wibble.swift " ,
785
+ " -module-name " , " Test " , " -num-threads " , " 4 "
786
+ ] )
787
787
let plannedJobs = try driver1. planBuild ( )
788
788
XCTAssertEqual ( plannedJobs. count, 2 )
789
789
XCTAssertEqual ( plannedJobs [ 0 ] . kind, . compile)
@@ -808,9 +808,10 @@ final class SwiftDriverTests: XCTestCase {
808
808
try withTemporaryFile { file in
809
809
try assertNoDiagnostics { diags in
810
810
try localFileSystem. writeFileContents ( file. path) { $0 <<< contents }
811
- var driver1 = try Driver ( args: [ " swiftc " , " -whole-module-optimization " , " foo.swift " , " bar.swift " , " wibble.swift " , " -module-name " , " Test " ,
812
- " -num-threads " , " 4 " , " -target " , " x86_64-apple-macosx10.15 " ,
813
- " -output-file-map " , file. path. pathString, " -emit-module-interface " ] )
811
+ var driver1 = try Driver ( args: [
812
+ " swiftc " , " -whole-module-optimization " , " foo.swift " , " bar.swift " , " wibble.swift " , " -module-name " , " Test " ,
813
+ " -num-threads " , " 4 " , " -output-file-map " , file. path. pathString, " -emit-module-interface "
814
+ ] )
814
815
let plannedJobs = try driver1. planBuild ( )
815
816
XCTAssertEqual ( plannedJobs. count, 2 )
816
817
XCTAssertEqual ( plannedJobs [ 0 ] . kind, . compile)
@@ -899,12 +900,7 @@ final class SwiftDriverTests: XCTestCase {
899
900
XCTAssertTrue ( job. commandLine. contains ( . flag( " foo " ) ) )
900
901
901
902
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
903
+ XCTAssertTrue ( job. extraEnvironment. keys. contains ( " \( driver. targetTriple. isDarwin ? " DYLD " : " LD " ) _LIBRARY_PATH " ) )
908
904
}
909
905
910
906
do {
@@ -924,7 +920,7 @@ final class SwiftDriverTests: XCTestCase {
924
920
XCTAssertTrue ( job. commandLine. contains ( . flag( " args " ) ) )
925
921
XCTAssertTrue ( job. commandLine. contains ( . flag( " -for=foo " ) ) )
926
922
}
927
- #if os(macOS)
923
+
928
924
do {
929
925
var driver = try Driver ( args: [ " swift " , " -L/path/to/lib " , " -F/path/to/framework " , " foo.swift " ] )
930
926
let plannedJobs = try driver. planBuild ( )
@@ -933,21 +929,13 @@ final class SwiftDriverTests: XCTestCase {
933
929
XCTAssertEqual ( job. inputs. count, 1 )
934
930
XCTAssertEqual ( job. inputs [ 0 ] . file, . relative( RelativePath ( " foo.swift " ) ) )
935
931
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 " ) } )
932
+ XCTAssertTrue ( job. extraEnvironment. contains {
933
+ $0 == " \( driver. targetTriple. isDarwin ? " DYLD " : " LD " ) _LIBRARY_PATH " && $1. contains ( " /path/to/lib " )
934
+ } )
935
+ if driver. targetTriple. isDarwin {
936
+ XCTAssertTrue ( job. extraEnvironment. contains { $0 == " DYLD_FRAMEWORK_PATH " && $1. contains ( " /path/to/framework " ) } )
937
+ }
949
938
}
950
- #endif
951
939
}
952
940
953
941
func testTargetTriple( ) throws {
@@ -974,9 +962,8 @@ final class SwiftDriverTests: XCTestCase {
974
962
975
963
func testDSYMGeneration( ) throws {
976
964
let commonArgs = [
977
- " swiftc " , " -target " , " x86_64-apple-macosx " ,
978
- " foo.swift " , " bar.swift " , " -emit-executable " ,
979
- " -module-name " , " Test "
965
+ " swiftc " , " foo.swift " , " bar.swift " ,
966
+ " -emit-executable " , " -module-name " , " Test "
980
967
]
981
968
982
969
do {
@@ -1001,29 +988,32 @@ final class SwiftDriverTests: XCTestCase {
1001
988
// dSYM generation (-g)
1002
989
var driver = try Driver ( args: commonArgs + [ " -g " ] )
1003
990
let plannedJobs = try driver. planBuild ( )
1004
-
1005
- XCTAssertEqual ( plannedJobs. count, 5 )
991
+
1006
992
let generateDSYMJob = plannedJobs. last!
1007
- XCTAssertEqual ( generateDSYMJob. kind, . generateDSYM)
1008
-
1009
- XCTAssertEqual ( generateDSYMJob. outputs. last? . file, try VirtualPath ( path: " Test.dSYM " ) )
1010
-
1011
993
let cmd = generateDSYMJob. commandLine
994
+
995
+ if driver. targetTriple. isDarwin {
996
+ XCTAssertEqual ( plannedJobs. count, 5 )
997
+ XCTAssertEqual ( generateDSYMJob. outputs. last? . file, try VirtualPath ( path: " Test.dSYM " ) )
998
+ } else {
999
+ XCTAssertEqual ( plannedJobs. count, 4 )
1000
+ }
1001
+
1012
1002
XCTAssertTrue ( cmd. contains ( . path( try VirtualPath ( path: " Test " ) ) ) )
1013
1003
}
1014
1004
}
1015
1005
1016
1006
func testDOTFileEmission( ) throws {
1017
1007
var driver = try Driver ( args: [
1018
- " swiftc " , " -emit-executable " , " test.swift " , " -emit-module " ,
1019
- " -target " , " x86_64-apple-macosx "
1008
+ " swiftc " , " -emit-executable " , " test.swift " , " -emit-module "
1020
1009
] )
1021
1010
let plannedJobs = try driver. planBuild ( )
1022
1011
1023
1012
var serializer = DOTJobGraphSerializer ( jobs: plannedJobs)
1024
1013
var output = " "
1025
1014
serializer. writeDOT ( to: & output)
1026
1015
1016
+ let dynamicLinker = driver. targetTriple. isDarwin ? " ld " : " clang "
1027
1017
XCTAssertEqual ( output,
1028
1018
"""
1029
1019
digraph Jobs {
@@ -1040,26 +1030,25 @@ final class SwiftDriverTests: XCTestCase {
1040
1030
" test.swiftmodule " -> " mergeModule (swift) " [color=blue];
1041
1031
" mergeModule (swift) " -> " test.swiftmodule " [color=green];
1042
1032
" mergeModule (swift) " -> " test.swiftdoc " [color=green];
1043
- " link (ld ) " [style=bold];
1044
- " test.o " -> " link (ld ) " [color=blue];
1033
+ " link ( \( dynamicLinker ) ) " [style=bold];
1034
+ " test.o " -> " link ( \( dynamicLinker ) ) " [color=blue];
1045
1035
" test " [fontsize=12];
1046
- " link (ld ) " -> " test " [color=green];
1036
+ " link ( \( dynamicLinker ) ) " -> " test " [color=green];
1047
1037
}
1048
1038
1049
1039
""" )
1050
1040
}
1051
1041
1052
1042
func testRegressions( ) throws {
1053
- // FIXME: This doesn't work on Linux.
1054
- #if os(macOS)
1055
1043
var driverWithEmptySDK = try Driver ( args: [ " swiftc " , " -sdk " , " " , " file.swift " ] )
1056
1044
_ = try driverWithEmptySDK. planBuild ( )
1057
- #endif
1058
1045
}
1059
1046
1060
1047
func testToolchainUtilities( ) throws {
1061
- let swiftVersion = try DarwinToolchain ( env: ProcessEnv . vars) . swiftCompilerVersion ( )
1062
- assertString ( swiftVersion, contains: " Swift version " )
1048
+ let darwinSwiftVersion = try DarwinToolchain ( env: ProcessEnv . vars) . swiftCompilerVersion ( )
1049
+ let unixSwiftVersion = try GenericUnixToolchain ( env: ProcessEnv . vars) . swiftCompilerVersion ( )
1050
+ assertString ( darwinSwiftVersion, contains: " Swift version " )
1051
+ assertString ( unixSwiftVersion, contains: " Swift version " )
1063
1052
}
1064
1053
1065
1054
func testToolchainClangPath( ) {
@@ -1076,6 +1065,18 @@ final class SwiftDriverTests: XCTestCase {
1076
1065
try ? toolchain. getToolPath ( . clang) . parentDirectory
1077
1066
)
1078
1067
}
1068
+
1069
+ func testExecutableFallbackPath( ) throws {
1070
+ let driver1 = try Driver ( args: [ " swift " , " main.swift " ] )
1071
+ if !driver1. targetTriple. isDarwin {
1072
+ XCTAssertThrowsError ( try driver1. toolchain. getToolPath ( . dsymutil) )
1073
+ }
1074
+
1075
+ var env = ProcessEnv . vars
1076
+ env [ " SWIFT_DRIVER_TESTS_ENABLE_EXEC_PATH_FALLBACK " ] = " 1 "
1077
+ let driver2 = try Driver ( args: [ " swift " , " main.swift " ] , env: env)
1078
+ XCTAssertNoThrow ( try driver2. toolchain. getToolPath ( . dsymutil) )
1079
+ }
1079
1080
}
1080
1081
1081
1082
func assertString(
0 commit comments