From f1fb63b306ad06a8931ca5a00a2b9ce9e66bc12e Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 7 Oct 2019 15:12:58 -0400 Subject: file(GENERATE): Create output file structures even earlier Since commit b80557c7bd (file(GENERATE): Evaluate early to allow generating source files, 2014-11-04, v3.2.0-rc1~398^2) we create the `cmSourceFile` instances marked with a `GENERATED` source file property before tracing source dependencies. Move it to even earlier so that steps in `cmGlobalGenerator::AddAutomaticSources` can operate on all sources. This also avoids the accidental `O(n^2)` calls for `n` local generators that we had previously. This is also needed since commit 83c1657ff7 (Unity build: Generate sources during Compute step, 2019-10-03) to support `file(GENERATE)` outputs as sources in a target with `UNITY_BUILD` enabled. --- Source/cmGlobalGenerator.cxx | 9 +-------- Source/cmGlobalGenerator.h | 2 -- Source/cmLocalGenerator.cxx | 14 +++++++++----- Source/cmLocalGenerator.h | 1 + 4 files changed, 11 insertions(+), 15 deletions(-) diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx index ee9ea3c..f0152c2 100644 --- a/Source/cmGlobalGenerator.cxx +++ b/Source/cmGlobalGenerator.cxx @@ -1556,6 +1556,7 @@ bool cmGlobalGenerator::QtAutoGen() bool cmGlobalGenerator::AddAutomaticSources() { for (cmLocalGenerator* lg : this->LocalGenerators) { + lg->CreateEvaluationFileOutputs(); for (cmGeneratorTarget* gt : lg->GetGeneratorTargets()) { if (gt->GetType() == cmStateEnums::INTERFACE_LIBRARY) { continue; @@ -3095,14 +3096,6 @@ cmGlobalGenerator::GetFilenameTargetDepends(cmSourceFile* sf) const return this->FilenameTargetDepends[sf]; } -void cmGlobalGenerator::CreateEvaluationSourceFiles( - std::string const& config) const -{ - for (cmLocalGenerator* localGen : this->LocalGenerators) { - localGen->CreateEvaluationFileOutputs(config); - } -} - void cmGlobalGenerator::ProcessEvaluationFiles() { std::vector generatedFiles; diff --git a/Source/cmGlobalGenerator.h b/Source/cmGlobalGenerator.h index 9e30b8f..f25ff7b 100644 --- a/Source/cmGlobalGenerator.h +++ b/Source/cmGlobalGenerator.h @@ -457,8 +457,6 @@ public: bool GenerateCPackPropertiesFile(); - void CreateEvaluationSourceFiles(std::string const& config) const; - void SetFilenameTargetDepends( cmSourceFile* sf, std::set const& tgts); const std::set& GetFilenameTargetDepends( diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index ccd70a3..fc027f6 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -263,11 +263,6 @@ static void MoveSystemIncludesToEnd(std::vector>& includeDirs, void cmLocalGenerator::TraceDependencies() { - std::vector const& configs = - this->Makefile->GetGeneratorConfigs(); - for (std::string const& c : configs) { - this->GlobalGenerator->CreateEvaluationSourceFiles(c); - } // Generate the rule files for each target. const std::vector& targets = this->GetGeneratorTargets(); for (cmGeneratorTarget* target : targets) { @@ -360,6 +355,15 @@ void cmLocalGenerator::GenerateTestFiles() } } +void cmLocalGenerator::CreateEvaluationFileOutputs() +{ + std::vector const& configs = + this->Makefile->GetGeneratorConfigs(); + for (std::string const& c : configs) { + this->CreateEvaluationFileOutputs(c); + } +} + void cmLocalGenerator::CreateEvaluationFileOutputs(std::string const& config) { std::vector ef = diff --git a/Source/cmLocalGenerator.h b/Source/cmLocalGenerator.h index 14d05ad..7358672 100644 --- a/Source/cmLocalGenerator.h +++ b/Source/cmLocalGenerator.h @@ -418,6 +418,7 @@ public: void IssueMessage(MessageType t, std::string const& text) const; + void CreateEvaluationFileOutputs(); void CreateEvaluationFileOutputs(const std::string& config); void ProcessEvaluationFiles(std::vector& generatedFiles); -- cgit v0.12