Skip to content

Commit 455b492

Browse files
committed
SwiftDriver: always pass -sysroot flag if specified
This allows passing the flag on all targets. This is primarily to ensure that the flag is properly handled on foreign targets (i.e. Windows) when cross-compiling.
1 parent c7eca23 commit 455b492

3 files changed

Lines changed: 25 additions & 5 deletions

File tree

Sources/SwiftDriver/Jobs/FrontendJobHelpers.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,11 @@ extension Driver {
173173
try addPathOption(option: .sdk, path: VirtualPath.lookup(sdkPath), to: &commandLine, remap: jobNeedPathRemap)
174174
}
175175

176+
if let sysroot = parsedOptions.getLastArgument(.sysroot)?.asSingle {
177+
commandLine.appendFlag(.sysroot)
178+
try commandLine.appendPath(VirtualPath(path: sysroot))
179+
}
180+
176181
for args: (Option, Option) in [
177182
(.visualcToolsRoot, .visualcToolsVersion),
178183
(.windowsSdkRoot, .windowsSdkVersion)

Sources/SwiftDriver/Toolchains/GenericUnixToolchain.swift

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -152,11 +152,6 @@ public final class GenericUnixToolchain: Toolchain {
152152
driver: inout Driver,
153153
skipMacroOptions: Bool
154154
) throws {
155-
if let sysroot = driver.parsedOptions.getLastArgument(.sysroot)?.asSingle {
156-
commandLine.appendFlag("-sysroot")
157-
try commandLine.appendPath(VirtualPath(path: sysroot))
158-
}
159-
160155
if driver.targetTriple.os == .openbsd && driver.targetTriple.arch == .aarch64 {
161156
if frontendTargetInfo.target.openbsdBTCFIEnabled ?? false {
162157
commandLine.appendFlag(.Xcc)

Tests/SwiftDriverTests/SwiftDriverTests.swift

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9397,6 +9397,26 @@ final class SwiftDriverTests: XCTestCase {
93979397
XCTAssertJobInvocationMatches(jobs[0], .flag("-autolink-library"), .flag("oldnames"), .flag("-autolink-library"), .flag("libcmtd"), .flag("-Xcc"), .flag("-D_MT"))
93989398
}
93999399
}
9400+
9401+
func testSysRootHandling() throws {
9402+
do {
9403+
var driver = try Driver(args: ["swiftc", "-sysroot", "/path/to/sysroot", "-c", "input.swift"])
9404+
let jobs = try driver.planBuild()
9405+
9406+
XCTAssertEqual(jobs.count, 1)
9407+
XCTAssertEqual(jobs[0].kind, .compile)
9408+
XCTAssertJobInvocationMatches(jobs[0], .flag("-sysroot"), try .path(.absolute(.init(validating: "/path/to/sysroot"))))
9409+
}
9410+
9411+
do {
9412+
var driver = try Driver(args: ["swiftc", "-sdk", "/path/to/sdk", "-sysroot", "/path/to/sysroot", "-c", "input.swift"])
9413+
let jobs = try driver.planBuild()
9414+
9415+
XCTAssertEqual(jobs.count, 1)
9416+
XCTAssertEqual(jobs[0].kind, .compile)
9417+
XCTAssertJobInvocationMatches(jobs[0], .flag("-sysroot"), try .path(.absolute(.init(validating: "/path/to/sysroot"))))
9418+
}
9419+
}
94009420
}
94019421

94029422
func assertString(

0 commit comments

Comments
 (0)