Skip to content

Commit 536cf8a

Browse files
authored
Merge pull request swiftlang#257 from artemcm/experimental_cxx_interop
Recognize experimental C++ interoperability flags
2 parents 5d61c91 + afd463d commit 536cf8a

File tree

3 files changed

+41
-0
lines changed

3 files changed

+41
-0
lines changed

Sources/SwiftDriver/Jobs/DarwinToolchain+LinkerSupport.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,11 @@ extension DarwinToolchain {
303303
commandLine.appendFlag("-application_extension")
304304
}
305305

306+
// On Darwin, we only support libc++.
307+
if parsedOptions.contains(.enableExperimentalCxxInterop) {
308+
commandLine.appendFlag("-lc++")
309+
}
310+
306311
// inputs LinkFileList
307312
if shouldUseInputFileList {
308313
commandLine.appendFlag(.filelist)

Sources/SwiftDriver/Jobs/FrontendJobHelpers.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,15 @@ extension Driver {
9191
commandLine.appendFlag(.disableObjcInterop)
9292
}
9393

94+
// Add flags for C++ interop
95+
if parsedOptions.hasArgument(.enableExperimentalCxxInterop) {
96+
commandLine.appendFlag(.enableCxxInterop)
97+
}
98+
if let stdlibVariant = parsedOptions.getLastArgument(.experimentalCxxStdlib)?.asSingle {
99+
commandLine.appendFlag("-Xcc")
100+
commandLine.appendFlag("-stdlib=\(stdlibVariant)")
101+
}
102+
94103
// Handle the CPU and its preferences.
95104
try commandLine.appendLast(.targetCpu, from: &parsedOptions)
96105

Tests/SwiftDriverTests/SwiftDriverTests.swift

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3043,6 +3043,33 @@ final class SwiftDriverTests: XCTestCase {
30433043
}
30443044
}
30453045

3046+
func testCXXInteropOptions() throws {
3047+
do {
3048+
var driver = try Driver(args: ["swiftc", "-enable-experimental-cxx-interop", "foo.swift"])
3049+
let plannedJobs = try driver.planBuild().removingAutolinkExtractJobs()
3050+
XCTAssertEqual(plannedJobs.count, 2)
3051+
let compileJob = plannedJobs[0]
3052+
let linkJob = plannedJobs[1]
3053+
XCTAssertTrue(compileJob.commandLine.contains(.flag("-enable-cxx-interop")))
3054+
if driver.targetTriple.isDarwin {
3055+
XCTAssertTrue(linkJob.commandLine.contains(.flag("-lc++")))
3056+
}
3057+
}
3058+
do {
3059+
var driver = try Driver(args: ["swiftc", "-enable-experimental-cxx-interop",
3060+
"-experimental-cxx-stdlib", "libc++", "foo.swift"])
3061+
let plannedJobs = try driver.planBuild().removingAutolinkExtractJobs()
3062+
XCTAssertEqual(plannedJobs.count, 2)
3063+
let compileJob = plannedJobs[0]
3064+
let linkJob = plannedJobs[1]
3065+
XCTAssertTrue(compileJob.commandLine.contains(.flag("-enable-cxx-interop")))
3066+
XCTAssertTrue(compileJob.commandLine.contains(.flag("-stdlib=libc++")))
3067+
if driver.targetTriple.isDarwin {
3068+
XCTAssertTrue(linkJob.commandLine.contains(.flag("-lc++")))
3069+
}
3070+
}
3071+
}
3072+
30463073
func testVFSOverlay() throws {
30473074
do {
30483075
var driver = try Driver(args: ["swiftc", "-c", "-vfsoverlay", "overlay.yaml", "foo.swift"])

0 commit comments

Comments
 (0)