Skip to content

Commit 302ab58

Browse files
authored
Merge pull request #1307 from etcwilde/ewilde/driver-gcc-toolchain-flag
Add `-gcc-toolchain` flag to swift-driver
2 parents af9fce4 + 72ed3ac commit 302ab58

File tree

4 files changed

+25
-0
lines changed

4 files changed

+25
-0
lines changed

Sources/SwiftDriver/Jobs/FrontendJobHelpers.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import SwiftOptions
1515
import class TSCBasic.LocalFileOutputByteStream
1616
import class TSCBasic.TerminalController
1717
import struct TSCBasic.RelativePath
18+
import struct TSCBasic.AbsolutePath
1819
import var TSCBasic.stderrStream
1920

2021
/// Whether we should produce color diagnostics by default.
@@ -150,6 +151,11 @@ extension Driver {
150151
try commandLine.appendAll(.F, .Fsystem, from: &parsedOptions)
151152
try commandLine.appendAll(.vfsoverlay, from: &parsedOptions)
152153

154+
if let gccToolchain = parsedOptions.getLastArgument(.gccToolchain) {
155+
commandLine.appendFlag(.Xcc)
156+
commandLine.appendFlag("--gcc-toolchain=\(gccToolchain.asSingle)")
157+
}
158+
153159
try commandLine.appendLast(.AssertConfig, from: &parsedOptions)
154160
try commandLine.appendLast(.autolinkForceLoad, from: &parsedOptions)
155161

Sources/SwiftDriver/Jobs/LinkJob.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,11 @@ extension Driver {
5555
outputFile = try outputFileForImage
5656
}
5757

58+
if let gccToolchain = parsedOptions.getLastArgument(.gccToolchain) {
59+
commandLine.appendFlag(.XclangLinker)
60+
commandLine.appendFlag("--gcc-toolchain=\(gccToolchain.asSingle)")
61+
}
62+
5863
// Defer to the toolchain for platform-specific linking
5964
let linkTool = try toolchain.addPlatformSpecificLinkerArgs(
6065
to: &commandLine,

Sources/SwiftOptions/Options.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,7 @@ extension Option {
447447
public static let Fsystem: Option = Option("-Fsystem", .separate, attributes: [.frontend, .argumentIsPath], helpText: "Add directory to system framework search path")
448448
public static let functionSections: Option = Option("-function-sections", .flag, attributes: [.helpHidden, .frontend, .noDriver], helpText: "Emit functions to separate sections.")
449449
public static let F: Option = Option("-F", .joinedOrSeparate, attributes: [.frontend, .argumentIsPath], helpText: "Add directory to framework search path")
450+
public static let gccToolchain: Option = Option("-gcc-toolchain", .separate, attributes: [.helpHidden, .argumentIsPath], metaVar: "<path>", helpText: "Specify a directory where the clang importer and clang linker can find headers and libraries")
450451
public static let gdwarfTypes: Option = Option("-gdwarf-types", .flag, attributes: [.frontend], helpText: "Emit full DWARF type info.", group: .g)
451452
public static let generateEmptyBaseline: Option = Option("-generate-empty-baseline", .flag, attributes: [.noDriver], helpText: "Generate an empty baseline")
452453
public static let generateEmptyBaseline_: Option = Option("--generate-empty-baseline", .flag, alias: Option.generateEmptyBaseline, attributes: [.noDriver], helpText: "Generate an empty baseline")
@@ -1219,6 +1220,7 @@ extension Option {
12191220
Option.Fsystem,
12201221
Option.functionSections,
12211222
Option.F,
1223+
Option.gccToolchain,
12221224
Option.gdwarfTypes,
12231225
Option.generateEmptyBaseline,
12241226
Option.generateEmptyBaseline_,

Tests/SwiftDriverTests/SwiftDriverTests.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6688,6 +6688,18 @@ final class SwiftDriverTests: XCTestCase {
66886688
#endif
66896689
}
66906690

6691+
func testGccToolchainFlags() throws {
6692+
VirtualPath.resetTemporaryFileStore()
6693+
var driver = try Driver(args: [
6694+
"swiftc", "-gcc-toolchain", "foo/as/blarpy", "test.swift"
6695+
])
6696+
let jobs = try driver.planBuild().removingAutolinkExtractJobs()
6697+
XCTAssertEqual(jobs.count, 2)
6698+
let (compileJob, linkJob) = (jobs[0], jobs[1])
6699+
compileJob.commandLine.contains(.flag("--gcc-toolchain=foo/as/blarpy"))
6700+
linkJob.commandLine.contains(.flag("--gcc-toolchain=foo/as/blarpy"))
6701+
}
6702+
66916703
func testPluginPaths() throws {
66926704
var driver = try Driver(args: ["swiftc", "-typecheck", "foo.swift"])
66936705
guard driver.isFrontendArgSupported(.pluginPath) else {

0 commit comments

Comments
 (0)