diff options
author | Brad King <brad.king@kitware.com> | 2024-02-05 14:56:43 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2024-02-05 14:57:19 (GMT) |
commit | 666d2e645199b918ad764275db843bcbda4c04ec (patch) | |
tree | 3770276565e43b09f6f80ceea8e193efb30dbeef | |
parent | ae667813deb5861c6f829eb8c2f944155f7cf8fe (diff) | |
parent | 30829da50616c18e88e69e8fd6b4508ce28429c3 (diff) | |
download | CMake-666d2e645199b918ad764275db843bcbda4c04ec.zip CMake-666d2e645199b918ad764275db843bcbda4c04ec.tar.gz CMake-666d2e645199b918ad764275db843bcbda4c04ec.tar.bz2 |
Merge topic 'restore-pch-with-unity'
30829da506 Unity: Clarify source comments on unity build transformation
87bf1c6c33 Merge branch 'unity-after-compile-features' into restore-pch-with-unity
df08c37a42 cmGlobalGenerator: Add unity/pch sources after computing compile features
004c3c3986 Tests: Add case covering PCH in a unity build
Acked-by: Kitware Robot <kwrobot@kitware.com>
Tested-by: buildbot <buildbot@kitware.com>
Acked-by: Ben Boeckel <ben.boeckel@kitware.com>
Merge-request: !9215
-rw-r--r-- | Source/cmGlobalGenerator.cxx | 40 | ||||
-rw-r--r-- | Source/cmGlobalGenerator.h | 2 | ||||
-rw-r--r-- | Source/cmLocalGenerator.cxx | 1 | ||||
-rw-r--r-- | Tests/RunCMake/PrecompileHeaders/PchInterfaceUnity-check.cmake | 1 | ||||
-rw-r--r-- | Tests/RunCMake/PrecompileHeaders/PchInterfaceUnity.cmake | 2 | ||||
-rw-r--r-- | Tests/RunCMake/PrecompileHeaders/RunCMakeTest.cmake | 1 |
6 files changed, 17 insertions, 30 deletions
diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx index 8a07073..71ab2a6 100644 --- a/Source/cmGlobalGenerator.cxx +++ b/Source/cmGlobalGenerator.cxx @@ -1568,10 +1568,7 @@ bool cmGlobalGenerator::Compute() // so create the map from project name to vector of local generators this->FillProjectMap(); - // Add automatically generated sources (e.g. unity build). - if (!this->AddAutomaticSources()) { - return false; - } + this->CreateFileGenerateOutputs(); // Iterate through all targets and add verification targets for header sets if (!this->AddHeaderSetVerification()) { @@ -1612,10 +1609,11 @@ bool cmGlobalGenerator::Compute() } } + // Add automatically generated sources (e.g. unity build). // Add unity sources after computing compile features. Unity sources do // not change the set of languages or features, but we need to know them // to filter out sources that are scanned for C++ module dependencies. - if (!this->AddUnitySources()) { + if (!this->AddAutomaticSources()) { return false; } @@ -1885,16 +1883,21 @@ bool cmGlobalGenerator::AddHeaderSetVerification() return true; } -bool cmGlobalGenerator::AddAutomaticSources() +void cmGlobalGenerator::CreateFileGenerateOutputs() { for (const auto& lg : this->LocalGenerators) { lg->CreateEvaluationFileOutputs(); } +} + +bool cmGlobalGenerator::AddAutomaticSources() +{ for (const auto& lg : this->LocalGenerators) { for (const auto& gt : lg->GetGeneratorTargets()) { if (!gt->CanCompileSources()) { continue; } + lg->AddUnityBuild(gt.get()); lg->AddISPCDependencies(gt.get()); // Targets that reuse a PCH are handled below. if (!gt->GetProperty("PRECOMPILE_HEADERS_REUSE_FROM")) { @@ -1914,29 +1917,8 @@ bool cmGlobalGenerator::AddAutomaticSources() } } } - // The above transformations may have changed the classification of sources. - // Clear the source list and classification cache (KindedSources) of all - // targets so that it will be recomputed correctly by the generators later - // now that the above transformations are done for all targets. - for (const auto& lg : this->LocalGenerators) { - for (const auto& gt : lg->GetGeneratorTargets()) { - gt->ClearSourcesCache(); - } - } - return true; -} - -bool cmGlobalGenerator::AddUnitySources() -{ - for (const auto& lg : this->LocalGenerators) { - for (const auto& gt : lg->GetGeneratorTargets()) { - if (!gt->CanCompileSources()) { - continue; - } - lg->AddUnityBuild(gt.get()); - } - } - // The above transformation may have changed the classification of sources. + // The above transformations may have changed the classification of sources, + // e.g., sources that go into unity builds become SourceKindUnityBatched. // Clear the source list and classification cache (KindedSources) of all // targets so that it will be recomputed correctly by the generators later // now that the above transformations are done for all targets. diff --git a/Source/cmGlobalGenerator.h b/Source/cmGlobalGenerator.h index b1ce323..ba39768 100644 --- a/Source/cmGlobalGenerator.h +++ b/Source/cmGlobalGenerator.h @@ -678,8 +678,8 @@ protected: bool AddHeaderSetVerification(); + void CreateFileGenerateOutputs(); bool AddAutomaticSources(); - bool AddUnitySources(); std::string SelectMakeProgram(const std::string& makeProgram, const std::string& makeDefault = "") const; diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index ab1de4f..e7fa717 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -3207,6 +3207,7 @@ void cmLocalGenerator::AddUnityBuild(cmGeneratorTarget* target) for (size_t ci = 0; ci < configs.size(); ++ci) { // FIXME: Refactor collection of sources to not evaluate object libraries. + // Their final set of object files might be transformed by unity builds. std::vector<cmSourceFile*> sources; target->GetSourceFiles(sources, configs[ci]); for (cmSourceFile* sf : sources) { diff --git a/Tests/RunCMake/PrecompileHeaders/PchInterfaceUnity-check.cmake b/Tests/RunCMake/PrecompileHeaders/PchInterfaceUnity-check.cmake new file mode 100644 index 0000000..c17aaa0 --- /dev/null +++ b/Tests/RunCMake/PrecompileHeaders/PchInterfaceUnity-check.cmake @@ -0,0 +1 @@ +include(${CMAKE_CURRENT_LIST_DIR}/PchInterface-check.cmake) diff --git a/Tests/RunCMake/PrecompileHeaders/PchInterfaceUnity.cmake b/Tests/RunCMake/PrecompileHeaders/PchInterfaceUnity.cmake new file mode 100644 index 0000000..59c2523 --- /dev/null +++ b/Tests/RunCMake/PrecompileHeaders/PchInterfaceUnity.cmake @@ -0,0 +1,2 @@ +set(CMAKE_UNITY_BUILD 1) +include(PchInterface.cmake) diff --git a/Tests/RunCMake/PrecompileHeaders/RunCMakeTest.cmake b/Tests/RunCMake/PrecompileHeaders/RunCMakeTest.cmake index b163369..c8a5c15 100644 --- a/Tests/RunCMake/PrecompileHeaders/RunCMakeTest.cmake +++ b/Tests/RunCMake/PrecompileHeaders/RunCMakeTest.cmake @@ -12,6 +12,7 @@ endfunction() run_cmake(DisabledPch) run_cmake(PchDebugGenex) run_test(PchInterface) +run_test(PchInterfaceUnity) run_cmake(PchPrologueEpilogue) run_test(SkipPrecompileHeaders) run_test(CXXnotC) |