diff options
Diffstat (limited to 'src')
2 files changed, 44 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java index 1f12d2cc0b..015fea9071 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java @@ -850,11 +850,22 @@ public class BuildView { for (TargetAndConfiguration targetAndConfig : inputs) { labelsToTargets.put(targetAndConfig.getLabel(), targetAndConfig.getTarget()); + + Attribute.Transition ruleclassTransition = null; + if (targetAndConfig.getTarget().getAssociatedRule() != null) { + ruleclassTransition = targetAndConfig + .getTarget() + .getAssociatedRule() + .getRuleClassObject() + .getTransition(); + } if (targetAndConfig.getConfiguration() != null) { asDeps.put(targetAndConfig.getConfiguration(), Dependency.withTransitionAndAspects( targetAndConfig.getLabel(), - Attribute.ConfigurationTransition.NONE, + ruleclassTransition == null + ? Attribute.ConfigurationTransition.NONE + : ruleclassTransition, // TODO(bazel-team): support top-level aspects AspectCollection.EMPTY)); } diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsWithDynamicConfigurationsTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsWithDynamicConfigurationsTest.java index fd0502ce4a..2e359f365a 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsWithDynamicConfigurationsTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsWithDynamicConfigurationsTest.java @@ -103,4 +103,36 @@ public class ConfigurationsForTargetsWithDynamicConfigurationsTest BuildConfiguration ruleclass = Iterables.getOnlyElement(deps).getConfiguration(); assertThat(ruleclass.getCpu()).isEqualTo("SET BY PATCH"); } + + @Test + public void testTopLevelRuleClassTransition() throws Exception { + setRulesAvailableInTests( + new TestAspects.BaseRule(), + new TestAspects.RuleClassTransitionRule()); + scratch.file( + "a/BUILD", + "rule_class_transition(", + " name = 'rule_class',", + ")"); + ConfiguredTarget target = + Iterables.getOnlyElement(update("//a:rule_class").getTargetsToBuild()); + assertThat(target.getConfiguration().getCpu()).isEqualTo("SET BY PATCH"); + } + + @Test + public void testTopLevelRuleClassTransitionAndNoTransition() throws Exception { + setRulesAvailableInTests( + new TestAspects.BaseRule(), + new TestAspects.RuleClassTransitionRule(), + new TestAspects.SimpleRule()); + scratch.file( + "a/BUILD", + "rule_class_transition(", + " name = 'rule_class',", + ")", + "simple(name='sim')"); + ConfiguredTarget target = + Iterables.getOnlyElement(update("//a:sim").getTargetsToBuild()); + assertThat(target.getConfiguration().getCpu()).isNotEqualTo("SET BY PATCH"); + } } |