From a75586c775eb8f663ca1372ff20f9a51e1ad420d Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 27 Sep 2019 08:50:54 -0400 Subject: Ninja: Simplify top-level "all" target generation Remove its dedicated implementation and update the per-directory "all" target generation to work for the top-level directory too. --- Source/cmGlobalNinjaGenerator.cxx | 45 +++++++++++---------------------------- Source/cmGlobalNinjaGenerator.h | 12 +---------- Source/cmLocalNinjaGenerator.cxx | 6 ------ 3 files changed, 14 insertions(+), 49 deletions(-) diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx index 62106ac..3497828 100644 --- a/Source/cmGlobalNinjaGenerator.cxx +++ b/Source/cmGlobalNinjaGenerator.cxx @@ -20,6 +20,7 @@ #include "cmGeneratedFileStream.h" #include "cmGeneratorExpressionEvaluationFile.h" #include "cmGeneratorTarget.h" +#include "cmGlobalGenerator.h" #include "cmListFileCache.h" #include "cmLocalGenerator.h" #include "cmLocalNinjaGenerator.h" @@ -888,11 +889,6 @@ void cmGlobalNinjaGenerator::WriteDisclaimer(std::ostream& os) << cmVersion::GetMinorVersion() << "\n\n"; } -void cmGlobalNinjaGenerator::AddDependencyToAll(cmGeneratorTarget* target) -{ - this->AppendTargetOutputs(target, this->AllDependencies); -} - void cmGlobalNinjaGenerator::WriteAssumedSourceDependencies() { for (auto const& asd : this->AssumedSourceDependencies) { @@ -1091,19 +1087,11 @@ void cmGlobalNinjaGenerator::WriteFolderTargets(std::ostream& os) cmGlobalNinjaGenerator::WriteDivider(os); os << "# Folder targets.\n\n"; - std::string const& rootBinaryDir = - this->LocalGenerators[0]->GetBinaryDirectory(); - std::map targetsPerFolder; for (cmLocalGenerator const* lg : this->LocalGenerators) { std::string const& currentBinaryFolder( lg->GetStateSnapshot().GetDirectory().GetCurrentBinary()); - // Do not generate a rule for the root binary dir. - if (currentBinaryFolder == rootBinaryDir) { - continue; - } - // The directory-level rule should depend on the target-level rules // for all targets in the directory. cmNinjaDeps& folderTargets = targetsPerFolder[currentBinaryFolder]; @@ -1121,19 +1109,16 @@ void cmGlobalNinjaGenerator::WriteFolderTargets(std::ostream& os) continue; } // This target has been explicitly un-excluded. The directory-level - // rule for every directory between this and the root (exclusive) - // should depend on the target-level rule for this target. - cmStateSnapshot dir = - lg->GetStateSnapshot().GetBuildsystemDirectoryParent(); - cmStateSnapshot parent = dir.GetBuildsystemDirectoryParent(); - while (parent.IsValid()) { + // rule for every directory between this and the root should depend + // on the target-level rule for this target. + for (cmStateSnapshot dir = + lg->GetStateSnapshot().GetBuildsystemDirectoryParent(); + dir.IsValid(); dir = dir.GetBuildsystemDirectoryParent()) { std::string const& folder = dir.GetDirectory().GetCurrentBinary(); - targetsPerFolder[folder].push_back(gt->GetName()); - dir = parent; - parent = parent.GetBuildsystemDirectoryParent(); + this->AppendTargetOutputs(gt, targetsPerFolder[folder]); } } - folderTargets.push_back(gt->GetName()); + this->AppendTargetOutputs(gt, folderTargets); } } @@ -1296,22 +1281,18 @@ void cmGlobalNinjaGenerator::WriteBuiltinTargets(std::ostream& os) cmGlobalNinjaGenerator::WriteDivider(os); os << "# Built-in targets\n\n"; - this->WriteTargetAll(os); + this->WriteTargetDefault(os); this->WriteTargetRebuildManifest(os); this->WriteTargetClean(os); this->WriteTargetHelp(os); } -void cmGlobalNinjaGenerator::WriteTargetAll(std::ostream& os) +void cmGlobalNinjaGenerator::WriteTargetDefault(std::ostream& os) { - cmNinjaBuild build("phony"); - build.Comment = "The main all target."; - build.Outputs.push_back(this->TargetAll); - build.ExplicitDeps = this->AllDependencies; - this->WriteBuild(os, build); - if (!this->HasOutputPathPrefix()) { - cmGlobalNinjaGenerator::WriteDefault(os, build.Outputs, + cmNinjaDeps all; + all.push_back(this->TargetAll); + cmGlobalNinjaGenerator::WriteDefault(os, all, "Make the all target the default."); } } diff --git a/Source/cmGlobalNinjaGenerator.h b/Source/cmGlobalNinjaGenerator.h index 3549946..1bfbffa 100644 --- a/Source/cmGlobalNinjaGenerator.h +++ b/Source/cmGlobalNinjaGenerator.h @@ -17,7 +17,6 @@ #include "cmGeneratedFileStream.h" #include "cmGlobalCommonGenerator.h" -#include "cmGlobalGenerator.h" #include "cmGlobalGeneratorFactory.h" #include "cmNinjaTypes.h" #include "cmPolicies.h" @@ -294,18 +293,12 @@ public: cmNinjaDeps& outputs); void AppendTargetDependsClosure(cmGeneratorTarget const* target, cmNinjaOuts& outputs, bool omit_self); - void AddDependencyToAll(cmGeneratorTarget* target); const std::vector& GetLocalGenerators() const { return LocalGenerators; } - bool IsExcluded(cmLocalGenerator* root, cmGeneratorTarget* target) - { - return cmGlobalGenerator::IsExcluded(root, target); - } - int GetRuleCmdLength(const std::string& name) { return RuleCmdLength[name]; } void AddTargetAlias(const std::string& alias, cmGeneratorTarget* target); @@ -372,7 +365,7 @@ private: void WriteUnknownExplicitDependencies(std::ostream& os); void WriteBuiltinTargets(std::ostream& os); - void WriteTargetAll(std::ostream& os); + void WriteTargetDefault(std::ostream& os); void WriteTargetRebuildManifest(std::ostream& os); bool WriteTargetCleanAdditional(std::ostream& os); void WriteTargetClean(std::ostream& os); @@ -399,9 +392,6 @@ private: /// Length of rule command, used by rsp file evaluation std::unordered_map RuleCmdLength; - /// The set of dependencies to add to the "all" target. - cmNinjaDeps AllDependencies; - bool UsingGCCOnWindows = false; /// The set of custom commands we have seen. diff --git a/Source/cmLocalNinjaGenerator.cxx b/Source/cmLocalNinjaGenerator.cxx index fed8be5..187a847 100644 --- a/Source/cmLocalNinjaGenerator.cxx +++ b/Source/cmLocalNinjaGenerator.cxx @@ -88,12 +88,6 @@ void cmLocalNinjaGenerator::Generate() auto tg = cmNinjaTargetGenerator::New(target); if (tg) { tg->Generate(); - // Add the target to "all" if required. - if (!this->GetGlobalNinjaGenerator()->IsExcluded( - this->GetGlobalNinjaGenerator()->GetLocalGenerators()[0], - target)) { - this->GetGlobalNinjaGenerator()->AddDependencyToAll(target); - } } } -- cgit v0.12