Autogen: Optimize cmake_autogen execution for CROSS_CONFIG usage

The redundant `cmake_autogen` process execution was optimized for
non-`CROSS_CONFIGS` usage. It was executed three times for each
config although only one of them is needed.
This commit is contained in:
Orkun Tokdemir
2023-05-25 17:33:32 +02:00
parent f2f21c5752
commit 3bd605f3d0

View File

@@ -1168,7 +1168,8 @@ bool cmQtAutoGenInitializer::InitAutogenTarget()
if (this->Moc.Enabled) {
this->AddGeneratedSource(this->Moc.CompilationFile, this->Moc, true);
if (useNinjaDepfile) {
if (this->MultiConfig) {
if (this->MultiConfig &&
!this->Makefile->GetSafeDefinition("CMAKE_CROSS_CONFIGS").empty()) {
// Make all mocs_compilation_<CONFIG>.cpp files byproducts of the
// ${target}_autogen/timestamp custom command.
// We cannot just use Moc.CompilationFileGenex here, because that
@@ -1215,10 +1216,23 @@ bool cmQtAutoGenInitializer::InitAutogenTarget()
this->GlobalGen->GetQtAutoGenConfigs(configs);
bool constexpr stdPipesUTF8 = true;
cmCustomCommandLines commandLines;
for (auto const& config : configs) {
if (this->Makefile->GetSafeDefinition("CMAKE_CROSS_CONFIGS").empty()) {
std::string autugenInfoFileconfig;
if (this->MultiConfig) {
autugenInfoFileconfig = "$<CONFIG>";
} else {
autugenInfoFileconfig = configs[0];
}
commandLines.push_back(cmMakeCommandLine(
{ cmSystemTools::GetCMakeCommand(), "-E", "cmake_autogen",
this->AutogenTarget.InfoFile, config }));
this->AutogenTarget.InfoFile, autugenInfoFileconfig }));
} else {
for (auto const& config : configs) {
commandLines.push_back(cmMakeCommandLine(
{ cmSystemTools::GetCMakeCommand(), "-E", "cmake_autogen",
this->AutogenTarget.InfoFile, config }));
}
}
// Use PRE_BUILD on demand