Skip to content

Commit 28a37a4

Browse files
committed
Add Real Enable/Disable Flags for Cross-Module Incremental Builds
In the legacy driver, these flags will merely be propagated to the frontends to indicate that they should disable serialization of incremental information in swift module files. In the new driver, these flags control whether the Swift driver performs an incremental build that is aware of metadata embedded in the module. Kudos to David for coming up with our new marketing name: Incremental Imports. rdar://74363450
1 parent 53069e2 commit 28a37a4

File tree

9 files changed

+28
-13
lines changed

9 files changed

+28
-13
lines changed

include/swift/Frontend/FrontendOptions.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@ class FrontendOptions {
298298
///
299299
/// This flag is currently only propagated from the driver to
300300
/// any merge-modules jobs.
301-
bool EnableExperimentalCrossModuleIncrementalBuild = false;
301+
bool DisableCrossModuleIncrementalBuild = false;
302302

303303
/// Best effort to output a .swiftmodule regardless of any compilation
304304
/// errors. SIL generation and serialization is skipped entirely when there

include/swift/Option/Options.td

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1111,6 +1111,18 @@ def emit_supported_features : Flag<["-"], "emit-supported-features">,
11111111
HelpText<"Emit a JSON file including all supported compiler features">, ModeOpt,
11121112
Flags<[FrontendOption, NoInteractiveOption, DoesNotAffectIncrementalBuild]>;
11131113

1114+
def enable_incremental_imports :
1115+
Flag<["-"], "enable-incremental-imports">,
1116+
Flags<[FrontendOption]>,
1117+
HelpText<"Enable cross-module incremental build metadata and "
1118+
"driver scheduling for Swift modules">;
1119+
1120+
def disable_incremental_imports :
1121+
Flag<["-"], "disable-incremental-imports">,
1122+
Flags<[FrontendOption]>,
1123+
HelpText<"Disable cross-module incremental build metadata and "
1124+
"driver scheduling for Swift modules">;
1125+
11141126
def index_file : Flag<["-"], "index-file">,
11151127
HelpText<"Produce index data for a source file">, ModeOpt,
11161128
Flags<[NoInteractiveOption, DoesNotAffectIncrementalBuild]>;

include/swift/Serialization/SerializationOptions.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ namespace swift {
132132
bool SerializeAllSIL = false;
133133
bool SerializeOptionsForDebugging = false;
134134
bool IsSIB = false;
135-
bool ExperimentalCrossModuleIncrementalInfo = false;
135+
bool DisableCrossModuleIncrementalInfo = false;
136136
};
137137

138138
} // end namespace swift

lib/Driver/Driver.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1008,8 +1008,9 @@ Driver::buildCompilation(const ToolChain &TC,
10081008
const bool EmitFineGrainedDependencyDotFileAfterEveryImport = ArgList->hasArg(
10091009
options::
10101010
OPT_driver_emit_fine_grained_dependency_dot_file_after_every_import);
1011-
const bool EnableCrossModuleDependencies = ArgList->hasArg(
1012-
options::OPT_enable_experimental_cross_module_incremental_build);
1011+
const bool EnableCrossModuleDependencies
1012+
= ArgList->hasArg(options::OPT_enable_incremental_imports,
1013+
options::OPT_disable_incremental_imports, true);
10131014

10141015
// clang-format off
10151016
C = std::make_unique<Compilation>(

lib/Driver/ToolChains.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1050,9 +1050,7 @@ ToolChain::constructInvocation(const MergeModuleJobAction &job,
10501050

10511051
context.Args.AddLastArg(Arguments, options::OPT_import_objc_header);
10521052

1053-
context.Args.AddLastArg(
1054-
Arguments,
1055-
options::OPT_enable_experimental_cross_module_incremental_build);
1053+
context.Args.AddLastArg(Arguments, options::OPT_disable_incremental_imports);
10561054

10571055
Arguments.push_back("-module-name");
10581056
Arguments.push_back(context.Args.MakeArgString(context.OI.ModuleName));

lib/Frontend/ArgsToFrontendOptionsConverter.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,8 @@ bool ArgsToFrontendOptionsConverter::convert(
103103

104104
Opts.ImportPrescan |= Args.hasArg(OPT_import_prescan);
105105

106-
Opts.EnableExperimentalCrossModuleIncrementalBuild |=
107-
Args.hasArg(OPT_enable_experimental_cross_module_incremental_build);
106+
Opts.DisableCrossModuleIncrementalBuild |=
107+
Args.hasArg(OPT_disable_incremental_imports);
108108

109109
// Always track system dependencies when scanning dependencies.
110110
if (const Arg *ModeArg = Args.getLastArg(OPT_modes_Group)) {

lib/Frontend/Frontend.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,8 +178,8 @@ SerializationOptions CompilerInvocation::computeSerializationOptions(
178178
opts.SerializeOptionsForDebugging.getValueOr(
179179
!isModuleExternallyConsumed(module));
180180

181-
serializationOpts.ExperimentalCrossModuleIncrementalInfo =
182-
opts.EnableExperimentalCrossModuleIncrementalBuild;
181+
serializationOpts.DisableCrossModuleIncrementalInfo =
182+
opts.DisableCrossModuleIncrementalBuild;
183183

184184
return serializationOpts;
185185
}

lib/FrontendTool/FrontendTool.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1536,7 +1536,11 @@ static bool performCompileStepsPostSILGen(CompilerInstance &Instance,
15361536

15371537
SerializationOptions serializationOpts =
15381538
Invocation.computeSerializationOptions(outs, Instance.getMainModule());
1539-
if (serializationOpts.ExperimentalCrossModuleIncrementalInfo) {
1539+
1540+
const bool canEmitIncrementalInfoIntoModule =
1541+
!serializationOpts.DisableCrossModuleIncrementalInfo &&
1542+
(Action == FrontendOptions::ActionType::MergeModules);
1543+
if (canEmitIncrementalInfoIntoModule) {
15401544
const auto alsoEmitDotFile =
15411545
Instance.getInvocation()
15421546
.getLangOptions()

lib/Serialization/Serialization.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5482,7 +5482,7 @@ void Serializer::writeToStream(
54825482
S.writeInputBlock(options);
54835483
S.writeSIL(SILMod, options.SerializeAllSIL);
54845484
S.writeAST(DC);
5485-
if (options.ExperimentalCrossModuleIncrementalInfo && DepGraph) {
5485+
if (!options.DisableCrossModuleIncrementalInfo && DepGraph) {
54865486
fine_grained_dependencies::writeFineGrainedDependencyGraph(
54875487
S.Out, *DepGraph, fine_grained_dependencies::Purpose::ForSwiftModule);
54885488
}

0 commit comments

Comments
 (0)