Skip to content

Commit 543f9b0

Browse files
authored
[Explicit Moduel Builds] Adapt to swift-driver's InterModuleDependencyOracle API for cross-target dependency tracking (#3042)
1 parent 6475635 commit 543f9b0

File tree

2 files changed

+13
-25
lines changed

2 files changed

+13
-25
lines changed

Sources/Build/ManifestBuilder.swift

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -316,12 +316,9 @@ extension LLBuildManifestBuilder {
316316
ResolvedTarget.Dependency.target($0, conditions: [])
317317
}
318318
let allPackageDependencies = try topologicalSort(nodes, successors: { $0.dependencies })
319-
320-
// All modules discovered so far as a part of this package manifest.
321-
// This includes modules that correspond to the package's own targets, package dependency
322-
// targets, and modules that are discovered as dependencies of the above in individual
323-
// dependency scanning actions
324-
var discoveredModulesMap : SwiftDriver.ModuleInfoMap = [:]
319+
// Instantiate the inter-module dependency oracle which will cache commonly-scanned
320+
// modules across targets' Driver instances.
321+
let dependencyOracle = InterModuleDependencyOracle()
325322

326323
// Create commands for all target descriptions in the plan.
327324
for dependency in allPackageDependencies.reversed() {
@@ -349,7 +346,7 @@ extension LLBuildManifestBuilder {
349346
switch description {
350347
case .swift(let desc):
351348
try self.createExplicitSwiftTargetCompileCommand(description: desc,
352-
discoveredModulesMap: &discoveredModulesMap)
349+
dependencyOracle: dependencyOracle)
353350
case .clang(let desc):
354351
try self.createClangCompileCommand(desc)
355352
}
@@ -358,7 +355,7 @@ extension LLBuildManifestBuilder {
358355

359356
private func createExplicitSwiftTargetCompileCommand(
360357
description: SwiftTargetBuildDescription,
361-
discoveredModulesMap: inout SwiftDriver.ModuleInfoMap
358+
dependencyOracle: InterModuleDependencyOracle
362359
) throws {
363360
// Inputs.
364361
let inputs = try self.computeSwiftCompileCmdInputs(description)
@@ -370,7 +367,7 @@ extension LLBuildManifestBuilder {
370367

371368
// Commands.
372369
try addExplicitBuildSwiftCmds(description, inputs: inputs,
373-
discoveredModulesMap: &discoveredModulesMap)
370+
dependencyOracle: dependencyOracle)
374371

375372
self.addTargetCmd(description, cmdOutputs: cmdOutputs)
376373
self.addModuleWrapCmd(description)
@@ -379,7 +376,7 @@ extension LLBuildManifestBuilder {
379376
private func addExplicitBuildSwiftCmds(
380377
_ targetDescription: SwiftTargetBuildDescription,
381378
inputs: [Node],
382-
discoveredModulesMap: inout SwiftDriver.ModuleInfoMap
379+
dependencyOracle: InterModuleDependencyOracle
383380
) throws {
384381
// Pass the driver its external dependencies (target dependencies)
385382
var dependencyModulePathMap: SwiftDriver.ExternalTargetModulePathMap = [:]
@@ -398,18 +395,9 @@ extension LLBuildManifestBuilder {
398395
env: ProcessEnv.vars)
399396
var driver = try Driver(args: commandLine, fileSystem: targetDescription.fs,
400397
executor: executor,
401-
externalBuildArtifacts: (dependencyModulePathMap, discoveredModulesMap))
402-
398+
externalTargetModulePathMap: dependencyModulePathMap,
399+
interModuleDependencyOracle: dependencyOracle)
403400
let jobs = try driver.planBuild()
404-
405-
// Save the path to the target's module to be used by its dependents
406-
// Save the dependency graph of this target to be used by its dependents
407-
guard let dependencyGraph = driver.interModuleDependencyGraph else {
408-
throw InternalError("Expected module dependency graph for target: \(targetDescription)")
409-
}
410-
try InterModuleDependencyGraph.mergeModules(from: dependencyGraph,
411-
into: &discoveredModulesMap)
412-
413401
try addSwiftDriverJobs(for: targetDescription, jobs: jobs, inputs: inputs, resolver: resolver,
414402
isMainModule: { driver.isExplicitMainModuleJob(job: $0)})
415403
}

Tests/BuildTests/BuildPlanTests.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -191,15 +191,15 @@ final class BuildPlanTests: XCTestCase {
191191
let bSwift = bPath.appending(component: "B.swift")
192192
let cSwift = cPath.appending(component: "C.swift")
193193
try localFileSystem.writeFileContents(main) {
194-
$0 <<< "baz()"
194+
$0 <<< "baz();"
195195
}
196196
try localFileSystem.writeFileContents(aSwift) {
197-
$0 <<< "import B"
198-
$0 <<< "import C"
197+
$0 <<< "import B;"
198+
$0 <<< "import C;"
199199
$0 <<< "public func baz() { bar() }"
200200
}
201201
try localFileSystem.writeFileContents(bSwift) {
202-
$0 <<< "import C"
202+
$0 <<< "import C;"
203203
$0 <<< "public func bar() { foo() }"
204204
}
205205
try localFileSystem.writeFileContents(cSwift) {

0 commit comments

Comments
 (0)