[Driver] Make the TBD file behave more like a normal auxiliary output.

This commit is contained in:
Huon Wilson
2018-06-29 11:17:18 +10:00
parent f80d113306
commit 9dab667544
3 changed files with 34 additions and 20 deletions

View File

@@ -2149,11 +2149,11 @@ static bool hasExistingAdditionalOutput(CommandOutput &output,
return false;
}
static void addAuxiliaryOutput(Compilation &C, CommandOutput &output,
file_types::ID outputType, const OutputInfo &OI,
const TypeToPathMap *outputMap,
StringRef workingDirectory,
StringRef outputPath = StringRef()) {
static void addAuxiliaryOutput(
Compilation &C, CommandOutput &output, file_types::ID outputType,
const OutputInfo &OI, const TypeToPathMap *outputMap,
StringRef workingDirectory, StringRef outputPath = StringRef(),
llvm::opt::OptSpecifier requireArg = llvm::opt::OptSpecifier()) {
if (hasExistingAdditionalOutput(output, outputType, outputPath))
return;
@@ -2170,6 +2170,10 @@ static void addAuxiliaryOutput(Compilation &C, CommandOutput &output,
output.setAdditionalOutputForType(outputType, outputMapPath);
} else if (!outputPath.empty()) {
output.setAdditionalOutputForType(outputType, outputPath);
} else if (requireArg.isValid() && !C.getArgs().getLastArg(requireArg)) {
// This auxiliary output only exists if requireArg is passed, but it
// wasn't this time.
return;
} else {
// Put the auxiliary output file next to "the" primary output file.
//
@@ -2396,6 +2400,9 @@ Job *Driver::buildJobsForAction(Compilation &C, const JobAction *JA,
Output.get());
}
if (isa<CompileJobAction>(JA))
chooseTBDPath(C, OI, OutputMap, workingDirectory, Buf, Output.get());
if (isa<CompileJobAction>(JA))
chooseDependenciesOutputPaths(C, OI, OutputMap, workingDirectory, Buf,
Output.get());
@@ -2715,7 +2722,6 @@ void Driver::chooseDependenciesOutputPaths(Compilation &C, const OutputInfo &OI,
workingDirectory);
}
chooseLoadedModuleTracePath(C, OI, workingDirectory, Buf, Output);
chooseTBDPath(C, OI, workingDirectory, Buf, Output);
}
void Driver::chooseLoadedModuleTracePath(Compilation &C, const OutputInfo &OI,
@@ -2752,22 +2758,18 @@ void Driver::chooseLoadedModuleTracePath(Compilation &C, const OutputInfo &OI,
}
void Driver::chooseTBDPath(Compilation &C, const OutputInfo &OI,
const TypeToPathMap *OutputMap,
StringRef workingDirectory,
llvm::SmallString<128> &Buf,
CommandOutput *Output) const {
if (C.getArgs().hasArg(options::OPT_emit_tbd, options::OPT_emit_tbd_path)) {
if (OI.CompilerMode != OutputInfo::Mode::SingleCompile) {
llvm::outs() << "TBD emission has been disabled, because it requires a "
<< "single compiler invocation: consider enabling the "
<< "-whole-module-optimization flag.\n";
} else {
auto filename = *getOutputFilenameFromPathArgOrAsTopLevel(
OI, C.getArgs(), options::OPT_emit_tbd_path, file_types::TY_TBD,
/*TreatAsTopLevelOutput=*/true, workingDirectory, "tbd", Buf);
Output->setAdditionalOutputForType(file_types::TY_TBD, filename);
}
StringRef pathFromArgs;
if (const Arg *A = C.getArgs().getLastArg(options::OPT_emit_tbd_path)) {
pathFromArgs = A->getValue();
}
addAuxiliaryOutput(C, *Output, file_types::TY_TBD, OI, OutputMap,
workingDirectory, pathFromArgs,
/*requireArg=*/options::OPT_emit_tbd);
}
void Driver::chooseOptimizationRecordPath(Compilation &C, const OutputInfo &OI,