cmNinjaTargetGenerator: Factor out helper to add depfile bindings

This commit is contained in:
Brad King
2024-09-12 10:47:04 -04:00
parent 269c3a13c8
commit ad66be9943
3 changed files with 39 additions and 27 deletions

View File

@@ -1163,11 +1163,10 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement(
cmNinjaVars& vars = linkBuild.Variables;
if (this->GeneratorTarget->HasLinkDependencyFile(config)) {
vars["DEP_FILE"] = this->GetLocalGenerator()->ConvertToOutputFormat(
this->ConvertToNinjaPath(
this->GetLocalGenerator()->GetLinkDependencyFile(this->GeneratorTarget,
config)),
cmOutputConverter::SHELL);
this->AddDepfileBinding(vars,
this->ConvertToNinjaPath(
this->GetLocalGenerator()->GetLinkDependencyFile(
this->GeneratorTarget, config)));
}
// Compute the comment.

View File

@@ -1324,7 +1324,7 @@ cmNinjaBuild GetScanBuildStatement(const std::string& ruleName,
bool compilationPreprocesses,
cmNinjaBuild& objBuild, cmNinjaVars& vars,
const std::string& objectFileName,
cmLocalGenerator* lg)
cmNinjaTargetGenerator* tg)
{
cmNinjaBuild scanBuild(ruleName);
@@ -1388,13 +1388,12 @@ cmNinjaBuild GetScanBuildStatement(const std::string& ruleName,
// Scanning always provides a depfile for preprocessor dependencies. This
// variable is unused in `msvc`-deptype scanners.
std::string const& depFileName = cmStrCat(scanBuild.Outputs.front(), ".d");
scanBuild.Variables["DEP_FILE"] =
lg->ConvertToOutputFormat(depFileName, cmOutputConverter::SHELL);
tg->AddDepfileBinding(scanBuild.Variables,
cmStrCat(scanBuild.Outputs.front(), ".d"));
if (compilePP) {
// The actual compilation does not need a depfile because it
// depends on the already-preprocessed source.
vars.erase("DEP_FILE");
tg->RemoveDepfileBinding(vars);
}
return scanBuild;
@@ -1477,13 +1476,13 @@ void cmNinjaTargetGenerator::WriteObjectBuildStatement(
cmStrCat("CMAKE_", language, "_DEPFILE_EXTENSION_REPLACE");
replaceExt = this->Makefile->IsOn(repVar);
}
std::string depfile = replaceExt
? cmStrCat(
objectFileDir, '/',
cmSystemTools::GetFilenameWithoutLastExtension(objectFileName), ".d")
: cmStrCat(objectFileName, ".d");
vars["DEP_FILE"] = this->GetLocalGenerator()->ConvertToOutputFormat(
depfile, cmOutputConverter::SHELL);
this->AddDepfileBinding(
vars,
replaceExt ? cmStrCat(objectFileDir, '/',
cmSystemTools::GetFilenameWithoutLastExtension(
objectFileName),
".d")
: cmStrCat(objectFileName, ".d"));
}
this->SetMsvcTargetPdbVariable(vars, config);
@@ -1608,8 +1607,7 @@ void cmNinjaTargetGenerator::WriteObjectBuildStatement(
cmNinjaBuild ppBuild = GetScanBuildStatement(
scanRuleName, ppFileName, compilePP, compilePPWithDefines,
compilationPreprocesses, objBuild, vars, objectFileName,
this->LocalGenerator);
compilationPreprocesses, objBuild, vars, objectFileName, this);
if (compilePP) {
// In case compilation requires flags that are incompatible with
@@ -1804,13 +1802,13 @@ void cmNinjaTargetGenerator::WriteCxxModuleBmiBuildStatement(
cmStrCat("CMAKE_", language, "_DEPFILE_EXTENSION_REPLACE");
replaceExt = this->Makefile->IsOn(repVar);
}
std::string depfile = replaceExt
? cmStrCat(bmiFileDir, '/',
cmSystemTools::GetFilenameWithoutLastExtension(bmiFileName),
".d")
: cmStrCat(bmiFileName, ".d");
vars["DEP_FILE"] = this->GetLocalGenerator()->ConvertToOutputFormat(
depfile, cmOutputConverter::SHELL);
this->AddDepfileBinding(
vars,
replaceExt
? cmStrCat(bmiFileDir, '/',
cmSystemTools::GetFilenameWithoutLastExtension(bmiFileName),
".d")
: cmStrCat(bmiFileName, ".d"));
}
std::string d =
@@ -1857,7 +1855,7 @@ void cmNinjaTargetGenerator::WriteCxxModuleBmiBuildStatement(
cmNinjaBuild ppBuild = GetScanBuildStatement(
scanRuleName, ppFileName, false, compilePPWithDefines, true, bmiBuild,
vars, bmiFileName, this->LocalGenerator);
vars, bmiFileName, this);
ScanningFiles scanningFiles;
@@ -2497,6 +2495,18 @@ void cmNinjaTargetGenerator::MacOSXContentGeneratorType::operator()(
this->Generator->Configs[config].ExtraFiles.push_back(std::move(output));
}
void cmNinjaTargetGenerator::AddDepfileBinding(
cmNinjaVars& vars, std::string const& depfile) const
{
vars["DEP_FILE"] = this->GetLocalGenerator()->ConvertToOutputFormat(
depfile, cmOutputConverter::SHELL);
}
void cmNinjaTargetGenerator::RemoveDepfileBinding(cmNinjaVars& vars) const
{
vars.erase("DEP_FILE");
}
void cmNinjaTargetGenerator::addPoolNinjaVariable(
const std::string& pool_property, cmGeneratorTarget* target,
cmNinjaVars& vars)

View File

@@ -42,6 +42,9 @@ public:
std::string GetTargetName() const;
void AddDepfileBinding(cmNinjaVars& vars, std::string const& depfile) const;
void RemoveDepfileBinding(cmNinjaVars& vars) const;
protected:
bool SetMsvcTargetPdbVariable(cmNinjaVars&, const std::string& config) const;