[Cmake-commits] CMake branch, next, updated. v2.8.12.1-5785-gdaa9249

Peter Kuemmel syntheticpp at gmx.net
Mon Nov 25 14:44:35 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  daa9249825106aa766f21c8b4f6f67eb3498d709 (commit)
       via  2c72c02b0a28684f6fc458b357d971465a1c8ed1 (commit)
      from  05036fdd387ef5ddaf511dbc26ebf72abed8bf16 (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=daa9249825106aa766f21c8b4f6f67eb3498d709
commit daa9249825106aa766f21c8b4f6f67eb3498d709
Merge: 05036fd 2c72c02
Author:     Peter Kuemmel <syntheticpp at gmx.net>
AuthorDate: Mon Nov 25 14:44:32 2013 -0500
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Mon Nov 25 14:44:32 2013 -0500

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


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=2c72c02b0a28684f6fc458b357d971465a1c8ed1
commit 2c72c02b0a28684f6fc458b357d971465a1c8ed1
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:43:49 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..aa97121
--- /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_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..23fb709
--- /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              |   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