Remove the $resolved_toolchains_internal attribute.
Closes #8002.
PiperOrigin-RevId: 243290817
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java b/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java
index 0660ed5..d866edc 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java
@@ -232,7 +232,7 @@
* Share common attributes across both base and Skylark base rules.
*/
public static RuleClass.Builder commonCoreAndSkylarkAttributes(RuleClass.Builder builder) {
- return PlatformSemantics.platformAttributes(builder)
+ return builder
// The visibility attribute is special: it is a nodep label, and loading the
// necessary package groups is handled by {@link LabelVisitor#visitTargetVisibility}.
// Package groups always have the null configuration so that they are not duplicated
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java
index 4764352..d8096c6 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java
@@ -449,12 +449,10 @@
OrderedSetMultimap<DependencyKind, ConfiguredTargetAndData> map, Target target) {
OrderedSetMultimap<Attribute, ConfiguredTargetAndData> result = OrderedSetMultimap.create();
for (Map.Entry<DependencyKind, ConfiguredTargetAndData> entry : map.entries()) {
- Attribute attribute =
- entry.getKey() == DependencyResolver.TOOLCHAIN_DEPENDENCY
- ? ((Rule) target)
- .getRuleClassObject()
- .getAttributeByName(PlatformSemantics.RESOLVED_TOOLCHAINS_ATTR)
- : entry.getKey().getAttribute();
+ if (entry.getKey() == DependencyResolver.TOOLCHAIN_DEPENDENCY) {
+ continue;
+ }
+ Attribute attribute = entry.getKey().getAttribute();
result.put(attribute, entry.getValue());
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/PlatformSemantics.java b/src/main/java/com/google/devtools/build/lib/analysis/PlatformSemantics.java
deleted file mode 100644
index facedb7..0000000
--- a/src/main/java/com/google/devtools/build/lib/analysis/PlatformSemantics.java
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2017 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.analysis;
-
-import static com.google.devtools.build.lib.packages.Attribute.attr;
-import static com.google.devtools.build.lib.packages.BuildType.LABEL_LIST;
-
-import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.packages.RuleClass;
-
-/** Helper class to manage rules' use of platforms. */
-public class PlatformSemantics {
-
- public static final String RESOLVED_TOOLCHAINS_ATTR = "$resolved_toolchains_internal";
- public static final String EXEC_COMPATIBLE_WITH_ATTR = "exec_compatible_with";
-
- public static RuleClass.Builder platformAttributes(RuleClass.Builder builder) {
- return builder.add(
- attr(RESOLVED_TOOLCHAINS_ATTR, LABEL_LIST)
- .nonconfigurable("Used in toolchain resolution")
- .value(ImmutableList.of()));
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
index 4b3eb4f..f0be11c 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
@@ -124,6 +124,7 @@
@Immutable
@AutoCodec
public class RuleClass {
+
@AutoCodec
static final Function<? super Rule, Map<String, Label>> NO_EXTERNAL_BINDINGS =
Functions.<Map<String, Label>>constant(ImmutableMap.<String, Label>of());
@@ -133,6 +134,7 @@
Functions.<Set<String>>constant(ImmutableSet.<String>of());
public static final PathFragment THIRD_PARTY_PREFIX = PathFragment.create("third_party");
+ public static final String EXEC_COMPATIBLE_WITH_ATTR = "exec_compatible_with";
/**
* A constraint for the package name of the Rule instances.
@@ -818,9 +820,9 @@
Preconditions.checkNotNull(ruleDefinitionEnvironmentHashCode, this.name);
}
if (executionPlatformConstraintsAllowed == ExecutionPlatformConstraintsAllowed.PER_TARGET
- && !this.contains("exec_compatible_with")) {
+ && !this.contains(EXEC_COMPATIBLE_WITH_ATTR)) {
this.add(
- attr("exec_compatible_with", BuildType.LABEL_LIST)
+ attr(EXEC_COMPATIBLE_WITH_ATTR, BuildType.LABEL_LIST)
.allowedFileTypes()
.nonconfigurable("Used in toolchain resolution")
.value(ImmutableList.of()));
diff --git a/src/main/java/com/google/devtools/build/lib/query2/TransitionsOutputFormatterCallback.java b/src/main/java/com/google/devtools/build/lib/query2/TransitionsOutputFormatterCallback.java
index 5c642cf..848a1cf 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/TransitionsOutputFormatterCallback.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/TransitionsOutputFormatterCallback.java
@@ -22,7 +22,6 @@
import com.google.devtools.build.lib.analysis.DependencyResolver;
import com.google.devtools.build.lib.analysis.DependencyResolver.DependencyKind;
import com.google.devtools.build.lib.analysis.DependencyResolver.InconsistentAspectOrderException;
-import com.google.devtools.build.lib.analysis.PlatformSemantics;
import com.google.devtools.build.lib.analysis.TargetAndConfiguration;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.config.BuildOptions;
@@ -38,8 +37,6 @@
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.ExtendedEventHandler;
-import com.google.devtools.build.lib.packages.BuildType;
-import com.google.devtools.build.lib.packages.ConfiguredAttributeMapper;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.packages.TargetUtils;
@@ -121,9 +118,7 @@
ImmutableMap<Label, ConfigMatchingProvider> configConditions =
((RuleConfiguredTarget) configuredTarget).getConfigConditions();
try {
- // Note: Being able to pull the $resolved_toolchain_internal attr unconditionally from the
- // mapper relies on the fact that {@link PlatformSemantics.RESOLVED_TOOLCHAINS_ATTR} exists
- // in every rule. Also, we don't actually use fromOptions in our implementation of
+ // We don't actually use fromOptions in our implementation of
// DependencyResolver but passing to avoid passing a null and since we have the information
// anyway.
deps =
@@ -133,9 +128,7 @@
hostConfiguration,
/*aspect=*/ null,
configConditions,
- ImmutableSet.copyOf(
- ConfiguredAttributeMapper.of(target.getAssociatedRule(), configConditions)
- .get(PlatformSemantics.RESOLVED_TOOLCHAINS_ATTR, BuildType.LABEL_LIST)),
+ /*toolchainLabels=*/ ImmutableSet.of(),
trimmingTransitionFactory);
} catch (EvalException | InconsistentAspectOrderException e) {
throw new InterruptedException(e.getMessage());
@@ -152,10 +145,12 @@
BuildOptions fromOptions = config.getOptions();
List<BuildOptions> toOptions = dep.getTransition().apply(fromOptions);
String hostConfigurationChecksum = hostConfiguration.checksum();
- String dependencyName =
- attributeAndDep.getKey() == DependencyResolver.TOOLCHAIN_DEPENDENCY
- ? PlatformSemantics.RESOLVED_TOOLCHAINS_ATTR
- : attributeAndDep.getKey().getAttribute().getName();
+ String dependencyName;
+ if (attributeAndDep.getKey() == DependencyResolver.TOOLCHAIN_DEPENDENCY) {
+ dependencyName = "[toolchain dependency]";
+ } else {
+ dependencyName = attributeAndDep.getKey().getAttribute().getName();
+ }
addResult(
" "
.concat(dependencyName)
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
index a933c8e..82785eb 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
@@ -34,7 +34,6 @@
import com.google.devtools.build.lib.analysis.DependencyResolver.DependencyKind;
import com.google.devtools.build.lib.analysis.DependencyResolver.InconsistentAspectOrderException;
import com.google.devtools.build.lib.analysis.EmptyConfiguredTarget;
-import com.google.devtools.build.lib.analysis.PlatformSemantics;
import com.google.devtools.build.lib.analysis.ResolvedToolchainContext;
import com.google.devtools.build.lib.analysis.TargetAndConfiguration;
import com.google.devtools.build.lib.analysis.ToolchainResolver;
@@ -451,7 +450,7 @@
if (rule.getRuleClassObject().executionPlatformConstraintsAllowed()
== ExecutionPlatformConstraintsAllowed.PER_TARGET) {
execConstraintLabels.addAll(
- mapper.get(PlatformSemantics.EXEC_COMPATIBLE_WITH_ATTR, BuildType.LABEL_LIST));
+ mapper.get(RuleClass.EXEC_COMPATIBLE_WITH_ATTR, BuildType.LABEL_LIST));
}
return execConstraintLabels.build();
diff --git a/src/test/java/com/google/devtools/build/lib/query2/ProtoOutputFormatterCallbackTest.java b/src/test/java/com/google/devtools/build/lib/query2/ProtoOutputFormatterCallbackTest.java
index a8461b1..0c9059d 100644
--- a/src/test/java/com/google/devtools/build/lib/query2/ProtoOutputFormatterCallbackTest.java
+++ b/src/test/java/com/google/devtools/build/lib/query2/ProtoOutputFormatterCallbackTest.java
@@ -14,11 +14,9 @@
package com.google.devtools.build.lib.query2;
import static com.google.common.truth.Truth.assertThat;
-import static com.google.devtools.build.lib.analysis.PlatformSemantics.RESOLVED_TOOLCHAINS_ATTR;
import static com.google.devtools.build.lib.packages.Attribute.attr;
import static com.google.devtools.build.lib.packages.BuildType.LABEL_LIST;
-import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import com.google.common.eventbus.EventBus;
import com.google.devtools.build.lib.analysis.AnalysisProtos;
@@ -75,10 +73,6 @@
"my_rule",
(builder, env) ->
builder
- .add(
- attr(RESOLVED_TOOLCHAINS_ATTR, LABEL_LIST)
- .nonconfigurable("Used in toolchain resolution")
- .value(ImmutableList.of()))
.add(attr("deps", LABEL_LIST).allowedFileTypes(FileTypeSet.ANY_FILE)));
helper.useRuleClassProvider(setRuleClassProviders(depsRule).build());
@@ -130,15 +124,10 @@
MockRule.define(
"my_rule",
(builder, env) ->
- builder
- .add(
- attr("deps", LABEL_LIST)
- .allowedFileTypes(FileTypeSet.ANY_FILE)
- .cfg(TransitionFactories.of(attributePatchTransition)))
- .add(
- attr(RESOLVED_TOOLCHAINS_ATTR, LABEL_LIST)
- .nonconfigurable("Used in toolchain resolution")
- .value(ImmutableList.of())));
+ builder.add(
+ attr("deps", LABEL_LIST)
+ .allowedFileTypes(FileTypeSet.ANY_FILE)
+ .cfg(TransitionFactories.of(attributePatchTransition))));
helper.useRuleClassProvider(setRuleClassProviders(ruleWithPatch, getSimpleRule()).build());
@@ -216,14 +205,7 @@
}
private MockRule getSimpleRule() {
- return () ->
- MockRule.define(
- "simple_rule",
- (builder, unusedEnv) ->
- builder.add(
- attr(RESOLVED_TOOLCHAINS_ATTR, LABEL_LIST)
- .nonconfigurable("Used in toolchain resolution")
- .value(ImmutableList.of())));
+ return () -> MockRule.define("simple_rule");
}
private AnalysisProtos.CqueryResult getOutput(String queryExpression) throws Exception {
diff --git a/src/test/java/com/google/devtools/build/lib/query2/engine/PostAnalysisQueryTest.java b/src/test/java/com/google/devtools/build/lib/query2/engine/PostAnalysisQueryTest.java
index 6814dc6..6ee27c6 100644
--- a/src/test/java/com/google/devtools/build/lib/query2/engine/PostAnalysisQueryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/query2/engine/PostAnalysisQueryTest.java
@@ -14,14 +14,11 @@
package com.google.devtools.build.lib.query2.engine;
import static com.google.common.truth.Truth.assertThat;
-import static com.google.devtools.build.lib.analysis.PlatformSemantics.RESOLVED_TOOLCHAINS_ATTR;
import static com.google.devtools.build.lib.packages.Attribute.attr;
import static com.google.devtools.build.lib.packages.BuildType.LABEL;
-import static com.google.devtools.build.lib.packages.BuildType.LABEL_LIST;
import static com.google.devtools.build.lib.testutil.TestConstants.GENRULE_SETUP;
import static com.google.devtools.build.lib.testutil.TestConstants.PLATFORM_LABEL;
-import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
@@ -222,13 +219,8 @@
MockRule.define(
"implicit_toolchain_deps_rule",
(builder, env) ->
- builder
- .addRequiredToolchains(
- Label.parseAbsoluteUnchecked("//test:toolchain_type"))
- .add(
- attr(RESOLVED_TOOLCHAINS_ATTR, LABEL_LIST)
- .nonconfigurable("Used in toolchain resolution")
- .value(ImmutableList.of())));
+ builder.addRequiredToolchains(
+ Label.parseAbsoluteUnchecked("//test:toolchain_type")));
helper.useRuleClassProvider(setRuleClassProviders(ruleWithImplicitDeps).build());
writeFile(