Skip to content

Commit adafa97

Browse files
committed
Emit module semantic info when emitting final modules
1 parent bb96ec9 commit adafa97

File tree

4 files changed

+30
-6
lines changed

4 files changed

+30
-6
lines changed

Sources/SwiftDriver/Driver/Driver.swift

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,9 @@ public struct Driver {
300300
/// Path to the Swift module source information file.
301301
let moduleSourceInfoPath: VirtualPath.Handle?
302302

303+
/// Path to the semantic info file for the module.
304+
let moduleSemanticInfoPath: VirtualPath.Handle?
305+
303306
/// Path to the module's digester baseline file.
304307
let digesterBaselinePath: VirtualPath.Handle?
305308

@@ -704,6 +707,17 @@ public struct Driver {
704707
outputFileMap: self.outputFileMap,
705708
moduleName: moduleOutputInfo.name,
706709
projectDirectory: projectDirectory)
710+
711+
func calculateSemanticInfoPath(_ sourceinfoPath: VirtualPath.Handle?) -> VirtualPath.Handle? {
712+
guard let sourceinfoPath = sourceinfoPath else {
713+
return nil
714+
}
715+
return VirtualPath.lookup(sourceinfoPath)
716+
.replacingExtension(with: .moduleSemanticInfo).intern()
717+
}
718+
719+
// Piggyback semantic info on the source info file.
720+
self.moduleSemanticInfoPath = calculateSemanticInfoPath(self.moduleSourceInfoPath)
707721
self.digesterBaselinePath = try Self.computeDigesterBaselineOutputPath(
708722
&parsedOptions,
709723
moduleOutputPath: self.moduleOutputInfo.output?.outputPath,

Sources/SwiftDriver/Jobs/CompileJob.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ extension Driver {
9393
.privateSwiftInterface, .swiftSourceInfoFile, .diagnostics, .objcHeader, .swiftDeps,
9494
.remap, .tbd, .moduleTrace, .yamlOptimizationRecord, .bitstreamOptimizationRecord, .pcm,
9595
.pch, .clangModuleMap, .jsonCompilerFeatures, .jsonTargetInfo, .jsonSwiftArtifacts,
96-
.indexUnitOutputPath, .modDepCache, .jsonAPIBaseline, .jsonABIBaseline, nil:
96+
.indexUnitOutputPath, .modDepCache, .jsonAPIBaseline, .jsonABIBaseline, .moduleSemanticInfo, nil:
9797
return false
9898
}
9999
}
@@ -445,7 +445,7 @@ extension FileType {
445445
.diagnostics, .objcHeader, .image, .swiftDeps, .moduleTrace, .tbd,
446446
.yamlOptimizationRecord, .bitstreamOptimizationRecord, .swiftInterface,
447447
.privateSwiftInterface, .swiftSourceInfoFile, .clangModuleMap, .jsonSwiftArtifacts,
448-
.indexUnitOutputPath, .modDepCache, .jsonAPIBaseline, .jsonABIBaseline:
448+
.indexUnitOutputPath, .modDepCache, .jsonAPIBaseline, .jsonABIBaseline, .moduleSemanticInfo:
449449
fatalError("Output type can never be a primary output")
450450
}
451451
}

Sources/SwiftDriver/Jobs/EmitModuleJob.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ extension Driver {
3333
addSupplementalOutput(path: objcGeneratedHeaderPath, flag: "-emit-objc-header-path", type: .objcHeader)
3434
addSupplementalOutput(path: tbdPath, flag: "-emit-tbd-path", type: .tbd)
3535

36+
if isFrontendArgSupported(.emitModuleSemanticInfoPath) {
37+
addSupplementalOutput(path: moduleSemanticInfoPath, flag: "-emit-module-semantic-info-path", type: .moduleSemanticInfo)
38+
}
39+
3640
if isMergeModule {
3741
return
3842
}

Sources/SwiftDriver/Utilities/FileType.swift

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@ public enum FileType: String, Hashable, CaseIterable, Codable {
5757
/// Serialized source information.
5858
case swiftSourceInfoFile = "swiftsourceinfo"
5959

60+
/// module semantic info
61+
case moduleSemanticInfo = "swiftsemanticinfo"
62+
6063
/// Assembler source.
6164
case assembly = "s"
6265

@@ -149,7 +152,7 @@ extension FileType: CustomStringConvertible {
149152
switch self {
150153
case .swift, .sil, .sib, .image, .dSYM, .dependencies, .autolink,
151154
.swiftModule, .swiftDocumentation, .swiftInterface, .swiftSourceInfoFile, .assembly,
152-
.remap, .tbd, .pcm, .pch, .clangModuleMap:
155+
.remap, .tbd, .pcm, .pch, .clangModuleMap, .moduleSemanticInfo:
153156
return rawValue
154157
case .object:
155158
return "object"
@@ -236,7 +239,7 @@ extension FileType {
236239
.swiftDeps, .moduleTrace, .tbd, .yamlOptimizationRecord, .bitstreamOptimizationRecord,
237240
.swiftInterface, .privateSwiftInterface, .swiftSourceInfoFile, .jsonDependencies,
238241
.clangModuleMap, .jsonTargetInfo, .jsonCompilerFeatures, .jsonSwiftArtifacts,
239-
.indexUnitOutputPath, .modDepCache, .jsonAPIBaseline, .jsonABIBaseline:
242+
.indexUnitOutputPath, .modDepCache, .jsonAPIBaseline, .jsonABIBaseline, .moduleSemanticInfo:
240243
return false
241244
}
242245
}
@@ -281,6 +284,8 @@ extension FileType {
281284
return "private-swiftinterface"
282285
case .swiftSourceInfoFile:
283286
return "swiftsourceinfo"
287+
case .moduleSemanticInfo:
288+
return "swiftsemanticinfo"
284289
case .clangModuleMap:
285290
return "modulemap"
286291
case .assembly:
@@ -346,7 +351,8 @@ extension FileType {
346351
.objcHeader, .autolink, .importedModules, .tbd, .moduleTrace,
347352
.yamlOptimizationRecord, .swiftInterface, .privateSwiftInterface,
348353
.jsonDependencies, .clangModuleMap, .jsonCompilerFeatures,
349-
.jsonTargetInfo, .jsonSwiftArtifacts, .jsonAPIBaseline, .jsonABIBaseline:
354+
.jsonTargetInfo, .jsonSwiftArtifacts, .jsonAPIBaseline, .jsonABIBaseline,
355+
.moduleSemanticInfo:
350356
return true
351357
case .image, .object, .dSYM, .pch, .sib, .raw_sib, .swiftModule,
352358
.swiftDocumentation, .swiftSourceInfoFile, .llvmBitcode, .diagnostics,
@@ -368,7 +374,7 @@ extension FileType {
368374
.importedModules, .tbd, .moduleTrace, .indexData, .yamlOptimizationRecord, .modDepCache,
369375
.bitstreamOptimizationRecord, .pcm, .pch, .jsonDependencies, .clangModuleMap,
370376
.jsonCompilerFeatures, .jsonTargetInfo, .jsonSwiftArtifacts, .indexUnitOutputPath, .jsonAPIBaseline,
371-
.jsonABIBaseline:
377+
.jsonABIBaseline, .moduleSemanticInfo:
372378
return false
373379
}
374380
}

0 commit comments

Comments
 (0)