[Cmake-commits] CMake branch, next, updated. v2.8.12.1-5781-g06a0e8a

Peter Kuemmel syntheticpp at gmx.net
Mon Nov 25 14:19:48 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  06a0e8a3981a9cd48a185d457480c94830a8b51e (commit)
       via  2d2565592a8593c4eae5ce15e26621cef2f8c107 (commit)
      from  c46956e596f36dc61e266a785e8b1aaed684c16a (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=06a0e8a3981a9cd48a185d457480c94830a8b51e
commit 06a0e8a3981a9cd48a185d457480c94830a8b51e
Merge: c46956e 2d25655
Author:     Peter Kuemmel <syntheticpp at gmx.net>
AuthorDate: Mon Nov 25 14:19:43 2013 -0500
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Mon Nov 25 14:19:43 2013 -0500

    Merge topic 'ninja-compile-link-pool' into next
    
    2d25655 Ninja: job pool support for compiling and linking


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=2d2565592a8593c4eae5ce15e26621cef2f8c107
commit 2d2565592a8593c4eae5ce15e26621cef2f8c107
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 20:18:21 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..44ae72c
--- /dev/null
+++ b/Help/prop_gbl/JOB_POOLS.rst
@@ -0,0 +1,19 @@
+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..de12b66
--- /dev/null
+++ b/Help/prop_tgt/JOB_POOL_COMPILE.rst
@@ -0,0 +1,15 @@
+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..c9c927c
--- /dev/null
+++ b/Help/prop_tgt/JOB_POOL_LINK.rst
@@ -0,0 +1,15 @@
+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..f5e08a2
--- /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_gbl:`JOB_POOL_COMPILING`.
+
+Setting :prop_tgt:`JOB_POOL_COMPILING` 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..4d1c79e
--- /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_gbl:`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              |   19 ++++++++++++++++
 Help/prop_tgt/JOB_POOL_COMPILE.rst       |   15 ++++++++++++
 Help/prop_tgt/JOB_POOL_LINK.rst          |   15 ++++++++++++
 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, 140 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