@@ -6074,6 +6074,84 @@ final class SwiftDriverTests: XCTestCase {
6074
6074
let job = jobs. first!
6075
6075
XCTAssertEqual ( job. kind, . link)
6076
6076
XCTAssertTrue ( job. tool. name. hasSuffix ( executableName ( " clang++ " ) ) )
6077
+ #endif
6078
+ }
6079
+
6080
+ func testRegistrarLookup( ) throws {
6081
+ #if os(Windows)
6082
+ let SDKROOT : AbsolutePath =
6083
+ try localFileSystem. currentWorkingDirectory. map { AbsolutePath ( " /SDKROOT " , relativeTo: $0) }
6084
+ ?? AbsolutePath ( validating: " /SDKROOT " )
6085
+
6086
+ let resourceDir : AbsolutePath =
6087
+ try localFileSystem. currentWorkingDirectory. map { AbsolutePath ( " /swift/resources " , relativeTo: $0) }
6088
+ ?? AbsolutePath ( validating: " /swift/resources " )
6089
+
6090
+ let platform : String = " windows "
6091
+ #if arch(x86_64)
6092
+ let arch : String = " x86_64 "
6093
+ #elseif arch(arm64)
6094
+ let arch : String = " aarch64 "
6095
+ #else
6096
+ #error("unsupported build architecture")
6097
+ #endif
6098
+
6099
+ do {
6100
+ var driver = try Driver ( args: [
6101
+ " swiftc " , " -emit-library " , " -o " , " library.dll " , " library.obj " , " -resource-dir " , resourceDir. nativePathString ( escaped: false ) ,
6102
+ ] )
6103
+ let jobs = try driver. planBuild ( ) . removingAutolinkExtractJobs ( )
6104
+ XCTAssertEqual ( jobs. count, 1 )
6105
+ let job = jobs. first!
6106
+ XCTAssertEqual ( job. kind, . link)
6107
+ XCTAssertTrue ( job. commandLine. contains ( . path( . absolute( resourceDir. appending ( component: " swiftrt.obj " ) ) ) ) )
6108
+ }
6109
+
6110
+ do {
6111
+ var driver = try Driver ( args: [
6112
+ " swiftc " , " -emit-library " , " -o " , " library.dll " , " library.obj " , " -sdk " , SDKROOT . nativePathString ( escaped: false ) ,
6113
+ ] )
6114
+ let jobs = try driver. planBuild ( ) . removingAutolinkExtractJobs ( )
6115
+ XCTAssertEqual ( jobs. count, 1 )
6116
+ let job = jobs. first!
6117
+ XCTAssertEqual ( job. kind, . link)
6118
+ XCTAssertTrue ( job. commandLine. contains ( . path( . absolute( SDKROOT . appending ( components: " usr " , " lib " , " swift " , platform, arch, " swiftrt.obj " ) ) ) ) )
6119
+ }
6120
+
6121
+ do {
6122
+ var env = ProcessEnv . vars
6123
+ env [ " SDKROOT " ] = SDKROOT . nativePathString ( escaped: false )
6124
+
6125
+ var driver = try Driver ( args: [
6126
+ " swiftc " , " -emit-library " , " -o " , " library.dll " , " library.obj "
6127
+ ] , env: env)
6128
+ let jobs = try driver. planBuild ( ) . removingAutolinkExtractJobs ( )
6129
+ XCTAssertEqual ( jobs. count, 1 )
6130
+ let job = jobs. first!
6131
+ XCTAssertEqual ( job. kind, . link)
6132
+ XCTAssertTrue ( job. commandLine. contains ( . path( . absolute( SDKROOT . appending ( components: " usr " , " lib " , " swift " , platform, arch, " swiftrt.obj " ) ) ) ) )
6133
+ }
6134
+
6135
+ // Cannot test this due to `SDKROOT` escaping from the execution environment
6136
+ // into the `-print-target-info` step, which then resets the
6137
+ // `runtimeResourcePath` to be the SDK relative path rahter than the
6138
+ // toolchain relative path.
6139
+ #if false
6140
+ do {
6141
+ var env = ProcessEnv . vars
6142
+ env [ " SDKROOT " ] = nil
6143
+
6144
+ var driver = try Driver ( args: [
6145
+ " swiftc " , " -emit-library " , " -o " , " library.dll " , " library.obj "
6146
+ ] , env: env)
6147
+ driver. frontendTargetInfo. runtimeResourcePath = SDKROOT
6148
+ let jobs = try driver. planBuild ( ) . removingAutolinkExtractJobs ( )
6149
+ XCTAssertEqual ( jobs. count, 1 )
6150
+ let job = jobs. first!
6151
+ XCTAssertEqual ( job. kind, . link)
6152
+ XCTAssertTrue ( job. commandLine. contains ( . path( . absolute( SDKROOT . appending ( components: " usr " , " lib " , " swift " , platform, arch, " swiftrt.obj " ) ) ) ) )
6153
+ }
6154
+ #endif
6077
6155
#endif
6078
6156
}
6079
6157
}
0 commit comments