From ca27e86a70b3998c79fccbfebd4fb020013c9483 Mon Sep 17 00:00:00 2001 From: Fabian Meumertzheim Date: Sat, 17 Oct 2026 19:32:23 +0200 Subject: [PATCH] Skip transition machinery for `config.none()` attributes `NoConfigTransition` always yields the empty configuration, so there is no need to restrict the parent options, run the transition, and go through `BuildConfigurationKeyProducer` for each dependency edge. Every rule has a `package_metadata` attribute that uses `config.none()`, so this applies to each label in `default_package_metadata` for every configured target. --- .../google/devtools/build/lib/analysis/producers/BUILD | 2 ++ .../build/lib/analysis/producers/DependencyProducer.java | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/src/main/java/com/google/devtools/build/lib/analysis/producers/BUILD b/src/main/java/com/google/devtools/build/lib/analysis/producers/BUILD index 0d475dbbb5a701..0c8cf27f8347d3 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/producers/BUILD +++ b/src/main/java/com/google/devtools/build/lib/analysis/producers/BUILD @@ -50,6 +50,7 @@ java_library( "//src/main/java/com/google/devtools/build/lib/analysis:transitive_dependency_state", "//src/main/java/com/google/devtools/build/lib/analysis/config:build_configuration", "//src/main/java/com/google/devtools/build/lib/analysis/config:build_options", + "//src/main/java/com/google/devtools/build/lib/analysis/config:common_options", "//src/main/java/com/google/devtools/build/lib/analysis/config:config_conditions", "//src/main/java/com/google/devtools/build/lib/analysis/config:config_matching_provider", "//src/main/java/com/google/devtools/build/lib/analysis/config:configuration_transition_event", @@ -59,6 +60,7 @@ java_library( "//src/main/java/com/google/devtools/build/lib/analysis/config:starlark_transition_cache", "//src/main/java/com/google/devtools/build/lib/analysis/config/transitions:composing_transition_factory", "//src/main/java/com/google/devtools/build/lib/analysis/config/transitions:configuration_transition", + "//src/main/java/com/google/devtools/build/lib/analysis/config/transitions:no_config_transition", "//src/main/java/com/google/devtools/build/lib/analysis/config/transitions:patch_transition", "//src/main/java/com/google/devtools/build/lib/analysis/config/transitions:transition_collector", "//src/main/java/com/google/devtools/build/lib/analysis/config/transitions:transition_factory", diff --git a/src/main/java/com/google/devtools/build/lib/analysis/producers/DependencyProducer.java b/src/main/java/com/google/devtools/build/lib/analysis/producers/DependencyProducer.java index 525928a60a80ac..ed611349fb69ba 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/producers/DependencyProducer.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/producers/DependencyProducer.java @@ -33,9 +33,11 @@ import com.google.devtools.build.lib.analysis.InvalidVisibilityDependencyException; import com.google.devtools.build.lib.analysis.MaterializedDepsInfo; import com.google.devtools.build.lib.analysis.config.BuildConfigurationValue; +import com.google.devtools.build.lib.analysis.config.CommonOptions; import com.google.devtools.build.lib.analysis.config.ConfigurationTransitionEvent; import com.google.devtools.build.lib.analysis.config.DependencyEvaluationException; import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransition; +import com.google.devtools.build.lib.analysis.config.transitions.NoConfigTransition; import com.google.devtools.build.lib.analysis.config.transitions.TransitionCollector; import com.google.devtools.build.lib.analysis.config.transitions.TransitionFactory.TransitionCreationException; import com.google.devtools.build.lib.analysis.producers.DependencyMapProducer.MaterializerException; @@ -215,6 +217,13 @@ public StateMachine step(Tasks tasks) { return DONE; } sink.acceptTransition(kind, toLabel, attributeTransition); + if (attributeTransition == NoConfigTransition.INSTANCE) { + // The result doesn't depend on the parent configuration, so skip the general machinery. + transitionedConfigurations = + ImmutableMap.of( + PATCH_TRANSITION_KEY, BuildConfigurationKey.create(CommonOptions.EMPTY_OPTIONS)); + return processTransitionResult(tasks); + } return new TransitionApplier( toLabel, configurationKey,