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 f251a2747abb394ec6ef1618c55c3c8bf50f0868 (commit) via 26762e16818749beeaa65149035e17a24cae5b1f (commit) from eb3e90889a61574b93a89eedde9da49c9c3b003e (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=f251a2747abb394ec6ef1618c55c3c8bf50f0868 commit f251a2747abb394ec6ef1618c55c3c8bf50f0868 Merge: eb3e908 26762e1 Author: Brad King <brad.k...@kitware.com> AuthorDate: Thu Feb 13 10:27:53 2014 -0500 Commit: CMake Topic Stage <kwro...@kitware.com> CommitDate: Thu Feb 13 10:27:53 2014 -0500 Merge topic 'dev/ninja-speedup' into next 26762e16 Ninja: Cache target-level flags http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=26762e16818749beeaa65149035e17a24cae5b1f commit 26762e16818749beeaa65149035e17a24cae5b1f Author: Ben Boeckel <ben.boec...@kitware.com> AuthorDate: Wed Feb 12 00:00:29 2014 -0500 Commit: Brad King <brad.k...@kitware.com> CommitDate: Thu Feb 13 10:20:56 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..900af8d 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,56 @@ 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) != 0; + 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: hooks/post-receive -- CMake _______________________________________________ Cmake-commits mailing list Cmake-commits@cmake.org http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-commits