Skip to content

Commit 2f4ad22

Browse files
committed
[Explicit Moduel Builds] Adapt to swift-driver's InterModuleDependencyOracle API for cross-target dependency tracking
1 parent 1c70990 commit 2f4ad22

File tree

1 file changed

+11
-21
lines changed

1 file changed

+11
-21
lines changed

Sources/Build/ManifestBuilder.swift

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ extension LLBuildManifestBuilder {
215215
) throws {
216216
// Use the integrated Swift driver to compute the set of frontend
217217
// jobs needed to build this Swift target.
218-
var commandLine = target.emitCommandLine();
218+
var commandLine = target.emitCommandLine()
219219
commandLine.append("-driver-use-frontend-path")
220220
commandLine.append(buildParameters.toolchain.swiftCompiler.pathString)
221221
// FIXME: At some point SwiftPM should provide its own executor for
@@ -312,11 +312,9 @@ extension LLBuildManifestBuilder {
312312
}
313313
let allPackageDependencies = try! topologicalSort(nodes, successors: { $0.dependencies })
314314

315-
// All modules discovered so far as a part of this package manifest.
316-
// This includes modules that correspond to the package's own targets, package dependency
317-
// targets, and modules that are discovered as dependencies of the above in individual
318-
// dependency scanning actions
319-
var discoveredModulesMap : SwiftDriver.ModuleInfoMap = [:]
315+
// Instantiate the inter-module dependency oracle which will cache commonly-scanned
316+
// modules across targets' Driver instances.
317+
let dependencyOracle = InterModuleDependencyOracle()
320318

321319
// Create commands for all target descriptions in the plan.
322320
for dependency in allPackageDependencies.reversed() {
@@ -344,7 +342,7 @@ extension LLBuildManifestBuilder {
344342
switch description {
345343
case .swift(let desc):
346344
try createExplicitSwiftTargetCompileCommand(description: desc,
347-
discoveredModulesMap: &discoveredModulesMap)
345+
dependencyOracle: dependencyOracle)
348346
case .clang(let desc):
349347
createClangCompileCommand(desc)
350348
}
@@ -353,7 +351,7 @@ extension LLBuildManifestBuilder {
353351

354352
private func createExplicitSwiftTargetCompileCommand(
355353
description: SwiftTargetBuildDescription,
356-
discoveredModulesMap: inout SwiftDriver.ModuleInfoMap
354+
dependencyOracle: InterModuleDependencyOracle
357355
) throws {
358356
// Inputs.
359357
let inputs = computeSwiftCompileCmdInputs(description)
@@ -365,7 +363,7 @@ extension LLBuildManifestBuilder {
365363

366364
// Commands.
367365
try addExplicitBuildSwiftCmds(description, inputs: inputs,
368-
discoveredModulesMap: &discoveredModulesMap)
366+
dependencyOracle: dependencyOracle)
369367

370368
addTargetCmd(description, cmdOutputs: cmdOutputs)
371369
addModuleWrapCmd(description)
@@ -374,7 +372,7 @@ extension LLBuildManifestBuilder {
374372
private func addExplicitBuildSwiftCmds(
375373
_ targetDescription: SwiftTargetBuildDescription,
376374
inputs: [Node],
377-
discoveredModulesMap: inout SwiftDriver.ModuleInfoMap
375+
dependencyOracle: InterModuleDependencyOracle
378376
) throws {
379377
// Pass the driver its external dependencies (target dependencies)
380378
var dependencyModulePathMap: SwiftDriver.ExternalTargetModulePathMap = [:]
@@ -384,7 +382,7 @@ extension LLBuildManifestBuilder {
384382

385383
// Compute the set of frontend
386384
// jobs needed to build this Swift target.
387-
var commandLine = targetDescription.emitCommandLine();
385+
var commandLine = targetDescription.emitCommandLine()
388386
commandLine.append("-driver-use-frontend-path")
389387
commandLine.append(buildParameters.toolchain.swiftCompiler.pathString)
390388
commandLine.append("-experimental-explicit-module-build")
@@ -394,18 +392,10 @@ extension LLBuildManifestBuilder {
394392
env: ProcessEnv.vars)
395393
var driver = try Driver(args: commandLine, fileSystem: targetDescription.fs,
396394
executor: executor,
397-
externalBuildArtifacts: (dependencyModulePathMap, discoveredModulesMap))
398-
395+
externalBuildArtifacts: (dependencyModulePathMap, [:]),
396+
interModuleDependencyOracle: dependencyOracle)
399397
let jobs = try driver.planBuild()
400398

401-
// Save the path to the target's module to be used by its dependents
402-
// Save the dependency graph of this target to be used by its dependents
403-
guard let dependencyGraph = driver.interModuleDependencyGraph else {
404-
fatalError("Expected module dependency graph for target: \(targetDescription)")
405-
}
406-
try InterModuleDependencyGraph.mergeModules(from: dependencyGraph,
407-
into: &discoveredModulesMap)
408-
409399
try addSwiftDriverJobs(for: targetDescription, jobs: jobs, inputs: inputs, resolver: resolver,
410400
isMainModule: { driver.isExplicitMainModuleJob(job: $0)})
411401
}

0 commit comments

Comments
 (0)