summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2019-09-27 08:50:54 -0400
committerBrad King <brad.king@kitware.com>2019-09-30 10:30:28 -0400
commita75586c775eb8f663ca1372ff20f9a51e1ad420d (patch)
treeda2ae0b6b895709dc89073a0d74edfe58d947343
parenta49cd4d1a75f20180a349cdfea3fd384eedf3e8b (diff)
downloadcmake-a75586c775eb8f663ca1372ff20f9a51e1ad420d.tar.gz
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.
-rw-r--r--Source/cmGlobalNinjaGenerator.cxx45
-rw-r--r--Source/cmGlobalNinjaGenerator.h12
-rw-r--r--Source/cmLocalNinjaGenerator.cxx6
3 files changed, 14 insertions, 49 deletions
diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx
index 62106ac5da..3497828cbf 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<std::string, cmNinjaDeps> 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 35499469c9..1bfbffa15e 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<cmLocalGenerator*>& 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<std::string, int> 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 fed8be53e1..187a8472e9 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);
- }
}
}