Skip to content

Commit ac0b93f

Browse files
authored
Merge pull request #1638 from etcwilde/ewilde/6.0-clangxx-env-var
🍒[Swift 6.0] Allow overriding clang++ with an environment variable
2 parents 2e92299 + c0383d5 commit ac0b93f

File tree

2 files changed

+39
-1
lines changed

2 files changed

+39
-1
lines changed

Sources/SwiftDriver/Toolchains/Toolchain.swift

Lines changed: 4 additions & 1 deletion
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

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6894,6 +6894,41 @@ final class SwiftDriverTests: XCTestCase {
68946894
XCTAssertEqual(jobs.first!.tool.name, swiftHelp.pathString)
68956895
}
68966896

6897+
func testSwiftClangOverride() throws {
6898+
var env = ProcessEnv.vars
6899+
let swiftClang = try AbsolutePath(validating: "/A/Path/swift-clang")
6900+
env["SWIFT_DRIVER_CLANG_EXEC"] = swiftClang.pathString
6901+
6902+
var driver = try Driver(
6903+
args: ["swiftc", "-emit-library", "foo.swift", "bar.o", "-o", "foo.l"],
6904+
env: env)
6905+
let jobs = try driver.planBuild()
6906+
XCTAssertEqual(jobs.count, 2)
6907+
let linkJob = jobs[1]
6908+
XCTAssertEqual(linkJob.tool.name, swiftClang.pathString)
6909+
}
6910+
6911+
func testSwiftClangxxOverride() throws {
6912+
#if os(iOS) || os(macOS) || os(tvOS) || os(watchOS)
6913+
throw XCTSkip("Darwin always uses `clang` to link")
6914+
#else
6915+
var env = ProcessEnv.vars
6916+
let swiftClang = try AbsolutePath(validating: "/A/Path/swift-clang")
6917+
let swiftClangxx = try AbsolutePath(validating: "/A/Path/swift-clang++")
6918+
env["SWIFT_DRIVER_CLANG_EXEC"] = swiftClang.pathString
6919+
env["SWIFT_DRIVER_CLANGXX_EXEC"] = swiftClangxx.pathString
6920+
6921+
var driver = try Driver(
6922+
args: ["swiftc", "-cxx-interoperability-mode=swift-5.9", "-emit-library",
6923+
"foo.swift", "bar.o", "-o", "foo.l"],
6924+
env: env)
6925+
6926+
let jobs = try driver.planBuild()
6927+
let linkJob = jobs.last!
6928+
XCTAssertEqual(linkJob.tool.name, swiftClangxx.pathString)
6929+
#endif
6930+
}
6931+
68976932
func testSourceInfoFileEmitOption() throws {
68986933
// implicit
68996934
do {

0 commit comments

Comments
 (0)