diff --git a/Sources/SwiftDriver/Jobs/DarwinToolchain+LinkerSupport.swift b/Sources/SwiftDriver/Jobs/DarwinToolchain+LinkerSupport.swift index 6add49fb4..9549b76f4 100644 --- a/Sources/SwiftDriver/Jobs/DarwinToolchain+LinkerSupport.swift +++ b/Sources/SwiftDriver/Jobs/DarwinToolchain+LinkerSupport.swift @@ -268,6 +268,8 @@ extension DarwinToolchain { inputModules.append(input.file) } else if input.type == .object { inputPaths.append(input.file) + } else if input.type == .tbd { + inputPaths.append(input.file) } else if input.type == .llvmBitcode { inputPaths.append(input.file) } @@ -291,6 +293,8 @@ extension DarwinToolchain { return [.flag("-add_ast_path"), .path(path.file)] } else if path.type == .object { return [.path(path.file)] + } else if path.type == .tbd { + return [.path(path.file)] } else if path.type == .llvmBitcode { return [.path(path.file)] } else { diff --git a/Sources/SwiftDriver/Jobs/Planning.swift b/Sources/SwiftDriver/Jobs/Planning.swift index 33052d19f..7a3b334fa 100644 --- a/Sources/SwiftDriver/Jobs/Planning.swift +++ b/Sources/SwiftDriver/Jobs/Planning.swift @@ -330,7 +330,7 @@ extension Driver { addCompileJobGroup: addCompileJobGroup, addJobOutputs: addJobOutputs) - case .object, .autolink, .llvmBitcode: + case .object, .autolink, .llvmBitcode, .tbd: if linkerOutputType != nil { addLinkerInput(input) } else { diff --git a/Tests/SwiftDriverTests/SwiftDriverTests.swift b/Tests/SwiftDriverTests/SwiftDriverTests.swift index 8327918c1..da8245eba 100644 --- a/Tests/SwiftDriverTests/SwiftDriverTests.swift +++ b/Tests/SwiftDriverTests/SwiftDriverTests.swift @@ -1018,6 +1018,17 @@ final class SwiftDriverTests: XCTestCase { XCTAssertFalse(cmd.contains(.flag("-shared"))) } + do { + // .tbd inputs are passed down to the linker. + var driver = try Driver(args: commonArgs + ["foo.dylib", "foo.tbd", "-target", "x86_64-apple-macosx10.15"], env: env) + let plannedJobs = try driver.planBuild() + let linkJob = plannedJobs[2] + XCTAssertEqual(linkJob.kind, .link) + let cmd = linkJob.commandLine + XCTAssertTrue(cmd.contains(.path(try VirtualPath(path: "foo.tbd")))) + XCTAssertTrue(cmd.contains(.path(try VirtualPath(path: "foo.dylib")))) + } + do { // iOS target var driver = try Driver(args: commonArgs + ["-emit-library", "-target", "arm64-apple-ios10.0"], env: env)