summaryrefslogtreecommitdiff
path: root/src/buildtool/build_engine/target_map/export.cpp
diff options
context:
space:
mode:
authorKlaus Aehlig <klaus.aehlig@huawei.com>2024-03-21 16:49:22 +0100
committerKlaus Aehlig <klaus.aehlig@huawei.com>2024-03-22 18:57:13 +0100
commitf2b0013d10859c19a774f52f740e6d36b84cfbdf (patch)
treee5225c4f5572287f0c188797839b4a0661b68482 /src/buildtool/build_engine/target_map/export.cpp
parentcf3650799e0cc280e985b3c7ec45fab4ee0d2153 (diff)
downloadjustbuild-f2b0013d10859c19a774f52f740e6d36b84cfbdf.tar.gz
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.
Diffstat (limited to 'src/buildtool/build_engine/target_map/export.cpp')
-rw-r--r--src/buildtool/build_engine/target_map/export.cpp13
1 files changed, 12 insertions, 1 deletions
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<BuildMaps::Target::ResultTargetMap*> 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 =