Skip to content

Commit dce0fa1

Browse files
authored
Merge pull request #399 from nkcsgexi/71942829
Input file list itself should be part of inputs of the compilation job
2 parents 5a4b97f + 3c99855 commit dce0fa1

File tree

3 files changed

+24
-6
lines changed

3 files changed

+24
-6
lines changed

Sources/SwiftDriver/Jobs/CompileJob.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ extension Driver {
7777
case .swift, .image, .dSYM, .dependencies, .autolink, .swiftDocumentation, .swiftInterface,
7878
.privateSwiftInterface, .swiftSourceInfoFile, .diagnostics, .objcHeader, .swiftDeps,
7979
.remap, .tbd, .moduleTrace, .yamlOptimizationRecord, .bitstreamOptimizationRecord, .pcm,
80-
.pch, .clangModuleMap, .jsonTargetInfo, .jsonSwiftArtifacts, .jsonClangDependencies, nil:
80+
.pch, .clangModuleMap, .jsonTargetInfo, .jsonSwiftArtifacts, .jsonClangDependencies, .fileList, nil:
8181
return false
8282
}
8383
}
@@ -98,6 +98,7 @@ extension Driver {
9898
useInputFileList = true
9999
commandLine.appendFlag(.filelist)
100100
commandLine.appendPath(allSourcesFileList)
101+
inputs.append(TypedVirtualPath(file: allSourcesFileList, type: .fileList))
101102
} else {
102103
useInputFileList = false
103104
}
@@ -355,7 +356,7 @@ extension FileType {
355356
case .swift, .dSYM, .autolink, .dependencies, .swiftDocumentation, .pcm,
356357
.diagnostics, .objcHeader, .image, .swiftDeps, .moduleTrace, .tbd,
357358
.yamlOptimizationRecord, .bitstreamOptimizationRecord, .swiftInterface,
358-
.privateSwiftInterface, .swiftSourceInfoFile, .clangModuleMap, .jsonSwiftArtifacts:
359+
.privateSwiftInterface, .swiftSourceInfoFile, .clangModuleMap, .jsonSwiftArtifacts, .fileList:
359360
fatalError("Output type can never be a primary output")
360361
}
361362
}

Sources/SwiftDriver/Utilities/FileType.swift

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -130,14 +130,17 @@ public enum FileType: String, Hashable, CaseIterable, Codable {
130130

131131
/// Clang Module Map
132132
case clangModuleMap = "modulemap"
133+
134+
/// file used in -filelist
135+
case fileList
133136
}
134137

135138
extension FileType: CustomStringConvertible {
136139
public var description: String {
137140
switch self {
138141
case .swift, .sil, .sib, .image, .dSYM, .dependencies, .autolink,
139142
.swiftModule, .swiftDocumentation, .swiftInterface, .swiftSourceInfoFile, .assembly,
140-
.remap, .tbd, .pcm, .pch, .clangModuleMap:
143+
.remap, .tbd, .pcm, .pch, .clangModuleMap, .fileList:
141144
return rawValue
142145
case .object:
143146
return "object"
@@ -204,7 +207,7 @@ extension FileType {
204207
/// a Swift or SIL source file.
205208
public var isPartOfSwiftCompilation: Bool {
206209
switch self {
207-
case .swift, .raw_sil, .sil, .raw_sib, .sib:
210+
case .swift, .raw_sil, .sil, .raw_sib, .sib, .fileList:
208211
return true
209212
case .object, .pch, .ast, .llvmIR, .llvmBitcode, .assembly, .swiftModule,
210213
.importedModules, .indexData, .remap, .dSYM, .autolink, .dependencies,
@@ -302,6 +305,8 @@ extension FileType {
302305
return "bitstream-opt-record"
303306
case .diagnostics:
304307
return "diagnostics"
308+
case .fileList:
309+
return "fileList"
305310
}
306311
}
307312
}
@@ -313,7 +318,7 @@ extension FileType {
313318
.objcHeader, .autolink, .importedModules, .tbd, .moduleTrace,
314319
.yamlOptimizationRecord, .swiftInterface, .privateSwiftInterface,
315320
.jsonDependencies, .clangModuleMap, .jsonTargetInfo, .jsonSwiftArtifacts,
316-
.jsonClangDependencies:
321+
.jsonClangDependencies, .fileList:
317322
return true
318323
case .image, .object, .dSYM, .pch, .sib, .raw_sib, .swiftModule,
319324
.swiftDocumentation, .swiftSourceInfoFile, .llvmBitcode, .diagnostics,
@@ -333,7 +338,7 @@ extension FileType {
333338
.swiftSourceInfoFile, .raw_sil, .raw_sib, .diagnostics, .objcHeader, .swiftDeps, .remap,
334339
.importedModules, .tbd, .moduleTrace, .indexData, .yamlOptimizationRecord,
335340
.bitstreamOptimizationRecord, .pcm, .pch, .jsonDependencies, .clangModuleMap,
336-
.jsonTargetInfo, .jsonSwiftArtifacts, .jsonClangDependencies:
341+
.jsonTargetInfo, .jsonSwiftArtifacts, .jsonClangDependencies, .fileList:
337342
return false
338343
}
339344
}

Tests/SwiftDriverTests/SwiftDriverTests.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1602,10 +1602,22 @@ final class SwiftDriverTests: XCTestCase {
16021602
let plannedJobs = try driver1.planBuild().removingAutolinkExtractJobs()
16031603
XCTAssertEqual(plannedJobs.count, 2)
16041604
XCTAssertEqual(plannedJobs[0].kind, .compile)
1605+
XCTAssertTrue(plannedJobs[0].inputs.contains { $0.type == .fileList })
16051606
print(plannedJobs[0].commandLine.joinedArguments)
16061607
XCTAssert(plannedJobs[0].commandLine.contains(.flag("-supplementary-output-file-map")))
16071608
}
16081609

1610+
func testInputFileListAsInput() throws {
1611+
var driver1 = try Driver(args: [
1612+
"swiftc", "-whole-module-optimization", "foo.swift", "bar.swift", "wibble.swift", "-module-name", "Test",
1613+
"-emit-module-interface", "-driver-filelist-threshold=0"
1614+
])
1615+
let plannedJobs = try driver1.planBuild().removingAutolinkExtractJobs()
1616+
XCTAssertEqual(plannedJobs.count, 2)
1617+
XCTAssertEqual(plannedJobs[0].kind, .compile)
1618+
XCTAssertTrue(plannedJobs[0].inputs.contains { $0.type == .fileList })
1619+
}
1620+
16091621
func testMergeModulesOnly() throws {
16101622
do {
16111623
var driver = try Driver(args: ["swiftc", "foo.swift", "bar.swift", "-module-name", "Test", "-emit-module", "-disable-bridging-pch", "-import-objc-header", "TestInputHeader.h", "-emit-dependencies", "-emit-module-source-info-path", "/foo/bar/Test.swiftsourceinfo"])

0 commit comments

Comments
 (0)