[Frontend] -frontend -emit-loaded-module-trace.

The -frontend jobs can output a JSON file summarizing the
swiftmodules (etc.) they load during compilation.
This commit is contained in:
Huon Wilson
2017-04-19 16:49:37 -07:00
parent acf4f6e27e
commit 87aa3e6935
13 changed files with 203 additions and 1 deletions

View File

@@ -676,6 +676,10 @@ static bool ParseFrontendArgs(FrontendOptions &Opts, ArgList &Args,
OPT_emit_objc_header,
OPT_emit_objc_header_path,
"h", false);
determineOutputFilename(Opts.LoadedModuleTracePath,
OPT_emit_loaded_module_trace,
OPT_emit_loaded_module_trace_path,
"trace.json", false);
if (const Arg *A = Args.getLastArg(OPT_emit_fixits_path)) {
Opts.FixitsOutputPath = A->getValue();
@@ -765,6 +769,39 @@ static bool ParseFrontendArgs(FrontendOptions &Opts, ArgList &Args,
}
}
if (!Opts.LoadedModuleTracePath.empty()) {
switch (Opts.RequestedAction) {
case FrontendOptions::NoneAction:
case FrontendOptions::Parse:
case FrontendOptions::DumpParse:
case FrontendOptions::DumpInterfaceHash:
case FrontendOptions::DumpAST:
case FrontendOptions::PrintAST:
case FrontendOptions::DumpScopeMaps:
case FrontendOptions::DumpTypeRefinementContexts:
case FrontendOptions::Immediate:
case FrontendOptions::REPL:
case FrontendOptions::UpdateCode:
Diags.diagnose(SourceLoc(),
diag::error_mode_cannot_emit_loaded_module_trace);
return true;
case FrontendOptions::Typecheck:
case FrontendOptions::EmitModuleOnly:
case FrontendOptions::EmitPCH:
case FrontendOptions::EmitSILGen:
case FrontendOptions::EmitSIL:
case FrontendOptions::EmitSIBGen:
case FrontendOptions::EmitSIB:
case FrontendOptions::EmitIR:
case FrontendOptions::EmitBC:
case FrontendOptions::EmitAssembly:
case FrontendOptions::EmitObject:
case FrontendOptions::EmitImportedModules:
case FrontendOptions::EmitTBD:
break;
}
}
if (!Opts.ModuleOutputPath.empty() ||
!Opts.ModuleDocOutputPath.empty()) {
switch (Opts.RequestedAction) {