From f2b0013d10859c19a774f52f740e6d36b84cfbdf Mon Sep 17 00:00:00 2001 From: Klaus Aehlig Date: Thu, 21 Mar 2024 16:49:22 +0100 Subject: Avoid unnecessary analysis of export targets For export targets, we know ahead of time the effective configuration; so, if the current configuration is not the effective anyway, we can simply analyse the effective configuration and take that result. As a side effect, we also count the number of observed export targets correctly. --- src/buildtool/build_engine/target_map/export.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'src/buildtool/build_engine/target_map/export.cpp') diff --git a/src/buildtool/build_engine/target_map/export.cpp b/src/buildtool/build_engine/target_map/export.cpp index b8b5b1db..e8825f67 100644 --- a/src/buildtool/build_engine/target_map/export.cpp +++ b/src/buildtool/build_engine/target_map/export.cpp @@ -106,7 +106,6 @@ void ExportRule( const BuildMaps::Target::TargetMap::SetterPtr& setter, const BuildMaps::Target::TargetMap::LoggerPtr& logger, const gsl::not_null result_map) { - stats->IncrementExportsFoundCounter(); auto desc = BuildMaps::Base::FieldReader::CreatePtr( desc_json, key.target, "export target", logger); auto flexible_vars = desc->ReadStringList("flexible_config"); @@ -114,6 +113,18 @@ void ExportRule( return; } auto effective_config = key.config.Prune(*flexible_vars); + if (key.config != effective_config) { + (*subcaller)( + {BuildMaps::Target::ConfiguredTarget{.target = key.target, + .config = effective_config}}, + [setter](auto const& values) { + AnalysedTargetPtr result = *(values[0]); + (*setter)(std::move(result)); + }, + logger); + return; + } + stats->IncrementExportsFoundCounter(); auto const& target_name = key.target.GetNamedTarget(); auto repo_key = repo_config->RepositoryKey(target_name.repository); auto target_cache_key = -- cgit v1.2.3