aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Cal Peyser <cpeyser@google.com>2017-02-21 23:47:43 +0000
committerGravatar Irina Iancu <elenairina@google.com>2017-02-22 08:28:40 +0000
commit2fe062bf34657e1794dd83d09edbf6b2f6b4979f (patch)
tree58e54ed1a9ad7e10063ed7ef56afbdf67a2f64cc
parent836d94a553141a7505aa86ba10a8bf957ab07545 (diff)
If dynamic configurations are turned on, ruleclass configuration transitions
apply on the top level. -- PiperOrigin-RevId: 148155171 MOS_MIGRATED_REVID=148155171
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/BuildView.java13
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsWithDynamicConfigurationsTest.java32
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");
+ }
}