[Cmake-commits] CMake branch, next, updated. v2.8.12.1-5789-g8ff4e15
Peter Kuemmel
syntheticpp at gmx.net
Mon Nov 25 15:01:42 EST 2013
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".
The branch, next has been updated
via 8ff4e153255c9cb5c51472edbed05cc512e676cb (commit)
via 8e393fb16ff696529af5d9e41fbcfc35df6ef54c (commit)
from 6cded41aa518f13addafe0af22c693cdbc2bd29f (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=8ff4e153255c9cb5c51472edbed05cc512e676cb
commit 8ff4e153255c9cb5c51472edbed05cc512e676cb
Merge: 6cded41 8e393fb
Author: Peter Kuemmel <syntheticpp at gmx.net>
AuthorDate: Mon Nov 25 15:01:38 2013 -0500
Commit: CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Mon Nov 25 15:01:38 2013 -0500
Merge topic 'ninja-compile-link-pool' into next
8e393fb Ninja: job pool support for compiling and linking
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=8e393fb16ff696529af5d9e41fbcfc35df6ef54c
commit 8e393fb16ff696529af5d9e41fbcfc35df6ef54c
Author: Peter Kümmel <syntheticpp at gmx.net>
AuthorDate: Sat Nov 23 10:49:36 2013 +0100
Commit: Peter Kümmel <syntheticpp at gmx.net>
CommitDate: Mon Nov 25 21:01:13 2013 +0100
Ninja: job pool support for compiling and linking
Could be tested by setting the environment
variable NINJA_STATUS=[%r]
diff --git a/Help/manual/cmake-properties.7.rst b/Help/manual/cmake-properties.7.rst
index abc6fde..c70c08b 100644
--- a/Help/manual/cmake-properties.7.rst
+++ b/Help/manual/cmake-properties.7.rst
@@ -27,6 +27,7 @@ Properties of Global Scope
/prop_gbl/IN_TRY_COMPILE
/prop_gbl/PACKAGES_FOUND
/prop_gbl/PACKAGES_NOT_FOUND
+ /prop_gbl/JOB_POOLS
/prop_gbl/PREDEFINED_TARGETS_FOLDER
/prop_gbl/ECLIPSE_EXTRA_NATURES
/prop_gbl/REPORT_UNDEFINED_PROPERTIES
@@ -147,6 +148,8 @@ Properties on Targets
/prop_tgt/INTERFACE_SYSTEM_INCLUDE_DIRECTORIES
/prop_tgt/INTERPROCEDURAL_OPTIMIZATION_CONFIG
/prop_tgt/INTERPROCEDURAL_OPTIMIZATION
+ /prop_tgt/JOB_POOL_COMPILE
+ /prop_tgt/JOB_POOL_LINK
/prop_tgt/LABELS
/prop_tgt/LANG_VISIBILITY_PRESET
/prop_tgt/LIBRARY_OUTPUT_DIRECTORY_CONFIG
diff --git a/Help/manual/cmake-variables.7.rst b/Help/manual/cmake-variables.7.rst
index a46539f..4e24823 100644
--- a/Help/manual/cmake-variables.7.rst
+++ b/Help/manual/cmake-variables.7.rst
@@ -41,6 +41,8 @@ Variables that Provide Information
/variable/CMAKE_HOME_DIRECTORY
/variable/CMAKE_IMPORT_LIBRARY_PREFIX
/variable/CMAKE_IMPORT_LIBRARY_SUFFIX
+ /variable/CMAKE_JOB_POOL_COMPILE
+ /variable/CMAKE_JOB_POOL_LINK
/variable/CMAKE_LINK_LIBRARY_SUFFIX
/variable/CMAKE_MAJOR_VERSION
/variable/CMAKE_MAKE_PROGRAM
diff --git a/Help/prop_gbl/JOB_POOLS.rst b/Help/prop_gbl/JOB_POOLS.rst
new file mode 100644
index 0000000..27975da
--- /dev/null
+++ b/Help/prop_gbl/JOB_POOLS.rst
@@ -0,0 +1,20 @@
+JOB_POOLS
+---------
+
+Ninja only: List of available pools.
+
+A pool is a named integer property and defines the maximum number
+of concurrent jobs which can be started by a rule assigned to the pool.
+The :prop_gbl:`JOB_POOLS` property is a semicolon-separated list of
+pairs using the syntax NAME=integer (without a space after the equality sign).
+
+For instance:
+
+.. code-block:: cmake
+
+ set_property(GLOBAL PROPERTY JOB_POOLS two_jobs=2 ten_jobs=10).
+
+Defined pools could be used globally by setting
+:variable:`CMAKE_JOB_POOL_COMPILE` and :variable:`CMAKE_JOB_POOL_LINK`
+or per target by setting the target properties
+:prop_tgt:`JOB_POOL_COMPILE` and :prop_tgt:`JOB_POOL_LINK`
diff --git a/Help/prop_tgt/JOB_POOL_COMPILE.rst b/Help/prop_tgt/JOB_POOL_COMPILE.rst
new file mode 100644
index 0000000..db78e46
--- /dev/null
+++ b/Help/prop_tgt/JOB_POOL_COMPILE.rst
@@ -0,0 +1,16 @@
+JOB_POOL_COMPILE
+----------------
+
+Ninja only: Pool used for compiling.
+
+The number of parallel compile processes could be limited by defining
+pools with the global :prop_gbl:`JOB_POOLS`
+property and then specifinghere the pool name.
+
+For instance:
+
+.. code-block:: cmake
+
+ set_target_properties(target PROPERTIES JOB_POOL_COMPILE ten_jobs)
+
+This property overwrites the variable :variable:`CMAKE_JOB_POOL_COMPILE`.
diff --git a/Help/prop_tgt/JOB_POOL_LINK.rst b/Help/prop_tgt/JOB_POOL_LINK.rst
new file mode 100644
index 0000000..ff2541c
--- /dev/null
+++ b/Help/prop_tgt/JOB_POOL_LINK.rst
@@ -0,0 +1,16 @@
+JOB_POOL_LINK
+-------------
+
+Ninja only: Pool used for linking.
+
+The number of parallel link processes could be limited by defining
+pools with the global :prop_gbl:`JOB_POOLS`
+property and then specifing here the pool name.
+
+For instance:
+
+.. code-block:: cmake
+
+ set_target_properties(target PROPERTIES JOB_POOL_LINK two_jobs)
+
+This property overwrites the variable :variable:`CMAKE_JOB_POOL_LINK`.
diff --git a/Help/variable/CMAKE_JOB_POOL_COMPILE.rst b/Help/variable/CMAKE_JOB_POOL_COMPILE.rst
new file mode 100644
index 0000000..9e41dc8
--- /dev/null
+++ b/Help/variable/CMAKE_JOB_POOL_COMPILE.rst
@@ -0,0 +1,12 @@
+CMAKE_JOB_POOL_COMPILE
+----------------------
+
+Job pool used for compiling.
+
+If this variable is set to a pool name defined by the global
+:prop_gbl:`JOB_POOLS` property,
+this pool is used for compling without explicitely setting
+the the target property :prop_tgt:`JOB_POOL_COMPILE`.
+
+Setting :prop_tgt:`JOB_POOL_COMPILE` on a target overwrites
+:variable:`CMAKE_JOB_POOL_COMPILE`.
diff --git a/Help/variable/CMAKE_JOB_POOL_LINK.rst b/Help/variable/CMAKE_JOB_POOL_LINK.rst
new file mode 100644
index 0000000..87768ed
--- /dev/null
+++ b/Help/variable/CMAKE_JOB_POOL_LINK.rst
@@ -0,0 +1,12 @@
+CMAKE_JOB_POOL_LINK
+----------------------
+
+Job pool used for linking.
+
+If this variable is set to a pool name defined by the global
+:prop_gbl:`JOB_POOLS` property
+this pool is used for linking without explicitely setting
+the the target property :prop_tgt:`JOB_POOL_LINK`.
+
+Setting :prop_tgt:`JOB_POOL_LINK` on a target overwrites
+:variable:`CMAKE_JOB_POOL_LINK`.
diff --git a/Source/cmLocalNinjaGenerator.cxx b/Source/cmLocalNinjaGenerator.cxx
index 158d714..5d2fb50 100644
--- a/Source/cmLocalNinjaGenerator.cxx
+++ b/Source/cmLocalNinjaGenerator.cxx
@@ -53,6 +53,8 @@ void cmLocalNinjaGenerator::Generate()
{
this->WriteBuildFileTop();
+ this->WritePools(this->GetRulesFileStream());
+
const std::string showIncludesPrefix = this->GetMakefile()
->GetSafeDefinition("CMAKE_CL_SHOWINCLUDES_PREFIX");
if (!showIncludesPrefix.empty())
@@ -200,6 +202,39 @@ void cmLocalNinjaGenerator::WriteProjectHeader(std::ostream& os)
cmGlobalNinjaGenerator::WriteDivider(os);
}
+void cmLocalNinjaGenerator::WritePools(std::ostream& os)
+{
+ cmGlobalNinjaGenerator::WriteDivider(os);
+
+ const char* jobpools = this->GetCMakeInstance()
+ ->GetProperty("JOB_POOLS", cmProperty::GLOBAL);
+ if (jobpools)
+ {
+ cmGlobalNinjaGenerator::WriteComment(os,
+ "Pools defined by global property JOB_POOLS");
+ std::vector<std::string> pools;
+ cmSystemTools::ExpandListArgument(jobpools, pools);
+ for (size_t i = 0; i < pools.size(); ++i)
+ {
+ const std::string pool = pools[i];
+ const std::string::size_type eq = pool.find("=");
+ unsigned int jobs;
+ if (eq != std::string::npos &&
+ sscanf(pool.c_str() + eq, "=%u", &jobs) == 1)
+ {
+ os << "pool " << pool.substr(0, eq) << std::endl;
+ os << " depth = " << jobs << std::endl;
+ os << std::endl;
+ }
+ else
+ {
+ cmSystemTools::Error("Invalid pool defined by property 'JOB_POOLS': ",
+ pool.c_str());
+ }
+ }
+ }
+}
+
void cmLocalNinjaGenerator::WriteNinjaFilesInclusion(std::ostream& os)
{
cmGlobalNinjaGenerator::WriteDivider(os);
diff --git a/Source/cmLocalNinjaGenerator.h b/Source/cmLocalNinjaGenerator.h
index 8eb63c5..ea854c6 100644
--- a/Source/cmLocalNinjaGenerator.h
+++ b/Source/cmLocalNinjaGenerator.h
@@ -112,6 +112,7 @@ private:
void WriteProjectHeader(std::ostream& os);
void WriteNinjaFilesInclusion(std::ostream& os);
void WriteProcessedMakefile(std::ostream& os);
+ void WritePools(std::ostream& os);
void SetConfigName();
diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h
index 44aaa66..287ecaf 100644
--- a/Source/cmMakefile.h
+++ b/Source/cmMakefile.h
@@ -190,6 +190,7 @@ public:
const char* comment, const char* workingDir,
bool replace = false,
bool escapeOldStyle = true);
+
void AddCustomCommandOldStyle(const char* target,
const std::vector<std::string>& outputs,
const std::vector<std::string>& depends,
diff --git a/Source/cmNinjaNormalTargetGenerator.cxx b/Source/cmNinjaNormalTargetGenerator.cxx
index 2c96ede..73ba815 100644
--- a/Source/cmNinjaNormalTargetGenerator.cxx
+++ b/Source/cmNinjaNormalTargetGenerator.cxx
@@ -464,6 +464,8 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement()
linkPath,
this->GetGeneratorTarget());
+ this->addPoolNinjaVariable("JOB_POOL_LINK", this->GetTarget(), vars);
+
this->AddModuleDefinitionFlag(vars["LINK_FLAGS"]);
vars["LINK_FLAGS"] = cmGlobalNinjaGenerator
::EncodeLiteral(vars["LINK_FLAGS"]);
diff --git a/Source/cmNinjaTargetGenerator.cxx b/Source/cmNinjaTargetGenerator.cxx
index b132db6..f40532c 100644
--- a/Source/cmNinjaTargetGenerator.cxx
+++ b/Source/cmNinjaTargetGenerator.cxx
@@ -572,6 +572,8 @@ cmNinjaTargetGenerator
ConvertToNinjaPath(objectDir.c_str()).c_str(),
cmLocalGenerator::SHELL);
+ this->addPoolNinjaVariable("JOB_POOL_COMPILE", this->GetTarget(), vars);
+
this->SetMsvcTargetPdbVariable(vars);
if(this->Makefile->IsOn("CMAKE_EXPORT_COMPILE_COMMANDS"))
@@ -725,3 +727,14 @@ cmNinjaTargetGenerator::MacOSXContentGeneratorType::operator()(
// Add as a dependency of all target so that it gets called.
this->Generator->GetGlobalGenerator()->AddDependencyToAll(output);
}
+
+void cmNinjaTargetGenerator::addPoolNinjaVariable(const char* pool_property,
+ cmTarget* target,
+ cmNinjaVars& vars)
+{
+ const char* pool = target->GetProperty(pool_property);
+ if (pool)
+ {
+ vars["pool"] = pool;
+ }
+}
diff --git a/Source/cmNinjaTargetGenerator.h b/Source/cmNinjaTargetGenerator.h
index e377a78..2ce1ed7 100644
--- a/Source/cmNinjaTargetGenerator.h
+++ b/Source/cmNinjaTargetGenerator.h
@@ -136,12 +136,15 @@ protected:
};
friend struct MacOSXContentGeneratorType;
-protected:
+
MacOSXContentGeneratorType* MacOSXContentGenerator;
// Properly initialized by sub-classes.
cmOSXBundleGenerator* OSXBundleGenerator;
std::set<cmStdString> MacContentFolders;
+ void addPoolNinjaVariable(const char* pool_property,
+ cmTarget* target,
+ cmNinjaVars& vars);
private:
cmTarget* Target;
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 120a666..b99448d 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -379,6 +379,12 @@ void cmTarget::SetMakefile(cmMakefile* mf)
// so ensure that the conditions don't lead to nonsense.
this->PolicyStatusCMP0022 = cmPolicies::NEW;
}
+
+ this->SetPropertyDefault("JOB_POOL_COMPILE",
+ this->Makefile->GetDefinition("CMAKE_JOB_POOL_COMPILE"));
+
+ this->SetPropertyDefault("JOB_POOL_LINK",
+ this->Makefile->GetDefinition("CMAKE_JOB_POOL_LINK"));
}
//----------------------------------------------------------------------------
-----------------------------------------------------------------------
Summary of changes:
Help/manual/cmake-properties.7.rst | 3 ++
Help/manual/cmake-variables.7.rst | 2 +
Help/prop_gbl/JOB_POOLS.rst | 20 +++++++++++++++++
Help/prop_tgt/JOB_POOL_COMPILE.rst | 16 +++++++++++++
Help/prop_tgt/JOB_POOL_LINK.rst | 16 +++++++++++++
Help/variable/CMAKE_JOB_POOL_COMPILE.rst | 12 ++++++++++
Help/variable/CMAKE_JOB_POOL_LINK.rst | 12 ++++++++++
Source/cmLocalNinjaGenerator.cxx | 35 ++++++++++++++++++++++++++++++
Source/cmLocalNinjaGenerator.h | 1 +
Source/cmMakefile.h | 1 +
Source/cmNinjaNormalTargetGenerator.cxx | 2 +
Source/cmNinjaTargetGenerator.cxx | 13 +++++++++++
Source/cmNinjaTargetGenerator.h | 5 +++-
Source/cmTarget.cxx | 6 +++++
14 files changed, 143 insertions(+), 1 deletions(-)
create mode 100644 Help/prop_gbl/JOB_POOLS.rst
create mode 100644 Help/prop_tgt/JOB_POOL_COMPILE.rst
create mode 100644 Help/prop_tgt/JOB_POOL_LINK.rst
create mode 100644 Help/variable/CMAKE_JOB_POOL_COMPILE.rst
create mode 100644 Help/variable/CMAKE_JOB_POOL_LINK.rst
hooks/post-receive
--
CMake
More information about the Cmake-commits
mailing list