diff options
author | Cal Peyser <cpeyser@google.com> | 2017-02-21 23:47:43 +0000 |
---|---|---|
committer | Irina Iancu <elenairina@google.com> | 2017-02-22 08:28:40 +0000 |
commit | 2fe062bf34657e1794dd83d09edbf6b2f6b4979f (patch) | |
tree | 58e54ed1a9ad7e10063ed7ef56afbdf67a2f64cc | |
parent | 836d94a553141a7505aa86ba10a8bf957ab07545 (diff) |
If dynamic configurations are turned on, ruleclass configuration transitions
apply on the top level.
--
PiperOrigin-RevId: 148155171
MOS_MIGRATED_REVID=148155171
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"); + } } |