mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
[Driver] Make the TBD file behave more like a normal auxiliary output.
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user