diff options
author | Brad King <brad.king@kitware.com> | 2012-03-13 13:30:23 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2012-03-16 14:18:35 (GMT) |
commit | f5b06cda0f187929ac68ed64595c22d4e6ec773c (patch) | |
tree | 12e37e06684152c28d588f4d29573c25b3ec3280 /Source/cmGlobalNinjaGenerator.cxx | |
parent | a2514f15fae34abb6f29dddf6f5cfe8b171a8035 (diff) | |
download | CMake-f5b06cda0f187929ac68ed64595c22d4e6ec773c.zip CMake-f5b06cda0f187929ac68ed64595c22d4e6ec773c.tar.gz CMake-f5b06cda0f187929ac68ed64595c22d4e6ec773c.tar.bz2 |
Pre-compute object file names before Ninja generation
Implement cmGlobalGenerator::ComputeTargetObjects in the Ninja generator
to pre-compute all the object file names. Use the results during
generation instead of re-computing it later.
Diffstat (limited to 'Source/cmGlobalNinjaGenerator.cxx')
-rw-r--r-- | Source/cmGlobalNinjaGenerator.cxx | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx index 7c1529b..03c8be9 100644 --- a/Source/cmGlobalNinjaGenerator.cxx +++ b/Source/cmGlobalNinjaGenerator.cxx @@ -14,6 +14,7 @@ #include "cmLocalNinjaGenerator.h" #include "cmMakefile.h" #include "cmGeneratedFileStream.h" +#include "cmGeneratorTarget.h" #include "cmVersion.h" const char* cmGlobalNinjaGenerator::NINJA_BUILD_FILE = "build.ninja"; @@ -500,6 +501,34 @@ bool cmGlobalNinjaGenerator::HasRule(const std::string &name) } //---------------------------------------------------------------------------- +// Private virtual overrides + +// TODO: Refactor to combine with cmGlobalUnixMakefileGenerator3 impl. +void cmGlobalNinjaGenerator::ComputeTargetObjects(cmGeneratorTarget* gt) const +{ + cmTarget* target = gt->Target; + + // Compute full path to object file directory for this target. + std::string dir_max; + dir_max += gt->Makefile->GetCurrentOutputDirectory(); + dir_max += "/"; + dir_max += gt->LocalGenerator->GetTargetDirectory(*target); + dir_max += "/"; + gt->ObjectDirectory = dir_max; + + // Compute the name of each object file. + for(std::vector<cmSourceFile*>::iterator + si = gt->ObjectSources.begin(); + si != gt->ObjectSources.end(); ++si) + { + cmSourceFile* sf = *si; + std::string objectName = gt->LocalGenerator + ->GetObjectFileNameWithoutTarget(*sf, dir_max); + gt->Objects[sf] = objectName; + } +} + +//---------------------------------------------------------------------------- // Private methods void cmGlobalNinjaGenerator::OpenBuildFileStream() |