Skip to content

Commit dd5bbca

Browse files
authored
Merge pull request #1605 from etcwilde/ewilde/accept-clangxx-env-var
Allow setting the clang++ environment variable
2 parents 707ce7e + 43c1144 commit dd5bbca

File tree

2 files changed

+39
-1
lines changed

2 files changed

+39
-1
lines changed

Sources/SwiftDriver/Toolchains/Toolchain.swift

+4-1
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,10 @@ extension Toolchain {
196196

197197
/// - Returns: String in the form of: `SWIFT_DRIVER_TOOLNAME_EXEC`
198198
private func envVarName(for toolName: String) -> String {
199-
let lookupName = toolName.replacingOccurrences(of: "-", with: "_").uppercased()
199+
let lookupName = toolName
200+
.replacingOccurrences(of: "-", with: "_")
201+
.replacingOccurrences(of: "+", with: "X")
202+
.uppercased()
200203
return "SWIFT_DRIVER_\(lookupName)_EXEC"
201204
}
202205

Tests/SwiftDriverTests/SwiftDriverTests.swift

+35
Original file line numberDiff line numberDiff line change
@@ -6823,6 +6823,41 @@ final class SwiftDriverTests: XCTestCase {
68236823
XCTAssertEqual(jobs.first!.tool.name, swiftHelp.pathString)
68246824
}
68256825

6826+
func testSwiftClangOverride() throws {
6827+
var env = ProcessEnv.vars
6828+
let swiftClang = try AbsolutePath(validating: "/A/Path/swift-clang")
6829+
env["SWIFT_DRIVER_CLANG_EXEC"] = swiftClang.pathString
6830+
6831+
var driver = try Driver(
6832+
args: ["swiftc", "-emit-library", "foo.swift", "bar.o", "-o", "foo.l"],
6833+
env: env)
6834+
let jobs = try driver.planBuild()
6835+
XCTAssertEqual(jobs.count, 2)
6836+
let linkJob = jobs[1]
6837+
XCTAssertEqual(linkJob.tool.name, swiftClang.pathString)
6838+
}
6839+
6840+
func testSwiftClangxxOverride() throws {
6841+
#if os(iOS) || os(macOS) || os(tvOS) || os(watchOS)
6842+
throw XCTSkip("Darwin always uses `clang` to link")
6843+
#else
6844+
var env = ProcessEnv.vars
6845+
let swiftClang = try AbsolutePath(validating: "/A/Path/swift-clang")
6846+
let swiftClangxx = try AbsolutePath(validating: "/A/Path/swift-clang++")
6847+
env["SWIFT_DRIVER_CLANG_EXEC"] = swiftClang.pathString
6848+
env["SWIFT_DRIVER_CLANGXX_EXEC"] = swiftClangxx.pathString
6849+
6850+
var driver = try Driver(
6851+
args: ["swiftc", "-cxx-interoperability-mode=swift-5.9", "-emit-library",
6852+
"foo.swift", "bar.o", "-o", "foo.l"],
6853+
env: env)
6854+
6855+
let jobs = try driver.planBuild()
6856+
let linkJob = jobs.last!
6857+
XCTAssertEqual(linkJob.tool.name, swiftClangxx.pathString)
6858+
#endif
6859+
}
6860+
68266861
func testSourceInfoFileEmitOption() throws {
68276862
// implicit
68286863
do {

0 commit comments

Comments
 (0)