cmGlobalNinjaGenerator: Reuse local generator caching of config list

This commit is contained in:
Brad King
2024-06-21 09:28:51 -04:00
parent 48b911e3e5
commit 9f8afacb3e
5 changed files with 12 additions and 16 deletions

View File

@@ -12,8 +12,8 @@
#include "cmGeneratorExpression.h"
#include "cmGeneratorTarget.h"
#include "cmLocalCommonGenerator.h"
#include "cmLocalGenerator.h"
#include "cmMakefile.h"
#include "cmStateDirectory.h"
#include "cmStateSnapshot.h"
#include "cmStateTypes.h"
@@ -38,8 +38,8 @@ cmGlobalCommonGenerator::ComputeDirectoryTargets() const
lg->GetStateSnapshot().GetDirectory().GetCurrentBinary();
DirectoryTarget& dirTarget = dirTargets[currentBinaryDir];
dirTarget.LG = lg.get();
const std::vector<std::string>& configs =
lg->GetMakefile()->GetGeneratorConfigs(cmMakefile::IncludeEmptyConfig);
std::vector<std::string> const& configs =
static_cast<cmLocalCommonGenerator const*>(lg.get())->GetConfigNames();
// The directory-level rule should depend on the target-level rules
// for all targets in the directory.

View File

@@ -603,10 +603,11 @@ cmDocumentationEntry cmGlobalNinjaGenerator::GetDocumentation()
"Generates build.ninja files." };
}
std::vector<std::string> cmGlobalNinjaGenerator::GetConfigNames() const
std::vector<std::string> const& cmGlobalNinjaGenerator::GetConfigNames() const
{
return this->Makefiles.front()->GetGeneratorConfigs(
cmMakefile::IncludeEmptyConfig);
return static_cast<cmLocalNinjaGenerator const*>(
this->LocalGenerators.front().get())
->GetConfigNames();
}
// Implemented in all cmGlobaleGenerator sub-classes.
@@ -1632,8 +1633,7 @@ void cmGlobalNinjaGenerator::WriteFolderTargets(std::ostream& os)
std::string const& currentBinaryDir = it.first;
DirectoryTarget const& dt = it.second;
std::vector<std::string> configs =
dt.LG->GetMakefile()->GetGeneratorConfigs(
cmMakefile::IncludeEmptyConfig);
static_cast<cmLocalNinjaGenerator const*>(dt.LG)->GetConfigNames();
// Setup target
cmNinjaDeps configDeps;

View File

@@ -485,7 +485,7 @@ public:
bool CheckCxxModuleSupport(CxxModuleSupportQuery query) override;
protected:
std::vector<std::string> GetConfigNames() const;
std::vector<std::string> const& GetConfigNames() const;
void Generate() override;

View File

@@ -743,8 +743,6 @@ void cmLocalNinjaGenerator::WriteCustomCommandBuildStatement(
bool cmLocalNinjaGenerator::HasUniqueByproducts(
std::vector<std::string> const& byproducts, cmListFileBacktrace const& bt)
{
std::vector<std::string> configs =
this->GetMakefile()->GetGeneratorConfigs(cmMakefile::IncludeEmptyConfig);
cmGeneratorExpression ge(*this->GetCMakeInstance(), bt);
for (std::string const& p : byproducts) {
if (cmGeneratorExpression::Find(p) == std::string::npos) {
@@ -752,7 +750,7 @@ bool cmLocalNinjaGenerator::HasUniqueByproducts(
}
std::set<std::string> seen;
std::unique_ptr<cmCompiledGeneratorExpression> cge = ge.Parse(p);
for (std::string const& config : configs) {
for (std::string const& config : this->GetConfigNames()) {
for (std::string const& b :
this->ExpandCustomCommandOutputPaths(*cge, config)) {
if (!seen.insert(b).second) {
@@ -800,8 +798,7 @@ std::string cmLocalNinjaGenerator::CreateUtilityOutput(
std::string const base = cmStrCat(this->GetCurrentBinaryDirectory(),
"/CMakeFiles/", targetName, '-');
// The output is not actually created so mark it symbolic.
for (std::string const& config :
this->Makefile->GetGeneratorConfigs(cmMakefile::IncludeEmptyConfig)) {
for (std::string const& config : this->GetConfigNames()) {
std::string const force = cmStrCat(base, config);
if (cmSourceFile* sf = this->Makefile->GetOrCreateGeneratedSource(force)) {
sf->SetProperty("SYMBOLIC", "1");

View File

@@ -87,8 +87,7 @@ cmNinjaTargetGenerator::cmNinjaTargetGenerator(cmGeneratorTarget* target)
, LocalGenerator(
static_cast<cmLocalNinjaGenerator*>(target->GetLocalGenerator()))
{
for (auto const& fileConfig :
target->Makefile->GetGeneratorConfigs(cmMakefile::IncludeEmptyConfig)) {
for (auto const& fileConfig : this->LocalGenerator->GetConfigNames()) {
this->Configs[fileConfig].MacOSXContentGenerator =
cm::make_unique<MacOSXContentGeneratorType>(this, fileConfig);
}