Skip to content

Commit 43fb346

Browse files
[Frontend] Set up output file .swiftmodule.summary
This patch focus on teaching frontend and driver to emit this file. The actual serialization and deserialization implementation will come later.
1 parent e387b36 commit 43fb346

18 files changed

+151
-1
lines changed

include/swift/AST/DiagnosticsFrontend.def

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,8 @@ ERROR(error_mode_cannot_emit_module_source_info,none,
125125
"this mode does not support emitting module source info files", ())
126126
ERROR(error_mode_cannot_emit_interface,none,
127127
"this mode does not support emitting module interface files", ())
128+
ERROR(error_mode_cannot_emit_module_summary,none,
129+
"this mode does not support emitting module summary files", ())
128130
ERROR(cannot_emit_ir_skipping_function_bodies,none,
129131
"-experimental-skip-non-inlinable-function-bodies does not support "
130132
"emitting IR", ())

include/swift/Basic/FileTypes.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ TYPE("swiftmodule", SwiftModuleFile, "swiftmodule", "")
5151
TYPE("swiftdoc", SwiftModuleDocFile, "swiftdoc", "")
5252
TYPE("swiftinterface", SwiftModuleInterfaceFile, "swiftinterface", "")
5353
TYPE("private-swiftinterface", PrivateSwiftModuleInterfaceFile, "private.swiftinterface", "")
54+
TYPE("swiftmodulesummary", SwiftModuleSummaryFile, "swiftmodulesummary", "")
5455
TYPE("swiftsourceinfo", SwiftSourceInfoFile, "swiftsourceinfo", "")
5556
TYPE("assembly", Assembly, "s", "")
5657
TYPE("raw-sil", RawSIL, "sil", "")

include/swift/Basic/PrimarySpecificPaths.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ class PrimarySpecificPaths {
4949
return !SupplementaryOutputs.ModuleOutputPath.empty() ||
5050
!SupplementaryOutputs.ModuleDocOutputPath.empty();
5151
}
52+
bool haveModuleSummaryOutputPath() const {
53+
return !SupplementaryOutputs.ModuleSummaryOutputPath.empty();
54+
}
5255
};
5356
} // namespace swift
5457

include/swift/Basic/SupplementaryOutputPaths.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,9 @@ struct SupplementaryOutputPaths {
165165
/// name per symbol, we should eventually remove this.
166166
std::string LdAddCFilePath;
167167

168+
/// The path to which we should emit module summary file.
169+
std::string ModuleSummaryOutputPath;
170+
168171
SupplementaryOutputPaths() = default;
169172
SupplementaryOutputPaths(const SupplementaryOutputPaths &) = default;
170173

include/swift/Driver/Driver.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,11 @@ class Driver {
366366
file_types::ID fileType,
367367
CommandOutput *output) const;
368368

369+
void chooseModuleSummaryPath(Compilation &C, const TypeToPathMap *OutputMap,
370+
StringRef workingDirectory,
371+
llvm::SmallString<128> &Buf,
372+
CommandOutput *Output) const;
373+
369374
void chooseRemappingOutputPath(Compilation &C, const TypeToPathMap *OutputMap,
370375
CommandOutput *Output) const;
371376

include/swift/Frontend/FrontendInputsAndOutputs.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,7 @@ class FrontendInputsAndOutputs {
239239
bool hasModuleSourceInfoOutputPath() const;
240240
bool hasModuleInterfaceOutputPath() const;
241241
bool hasPrivateModuleInterfaceOutputPath() const;
242+
bool hasModuleSummaryOutputPath() const;
242243
bool hasTBDPath() const;
243244

244245
bool hasDependencyTrackerPath() const;

include/swift/Frontend/FrontendOptions.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,7 @@ class FrontendOptions {
333333
static bool canActionEmitLoadedModuleTrace(ActionType);
334334
static bool canActionEmitModule(ActionType);
335335
static bool canActionEmitModuleDoc(ActionType);
336+
static bool canActionEmitModuleSummary(ActionType);
336337
static bool canActionEmitInterface(ActionType);
337338

338339
public:

include/swift/Option/Options.td

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -443,6 +443,17 @@ def emit_module_path_EQ : Joined<["-"], "emit-module-path=">,
443443
ArgumentIsPath, SupplementaryOutput]>,
444444
Alias<emit_module_path>;
445445

446+
def emit_module_summary :
447+
Flag<["-"], "emit-module-summary">,
448+
Flags<[NoInteractiveOption, DoesNotAffectIncrementalBuild,
449+
SupplementaryOutput]>,
450+
HelpText<"Output module summary file">;
451+
def emit_module_summary_path :
452+
Separate<["-"], "emit-module-summary-path">,
453+
Flags<[FrontendOption, NoInteractiveOption, DoesNotAffectIncrementalBuild,
454+
ArgumentIsPath, SupplementaryOutput]>,
455+
MetaVarName<"<path>">, HelpText<"Output module summary file to <path>">;
456+
446457
def emit_module_interface :
447458
Flag<["-"], "emit-module-interface">,
448459
Flags<[NoInteractiveOption, DoesNotAffectIncrementalBuild,

lib/Basic/FileTypes.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ bool file_types::isTextual(ID Id) {
9494
case file_types::TY_SwiftModuleDocFile:
9595
case file_types::TY_SwiftSourceInfoFile:
9696
case file_types::TY_SwiftCrossImportDir:
97+
case file_types::TY_SwiftModuleSummaryFile:
9798
case file_types::TY_LLVM_BC:
9899
case file_types::TY_SerializedDiagnostics:
99100
case file_types::TY_ClangModuleFile:
@@ -138,6 +139,7 @@ bool file_types::isAfterLLVM(ID Id) {
138139
case file_types::TY_SwiftModuleDocFile:
139140
case file_types::TY_SwiftSourceInfoFile:
140141
case file_types::TY_SwiftCrossImportDir:
142+
case file_types::TY_SwiftModuleSummaryFile:
141143
case file_types::TY_SwiftOverlayFile:
142144
case file_types::TY_SerializedDiagnostics:
143145
case file_types::TY_ClangModuleFile:
@@ -189,6 +191,7 @@ bool file_types::isPartOfSwiftCompilation(ID Id) {
189191
case file_types::TY_SwiftSourceInfoFile:
190192
case file_types::TY_SwiftCrossImportDir:
191193
case file_types::TY_SwiftOverlayFile:
194+
case file_types::TY_SwiftModuleSummaryFile:
192195
case file_types::TY_SerializedDiagnostics:
193196
case file_types::TY_ClangModuleFile:
194197
case file_types::TY_SwiftDeps:

lib/Driver/Driver.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2004,6 +2004,7 @@ void Driver::buildActions(SmallVectorImpl<const Action *> &TopLevelActions,
20042004
case file_types::TY_BitstreamOptRecord:
20052005
case file_types::TY_SwiftModuleInterfaceFile:
20062006
case file_types::TY_PrivateSwiftModuleInterfaceFile:
2007+
case file_types::TY_SwiftModuleSummaryFile:
20072008
case file_types::TY_SwiftCrossImportDir:
20082009
case file_types::TY_SwiftOverlayFile:
20092010
case file_types::TY_JSONDependencies:
@@ -2855,6 +2856,10 @@ Job *Driver::buildJobsForAction(Compilation &C, const JobAction *JA,
28552856
Output.get());
28562857
}
28572858

2859+
if (isa<CompileJobAction>(JA)) {
2860+
chooseModuleSummaryPath(C, OutputMap, workingDirectory, Buf, Output.get());
2861+
}
2862+
28582863
if (isa<MergeModuleJobAction>(JA) ||
28592864
(isa<CompileJobAction>(JA) &&
28602865
OI.CompilerMode == OutputInfo::Mode::SingleCompile)) {
@@ -3208,6 +3213,22 @@ void Driver::chooseModuleInterfacePath(Compilation &C, const JobAction *JA,
32083213
output->setAdditionalOutputForType(fileType, outputPath);
32093214
}
32103215

3216+
void Driver::chooseModuleSummaryPath(Compilation &C,
3217+
const TypeToPathMap *OutputMap,
3218+
StringRef workingDirectory,
3219+
llvm::SmallString<128> &Buf,
3220+
CommandOutput *Output) const {
3221+
StringRef pathFromArgs;
3222+
if (const Arg *A =
3223+
C.getArgs().getLastArg(options::OPT_emit_module_summary_path)) {
3224+
pathFromArgs = A->getValue();
3225+
}
3226+
3227+
addAuxiliaryOutput(C, *Output, file_types::TY_SwiftModuleSummaryFile,
3228+
OutputMap, workingDirectory, pathFromArgs,
3229+
/*requireArg=*/options::OPT_emit_module_summary);
3230+
}
3231+
32113232
void Driver::chooseSerializedDiagnosticsPath(Compilation &C,
32123233
const JobAction *JA,
32133234
const TypeToPathMap *OutputMap,

0 commit comments

Comments
 (0)