aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-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");
+ }
}