Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 5 additions & 7 deletions Sources/SwiftDriver/Incremental Compilation/BuildRecord.swift
Original file line number Diff line number Diff line change
Expand Up @@ -135,19 +135,17 @@ public extension BuildRecord {
extension BuildRecord {
/// Create a new buildRecord for writing
init(jobs: [Job],
finishedJobResults: [Job: ProcessResult],
finishedJobResults: [JobResult],
skippedInputs: Set<TypedVirtualPath>?,
compilationInputModificationDates: [TypedVirtualPath: Date],
actualSwiftVersion: String,
argsHash: String,
timeBeforeFirstJob: Date
) {
let jobResultsByInput = Dictionary(
uniqueKeysWithValues:
finishedJobResults.flatMap { job, result in
job.primaryInputs.map { ($0, result) }
}
)
let jobResultsByInput = Dictionary(uniqueKeysWithValues:
finishedJobResults.flatMap { entry in
entry.j.primaryInputs.map { ($0, entry.result) }
})
let inputInfosArray = compilationInputModificationDates
.map { input, modDate -> (VirtualPath, InputInfo) in
let status = InputInfo.Status( wasSkipped: skippedInputs?.contains(input),
Expand Down
15 changes: 11 additions & 4 deletions Sources/SwiftDriver/Incremental Compilation/BuildRecordInfo.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,15 @@ import Foundation
import TSCBasic
import SwiftOptions

struct JobResult {
let j: Job
let result: ProcessResult
init(_ j: Job, _ result: ProcessResult) {
self.j = j
self.result = result
}
}

/// Holds information required to read and write the build record (aka compilation record)
/// This info is always written, but only read for incremental compilation.
class BuildRecordInfo {
Expand All @@ -25,7 +34,7 @@ import SwiftOptions
let diagnosticEngine: DiagnosticsEngine
let compilationInputModificationDates: [TypedVirtualPath: Date]

var finishedJobResults = [Job: ProcessResult]()
var finishedJobResults = [JobResult]()

init?(
actualSwiftVersion: String,
Expand Down Expand Up @@ -175,8 +184,6 @@ import SwiftOptions

func jobFinished(job: Job, result: ProcessResult) {
// REDUNDANT?
if let _ = finishedJobResults.updateValue(result, forKey: job) {
fatalError("job finished twice?!")
}
finishedJobResults.append(JobResult(job, result))
}
}
5 changes: 2 additions & 3 deletions Sources/SwiftDriver/Jobs/CompileJob.swift
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ extension Driver {
case .swift, .image, .dSYM, .dependencies, .autolink, .swiftDocumentation, .swiftInterface,
.privateSwiftInterface, .swiftSourceInfoFile, .diagnostics, .objcHeader, .swiftDeps,
.remap, .tbd, .moduleTrace, .yamlOptimizationRecord, .bitstreamOptimizationRecord, .pcm,
.pch, .clangModuleMap, .jsonTargetInfo, .jsonSwiftArtifacts, .jsonClangDependencies, .fileList, nil:
.pch, .clangModuleMap, .jsonTargetInfo, .jsonSwiftArtifacts, .jsonClangDependencies, nil:
return false
}
}
Expand All @@ -98,7 +98,6 @@ extension Driver {
useInputFileList = true
commandLine.appendFlag(.filelist)
commandLine.appendPath(allSourcesFileList)
inputs.append(TypedVirtualPath(file: allSourcesFileList, type: .fileList))
} else {
useInputFileList = false
}
Expand Down Expand Up @@ -356,7 +355,7 @@ extension FileType {
case .swift, .dSYM, .autolink, .dependencies, .swiftDocumentation, .pcm,
.diagnostics, .objcHeader, .image, .swiftDeps, .moduleTrace, .tbd,
.yamlOptimizationRecord, .bitstreamOptimizationRecord, .swiftInterface,
.privateSwiftInterface, .swiftSourceInfoFile, .clangModuleMap, .jsonSwiftArtifacts, .fileList:
.privateSwiftInterface, .swiftSourceInfoFile, .clangModuleMap, .jsonSwiftArtifacts:
fatalError("Output type can never be a primary output")
}
}
Expand Down
13 changes: 4 additions & 9 deletions Sources/SwiftDriver/Utilities/FileType.swift
Original file line number Diff line number Diff line change
Expand Up @@ -130,17 +130,14 @@ public enum FileType: String, Hashable, CaseIterable, Codable {

/// Clang Module Map
case clangModuleMap = "modulemap"

/// file used in -filelist
case fileList
}

extension FileType: CustomStringConvertible {
public var description: String {
switch self {
case .swift, .sil, .sib, .image, .dSYM, .dependencies, .autolink,
.swiftModule, .swiftDocumentation, .swiftInterface, .swiftSourceInfoFile, .assembly,
.remap, .tbd, .pcm, .pch, .clangModuleMap, .fileList:
.remap, .tbd, .pcm, .pch, .clangModuleMap:
return rawValue
case .object:
return "object"
Expand Down Expand Up @@ -207,7 +204,7 @@ extension FileType {
/// a Swift or SIL source file.
public var isPartOfSwiftCompilation: Bool {
switch self {
case .swift, .raw_sil, .sil, .raw_sib, .sib, .fileList:
case .swift, .raw_sil, .sil, .raw_sib, .sib:
return true
case .object, .pch, .ast, .llvmIR, .llvmBitcode, .assembly, .swiftModule,
.importedModules, .indexData, .remap, .dSYM, .autolink, .dependencies,
Expand Down Expand Up @@ -305,8 +302,6 @@ extension FileType {
return "bitstream-opt-record"
case .diagnostics:
return "diagnostics"
case .fileList:
return "fileList"
}
}
}
Expand All @@ -318,7 +313,7 @@ extension FileType {
.objcHeader, .autolink, .importedModules, .tbd, .moduleTrace,
.yamlOptimizationRecord, .swiftInterface, .privateSwiftInterface,
.jsonDependencies, .clangModuleMap, .jsonTargetInfo, .jsonSwiftArtifacts,
.jsonClangDependencies, .fileList:
.jsonClangDependencies:
return true
case .image, .object, .dSYM, .pch, .sib, .raw_sib, .swiftModule,
.swiftDocumentation, .swiftSourceInfoFile, .llvmBitcode, .diagnostics,
Expand All @@ -338,7 +333,7 @@ extension FileType {
.swiftSourceInfoFile, .raw_sil, .raw_sib, .diagnostics, .objcHeader, .swiftDeps, .remap,
.importedModules, .tbd, .moduleTrace, .indexData, .yamlOptimizationRecord,
.bitstreamOptimizationRecord, .pcm, .pch, .jsonDependencies, .clangModuleMap,
.jsonTargetInfo, .jsonSwiftArtifacts, .jsonClangDependencies, .fileList:
.jsonTargetInfo, .jsonSwiftArtifacts, .jsonClangDependencies:
return false
}
}
Expand Down
12 changes: 0 additions & 12 deletions Tests/SwiftDriverTests/SwiftDriverTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -1602,22 +1602,10 @@ final class SwiftDriverTests: XCTestCase {
let plannedJobs = try driver1.planBuild().removingAutolinkExtractJobs()
XCTAssertEqual(plannedJobs.count, 2)
XCTAssertEqual(plannedJobs[0].kind, .compile)
XCTAssertTrue(plannedJobs[0].inputs.contains { $0.type == .fileList })
print(plannedJobs[0].commandLine.joinedArguments)
XCTAssert(plannedJobs[0].commandLine.contains(.flag("-supplementary-output-file-map")))
}

func testInputFileListAsInput() throws {
var driver1 = try Driver(args: [
"swiftc", "-whole-module-optimization", "foo.swift", "bar.swift", "wibble.swift", "-module-name", "Test",
"-emit-module-interface", "-driver-filelist-threshold=0"
])
let plannedJobs = try driver1.planBuild().removingAutolinkExtractJobs()
XCTAssertEqual(plannedJobs.count, 2)
XCTAssertEqual(plannedJobs[0].kind, .compile)
XCTAssertTrue(plannedJobs[0].inputs.contains { $0.type == .fileList })
}

func testMergeModulesOnly() throws {
do {
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"])
Expand Down