Skip to content

Commit 04cdb09

Browse files
authored
Merge pull request #97 from artemcm/NewDriverFastDependencyScanner
Support invoking the Fast Dependency Scanner: `-scan-dependencies`
2 parents bb10f18 + 9835e6d commit 04cdb09

File tree

5 files changed

+43
-4
lines changed

5 files changed

+43
-4
lines changed

Sources/SwiftDriver/Driver/Driver.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -969,6 +969,9 @@ extension Driver {
969969
case .interpret:
970970
compilerOutputType = nil
971971

972+
case .scanDependencies:
973+
compilerOutputType = .jsonDependencies
974+
972975
default:
973976
fatalError("unhandled output mode option \(outputOption)")
974977
}

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)
@@ -242,6 +242,8 @@ extension FileType {
242242
return .typecheck
243243
case .remap:
244244
return .updateCode
245+
case .jsonDependencies:
246+
return .scanDependencies
245247

246248
case .swift, .dSYM, .autolink, .dependencies, .swiftDocumentation, .pcm,
247249
.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: 12 additions & 3 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,
@@ -270,7 +279,7 @@ extension FileType {
270279
case .swift, .sil, .sib, .ast, .image, .dSYM, .dependencies, .autolink,
271280
.swiftModule, .swiftDocumentation, .swiftInterface, .swiftSourceInfoFile,
272281
.raw_sil, .raw_sib, .diagnostics, .objcHeader, .swiftDeps, .remap, .importedModules,
273-
.tbd, .moduleTrace, .indexData, .optimizationRecord, .pcm, .pch:
282+
.tbd, .moduleTrace, .indexData, .optimizationRecord, .pcm, .pch, .jsonDependencies:
274283
return false
275284
}
276285
}

Tests/SwiftDriverTests/SwiftDriverTests.swift

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1613,6 +1613,30 @@ final class SwiftDriverTests: XCTestCase {
16131613
}
16141614
}
16151615

1616+
func testScanDependenciesOption() throws {
1617+
do {
1618+
var driver = try Driver(args: ["swiftc", "-scan-dependencies", "foo.swift"])
1619+
let plannedJobs = try driver.planBuild()
1620+
XCTAssertEqual(plannedJobs.count, 1)
1621+
let job = plannedJobs[0]
1622+
XCTAssertTrue(job.commandLine.contains(.flag("-scan-dependencies")))
1623+
}
1624+
1625+
// Test .d output
1626+
do {
1627+
var driver = try Driver(args: ["swiftc", "-scan-dependencies",
1628+
"-emit-dependencies", "foo.swift"])
1629+
let plannedJobs = try driver.planBuild()
1630+
XCTAssertEqual(plannedJobs.count, 1)
1631+
let job = plannedJobs[0]
1632+
print("")
1633+
print(job.commandLine)
1634+
XCTAssertTrue(job.commandLine.contains(.flag("-scan-dependencies")))
1635+
XCTAssertTrue(job.commandLine.contains(.flag("-emit-dependencies-path")))
1636+
XCTAssertTrue(job.commandLine.contains(.path(.temporary(RelativePath("foo.d")))))
1637+
}
1638+
}
1639+
16161640
func testPCHGeneration() throws {
16171641
do {
16181642
var driver = try Driver(args: ["swiftc", "-typecheck", "-import-objc-header", "TestInputHeader.h", "foo.swift"])

0 commit comments

Comments
 (0)