Skip to content

Commit d0cf201

Browse files
committed
Support invoking the Fast Dependency Scanner: -scan-dependencies
1 parent ae21bd1 commit d0cf201

File tree

5 files changed

+42
-3
lines changed

5 files changed

+42
-3
lines changed

Sources/SwiftDriver/Driver/Driver.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -961,6 +961,9 @@ extension Driver {
961961
case .interpret:
962962
compilerOutputType = nil
963963

964+
case .scanDependencies:
965+
compilerOutputType = .jsonDependencies
966+
964967
default:
965968
fatalError("unhandled output mode option \(outputOption)")
966969
}

Sources/SwiftDriver/Jobs/CompileJob.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ extension Driver {
6565
let isTopLevel: Bool
6666

6767
switch compilerOutputType {
68-
case .assembly, .sil, .raw_sil, .llvmIR, .ast:
68+
case .assembly, .sil, .raw_sil, .llvmIR, .ast, .jsonDependencies:
6969
isTopLevel = true
7070
case .object:
7171
isTopLevel = (linkerOutputType == nil)
@@ -238,6 +238,8 @@ extension FileType {
238238
return .typecheck
239239
case .remap:
240240
return .updateCode
241+
case .jsonDependencies:
242+
return .scanDependencies
241243

242244
case .swift, .dSYM, .autolink, .dependencies, .swiftDocumentation, .pcm,
243245
.diagnostics, .objcHeader, .image, .swiftDeps, .moduleTrace, .tbd,

Sources/SwiftDriver/Jobs/FrontendJobHelpers.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ extension Driver {
139139
try commandLine.appendLast(.disableParserLookup, from: &parsedOptions)
140140
try commandLine.appendLast(.sanitizeRecoverEQ, from: &parsedOptions)
141141
try commandLine.appendLast(.enableFineGrainedDependencies, from: &parsedOptions)
142+
try commandLine.appendLast(.scanDependencies, from: &parsedOptions)
142143
try commandLine.appendLast(.fineGrainedDependencyIncludeIntrafile, from: &parsedOptions)
143144
try commandLine.appendLast(.enableExperimentalConcisePoundFile, from: &parsedOptions)
144145
try commandLine.appendLast(.printEducationalNotes, from: &parsedOptions)

Sources/SwiftDriver/Utilities/FileType.swift

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,9 @@ public enum FileType: String, Hashable, CaseIterable, Codable {
8787
/// Text-based dylib (TBD) file.
8888
case tbd
8989

90+
/// JSON-based Module Dependency Scanner output
91+
case jsonDependencies = "dependencies.json"
92+
9093
/// Module trace file.
9194
///
9295
/// Module traces are used by Apple's internal build infrastructure. Apple
@@ -138,6 +141,9 @@ extension FileType: CustomStringConvertible {
138141
case .swiftDeps:
139142
return "swift-dependencies"
140143

144+
case .jsonDependencies:
145+
return "json-dependencies"
146+
141147
case .importedModules:
142148
return "imported-modules"
143149

@@ -166,7 +172,8 @@ extension FileType {
166172
case .object, .pch, .ast, .llvmIR, .llvmBitcode, .assembly, .swiftModule,
167173
.importedModules, .indexData, .remap, .dSYM, .autolink, .dependencies,
168174
.swiftDocumentation, .pcm, .diagnostics, .objcHeader, .image,
169-
.swiftDeps, .moduleTrace, .tbd, .optimizationRecord, .swiftInterface, .swiftSourceInfoFile:
175+
.swiftDeps, .moduleTrace, .tbd, .optimizationRecord, .swiftInterface,
176+
.swiftSourceInfoFile, .jsonDependencies:
170177
return false
171178
}
172179
}
@@ -233,6 +240,8 @@ extension FileType {
233240
return "objc-header"
234241
case .swiftDeps:
235242
return "swift-dependencies"
243+
case .jsonDependencies:
244+
return "json-dependencies"
236245
case .importedModules:
237246
return "imported-modules"
238247
case .moduleTrace:
@@ -252,7 +261,7 @@ extension FileType {
252261
switch self {
253262
case .swift, .sil, .dependencies, .assembly, .ast, .raw_sil, .llvmIR,
254263
.objcHeader, .autolink, .importedModules, .tbd, .moduleTrace,
255-
.optimizationRecord, .swiftInterface:
264+
.optimizationRecord, .swiftInterface, .jsonDependencies:
256265
return true
257266
case .image, .object, .dSYM, .pch, .sib, .raw_sib, .swiftModule,
258267
.swiftDocumentation, .swiftSourceInfoFile, .llvmBitcode, .diagnostics,

Tests/SwiftDriverTests/SwiftDriverTests.swift

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1586,6 +1586,30 @@ final class SwiftDriverTests: XCTestCase {
15861586
}
15871587
}
15881588

1589+
func testScanDependenciesOption() throws {
1590+
do {
1591+
var driver = try Driver(args: ["swiftc", "-scan-dependencies", "foo.swift"])
1592+
let plannedJobs = try driver.planBuild()
1593+
XCTAssertEqual(plannedJobs.count, 1)
1594+
let job = plannedJobs[0]
1595+
XCTAssertTrue(job.commandLine.contains(.flag("-scan-dependencies")))
1596+
}
1597+
1598+
// Test .d output
1599+
do {
1600+
var driver = try Driver(args: ["swiftc", "-scan-dependencies",
1601+
"-emit-dependencies", "foo.swift"])
1602+
let plannedJobs = try driver.planBuild()
1603+
XCTAssertEqual(plannedJobs.count, 1)
1604+
let job = plannedJobs[0]
1605+
print("")
1606+
print(job.commandLine)
1607+
XCTAssertTrue(job.commandLine.contains(.flag("-scan-dependencies")))
1608+
XCTAssertTrue(job.commandLine.contains(.flag("-emit-dependencies-path")))
1609+
XCTAssertTrue(job.commandLine.contains(.path(.temporary(RelativePath("foo.d")))))
1610+
}
1611+
}
1612+
15891613
func testPCHGeneration() throws {
15901614
do {
15911615
var driver = try Driver(args: ["swiftc", "-typecheck", "-import-objc-header", "TestInputHeader.h", "foo.swift"])

0 commit comments

Comments
 (0)