[Cmake-commits] CMake branch, next, updated. v2.8.12.2-7694-gef1fbc9
Ben Boeckel
ben.boeckel at kitware.com
Wed Feb 12 15:18:34 EST 2014
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 ef1fbc9a1adfe2f92766fb38516ad868a2fe0e37 (commit)
via 9ba3f77148d48ef868905333a60ce9cbb0683579 (commit)
from 3e931c4530463b70c1f2407af199eecaa424de9d (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=ef1fbc9a1adfe2f92766fb38516ad868a2fe0e37
commit ef1fbc9a1adfe2f92766fb38516ad868a2fe0e37
Merge: 3e931c4 9ba3f77
Author: Ben Boeckel <ben.boeckel at kitware.com>
AuthorDate: Wed Feb 12 15:18:33 2014 -0500
Commit: CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Wed Feb 12 15:18:33 2014 -0500
Merge topic 'dev/ninja-speedup' into next
9ba3f771 Ninja: Cache target-level flags
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=9ba3f77148d48ef868905333a60ce9cbb0683579
commit 9ba3f77148d48ef868905333a60ce9cbb0683579
Author: Ben Boeckel <ben.boeckel at kitware.com>
AuthorDate: Wed Feb 12 00:00:29 2014 -0500
Commit: Ben Boeckel <ben.boeckel at kitware.com>
CommitDate: Wed Feb 12 03:25:55 2014 -0500
Ninja: Cache target-level flags
Instead of figuring out target flags per-source file, cache the flags
that are being used. This results in a *much* faster generate time for
Ninja.
diff --git a/Source/cmNinjaTargetGenerator.cxx b/Source/cmNinjaTargetGenerator.cxx
index 82f8d1b..84b96fa 100644
--- a/Source/cmNinjaTargetGenerator.cxx
+++ b/Source/cmNinjaTargetGenerator.cxx
@@ -129,15 +129,6 @@ std::string
cmNinjaTargetGenerator::ComputeFlagsForObject(cmSourceFile *source,
const std::string& language)
{
- std::string flags;
-
- this->AddFeatureFlags(flags, language.c_str());
-
- this->GetLocalGenerator()->AddArchitectureFlags(flags,
- this->GeneratorTarget,
- language.c_str(),
- this->GetConfigName());
-
// TODO: Fortran support.
// // Fortran-specific flags computed for this target.
// if(*l == "Fortran")
@@ -145,42 +136,57 @@ cmNinjaTargetGenerator::ComputeFlagsForObject(cmSourceFile *source,
// this->AddFortranFlags(flags);
// }
- // Add shared-library flags if needed.
- this->LocalGenerator->AddCMP0018Flags(flags, this->Target,
- language.c_str(),
- this->GetConfigName());
-
- this->LocalGenerator->AddVisibilityPresetFlags(flags, this->Target,
- language.c_str());
-
- // Add include directory flags.
- const char *config = this->Makefile->GetDefinition("CMAKE_BUILD_TYPE");
- {
- std::vector<std::string> includes;
- this->LocalGenerator->GetIncludeDirectories(includes,
- this->GeneratorTarget,
- language.c_str(), config);
- std::string includeFlags =
- this->LocalGenerator->GetIncludeFlags(includes, this->GeneratorTarget,
- language.c_str(),
- language == "RC" ? true : false); // full include paths for RC
- // needed by cmcldeps
- if(cmGlobalNinjaGenerator::IsMinGW())
- cmSystemTools::ReplaceString(includeFlags, "\\", "/");
-
- this->LocalGenerator->AppendFlags(flags, includeFlags.c_str());
- }
-
- // Append old-style preprocessor definition flags.
- this->LocalGenerator->AppendFlags(flags, this->Makefile->GetDefineFlags());
+ bool hasLangCached = this->LanguageFlags.count(language);
+ std::string config = this->Makefile->GetSafeDefinition("CMAKE_BUILD_TYPE");
+ std::string& languageFlags = this->LanguageFlags[language];
+ if(!hasLangCached)
+ {
+ this->AddFeatureFlags(languageFlags, language.c_str());
+
+ this->GetLocalGenerator()->AddArchitectureFlags(languageFlags,
+ this->GeneratorTarget,
+ language.c_str(),
+ this->GetConfigName());
+
+ // Add shared-library flags if needed.
+ this->LocalGenerator->AddCMP0018Flags(languageFlags, this->Target,
+ language,
+ this->GetConfigName());
+
+ this->LocalGenerator->AddVisibilityPresetFlags(languageFlags, this->Target,
+ language.c_str());
+
+ std::vector<std::string> includes;
+ this->LocalGenerator->GetIncludeDirectories(includes,
+ this->GeneratorTarget,
+ language.c_str(),
+ this->GetConfigName());
+ // Add include directory flags.
+ std::string includeFlags =
+ this->LocalGenerator->GetIncludeFlags(includes, this->GeneratorTarget,
+ language.c_str(),
+ language == "RC" ? true : false); // full include paths for RC
+ // needed by cmcldeps
+ if(cmGlobalNinjaGenerator::IsMinGW())
+ cmSystemTools::ReplaceString(includeFlags, "\\", "/");
+
+ this->LocalGenerator->AppendFlags(languageFlags, includeFlags.c_str());
+
+ // Append old-style preprocessor definition flags.
+ this->LocalGenerator->AppendFlags(languageFlags,
+ this->Makefile->GetDefineFlags());
+
+ // Add target-specific flags.
+ this->LocalGenerator->AddCompileOptions(languageFlags, this->Target,
+ language.c_str(),
+ this->GetConfigName());
+ }
- // Add target-specific flags.
- this->LocalGenerator->AddCompileOptions(flags, this->Target,
- language.c_str(), config);
+ std::string flags = languageFlags;
- // Add source file specific flags.
- this->LocalGenerator->AppendFlags(flags,
- source->GetProperty("COMPILE_FLAGS"));
+ // Add source file specific flags.
+ this->LocalGenerator->AppendFlags(flags,
+ source->GetProperty("COMPILE_FLAGS"));
// TODO: Handle Apple frameworks.
diff --git a/Source/cmNinjaTargetGenerator.h b/Source/cmNinjaTargetGenerator.h
index 2ce1ed7..43f2279 100644
--- a/Source/cmNinjaTargetGenerator.h
+++ b/Source/cmNinjaTargetGenerator.h
@@ -154,6 +154,9 @@ private:
/// List of object files for this target.
cmNinjaDeps Objects;
+ typedef std::map<std::string, std::string> LanguageFlagMap;
+ LanguageFlagMap LanguageFlags;
+
// The windows module definition source file (.def), if any.
std::string ModuleDefinitionFile;
};
-----------------------------------------------------------------------
Summary of changes:
Source/cmNinjaTargetGenerator.cxx | 92 ++++++++++++++++++++-----------------
Source/cmNinjaTargetGenerator.h | 3 ++
2 files changed, 52 insertions(+), 43 deletions(-)
hooks/post-receive
--
CMake
More information about the Cmake-commits
mailing list