Thread the ToolchainContext into dependency resolution.
Part of work on execution transitions, #7935.
Closes #8148.
PiperOrigin-RevId: 245431886
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java b/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java
index eb57e3f..21172b4 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java
@@ -177,7 +177,7 @@
* This is needed to support {@link LateBoundDefault#useHostConfiguration()}.
* @param aspect the aspect applied to this target (if any)
* @param configConditions resolver for config_setting labels
- * @param toolchainLabels required toolchain labels
+ * @param toolchainContext the toolchain context for this target
* @param trimmingTransitionFactory the transition factory used to trim rules (note: this is a
* temporary feature; see the corresponding methods in ConfiguredRuleClassProvider)
* @return a mapping of each attribute in this rule or aspects to its dependent nodes
@@ -187,7 +187,7 @@
BuildConfiguration hostConfig,
@Nullable Aspect aspect,
ImmutableMap<Label, ConfigMatchingProvider> configConditions,
- ImmutableSet<Label> toolchainLabels,
+ @Nullable ToolchainContext toolchainContext,
@Nullable TransitionFactory<Rule> trimmingTransitionFactory)
throws EvalException, InterruptedException, InconsistentAspectOrderException {
NestedSetBuilder<Cause> rootCauses = NestedSetBuilder.stableOrder();
@@ -197,7 +197,7 @@
hostConfig,
aspect != null ? ImmutableList.of(aspect) : ImmutableList.<Aspect>of(),
configConditions,
- toolchainLabels,
+ toolchainContext,
rootCauses,
trimmingTransitionFactory);
if (!rootCauses.isEmpty()) {
@@ -231,7 +231,7 @@
* This is needed to support {@link LateBoundDefault#useHostConfiguration()}.
* @param aspects the aspects applied to this target (if any)
* @param configConditions resolver for config_setting labels
- * @param toolchainLabels required toolchain labels
+ * @param toolchainContext the toolchain context for this target
* @param trimmingTransitionFactory the transition factory used to trim rules (note: this is a
* temporary feature; see the corresponding methods in ConfiguredRuleClassProvider)
* @param rootCauses collector for dep labels that can't be (loading phase) loaded
@@ -242,7 +242,7 @@
BuildConfiguration hostConfig,
Iterable<Aspect> aspects,
ImmutableMap<Label, ConfigMatchingProvider> configConditions,
- ImmutableSet<Label> toolchainLabels,
+ @Nullable ToolchainContext toolchainContext,
NestedSetBuilder<Cause> rootCauses,
@Nullable TransitionFactory<Rule> trimmingTransitionFactory)
throws EvalException, InterruptedException, InconsistentAspectOrderException {
@@ -260,7 +260,7 @@
} else if (target instanceof EnvironmentGroup) {
visitTargetVisibility(node, outgoingLabels);
} else if (target instanceof Rule) {
- visitRule(node, hostConfig, aspects, configConditions, toolchainLabels, outgoingLabels);
+ visitRule(node, hostConfig, aspects, configConditions, toolchainContext, outgoingLabels);
} else if (target instanceof PackageGroup) {
outgoingLabels.putAll(VISIBILITY_DEPENDENCY, ((PackageGroup) target).getIncludes());
} else {
@@ -400,7 +400,7 @@
BuildConfiguration hostConfig,
Iterable<Aspect> aspects,
ImmutableMap<Label, ConfigMatchingProvider> configConditions,
- ImmutableSet<Label> toolchainLabels,
+ @Nullable ToolchainContext toolchainContext,
OrderedSetMultimap<DependencyKind, Label> outgoingLabels)
throws EvalException {
Preconditions.checkArgument(node.getTarget() instanceof Rule, node);
@@ -454,7 +454,9 @@
rule.getPackage().getDefaultRestrictedTo());
}
- outgoingLabels.putAll(TOOLCHAIN_DEPENDENCY, toolchainLabels);
+ if (toolchainContext != null) {
+ outgoingLabels.putAll(TOOLCHAIN_DEPENDENCY, toolchainContext.resolvedToolchainLabels());
+ }
}
private void resolveAttributes(
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 1365d72..1a8126f 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
@@ -15,7 +15,6 @@
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Maps;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.Dependency;
@@ -132,9 +131,7 @@
hostConfiguration,
/*aspect=*/ null,
configConditions,
- toolchainContext == null
- ? ImmutableSet.of()
- : toolchainContext.resolvedToolchainLabels(),
+ toolchainContext,
trimmingTransitionFactory);
} catch (EvalException | InconsistentAspectOrderException e) {
throw new InterruptedException(e.getMessage());
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
index c48e125..b55c782 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
@@ -446,9 +446,7 @@
originalTargetAndAspectConfiguration,
aspectPath,
configConditions,
- unloadedToolchainContext == null
- ? ImmutableSet.of()
- : unloadedToolchainContext.resolvedToolchainLabels(),
+ unloadedToolchainContext,
ruleClassProvider,
view.getHostConfiguration(originalTargetAndAspectConfiguration.getConfiguration()),
transitivePackagesForPackageRootResolution,
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 9e24416..feeb02f 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
@@ -340,9 +340,7 @@
ctgValue,
ImmutableList.<Aspect>of(),
configConditions,
- unloadedToolchainContext == null
- ? ImmutableSet.of()
- : unloadedToolchainContext.resolvedToolchainLabels(),
+ unloadedToolchainContext,
ruleClassProvider,
view.getHostConfiguration(configuration),
transitivePackagesForPackageRootResolution,
@@ -486,7 +484,7 @@
* @param ctgValue the label and the configuration of the node
* @param aspects
* @param configConditions the configuration conditions for evaluating the attributes of the node
- * @param toolchainLabels labels of required toolchain dependencies
+ * @param toolchainContext the toolchain context for this target
* @param ruleClassProvider rule class provider for determining the right configuration fragments
* to apply to deps
* @param hostConfiguration the host configuration. There's a noticeable performance hit from
@@ -503,7 +501,7 @@
TargetAndConfiguration ctgValue,
Iterable<Aspect> aspects,
ImmutableMap<Label, ConfigMatchingProvider> configConditions,
- ImmutableSet<Label> toolchainLabels,
+ @Nullable UnloadedToolchainContext toolchainContext,
RuleClassProvider ruleClassProvider,
BuildConfiguration hostConfiguration,
@Nullable NestedSetBuilder<Package> transitivePackagesForPackageRootResolution,
@@ -520,7 +518,7 @@
hostConfiguration,
aspects,
configConditions,
- toolchainLabels,
+ toolchainContext,
transitiveRootCauses,
((ConfiguredRuleClassProvider) ruleClassProvider).getTrimmingTransitionFactory());
} catch (EvalException e) {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PostConfiguredTargetFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PostConfiguredTargetFunction.java
index dddc151..0351338 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PostConfiguredTargetFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PostConfiguredTargetFunction.java
@@ -156,9 +156,7 @@
hostConfiguration,
/*aspect=*/ null,
configConditions,
- unloadedToolchainContext == null
- ? ImmutableSet.of()
- : unloadedToolchainContext.resolvedToolchainLabels(),
+ unloadedToolchainContext,
ruleClassProvider.getTrimmingTransitionFactory());
deps =
ConfigurationResolver.resolveConfigurations(
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java b/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java
index 4a61ad2..fa628f9 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java
@@ -23,7 +23,6 @@
import com.google.common.base.Function;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
@@ -359,10 +358,7 @@
Iterable<Dependency> targets =
getView()
.getDirectPrerequisiteDependenciesForTesting(
- reporter,
- top,
- getBuildConfigurationCollection(),
- /*toolchainLabels=*/ ImmutableSet.of())
+ reporter, top, getBuildConfigurationCollection(), /*toolchainContext=*/ null)
.values();
Dependency innerDependency =
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/DependencyResolverTest.java b/src/test/java/com/google/devtools/build/lib/analysis/DependencyResolverTest.java
index fb1e755..a546f28 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/DependencyResolverTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/DependencyResolverTest.java
@@ -17,7 +17,6 @@
import static com.google.common.truth.Truth.assertWithMessage;
import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.analysis.DependencyResolver.DependencyKind;
import com.google.devtools.build.lib.analysis.util.AnalysisTestCase;
import com.google.devtools.build.lib.analysis.util.TestAspects;
@@ -102,7 +101,7 @@
getHostConfiguration(),
aspect != null ? Aspect.forNative(aspect) : null,
ImmutableMap.of(),
- /*toolchainLabels=*/ ImmutableSet.of(),
+ /*toolchainContext=*/ null,
/*trimmingTransitionFactory=*/ null);
return prerequisiteMap;
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewForTesting.java b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewForTesting.java
index b267e88..1569c90 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewForTesting.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewForTesting.java
@@ -41,6 +41,7 @@
import com.google.devtools.build.lib.analysis.ResolvedToolchainContext;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.TargetAndConfiguration;
+import com.google.devtools.build.lib.analysis.ToolchainContext;
import com.google.devtools.build.lib.analysis.TopLevelArtifactContext;
import com.google.devtools.build.lib.analysis.ViewCreationFailedException;
import com.google.devtools.build.lib.analysis.WorkspaceStatusAction;
@@ -94,6 +95,7 @@
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
+import javax.annotation.Nullable;
/**
* A util class that contains all the helper stuff previously in BuildView that only exists to give
@@ -263,7 +265,7 @@
configuration,
ImmutableSet.copyOf(
getDirectPrerequisiteDependenciesForTesting(
- eventHandler, ct, configurations, /*toolchainLabels=*/ ImmutableSet.of())
+ eventHandler, ct, configurations, /* toolchainContext= */ null)
.values()));
}
@@ -272,7 +274,7 @@
final ExtendedEventHandler eventHandler,
final ConfiguredTarget ct,
BuildConfigurationCollection configurations,
- ImmutableSet<Label> toolchainLabels)
+ @Nullable ToolchainContext toolchainContext)
throws EvalException, InterruptedException, InconsistentAspectOrderException,
StarlarkTransition.TransitionException, InvalidConfigurationException {
@@ -329,7 +331,7 @@
configurations.getHostConfiguration(),
/*aspect=*/ null,
getConfigurableAttributeKeysForTesting(eventHandler, ctgNode),
- toolchainLabels,
+ toolchainContext,
ruleClassProvider.getTrimmingTransitionFactory());
}
@@ -363,12 +365,12 @@
final ExtendedEventHandler eventHandler,
ConfiguredTarget target,
BuildConfigurationCollection configurations,
- ImmutableSet<Label> toolchainLabels)
+ @Nullable ToolchainContext toolchainContext)
throws EvalException, InvalidConfigurationException, InterruptedException,
InconsistentAspectOrderException, StarlarkTransition.TransitionException {
OrderedSetMultimap<DependencyKind, Dependency> depNodeNames =
getDirectPrerequisiteDependenciesForTesting(
- eventHandler, target, configurations, toolchainLabels);
+ eventHandler, target, configurations, toolchainContext);
ImmutableMultimap<Dependency, ConfiguredTargetAndData> cts =
skyframeExecutor.getConfiguredTargetMapForTesting(
@@ -503,10 +505,7 @@
OrderedSetMultimap<DependencyKind, ConfiguredTargetAndData> prerequisiteMap =
getPrerequisiteMapForTesting(
- eventHandler,
- configuredTarget,
- configurations,
- unloadedToolchainContext.resolvedToolchainLabels());
+ eventHandler, configuredTarget, configurations, unloadedToolchainContext);
String targetDescription = target.toString();
ResolvedToolchainContext toolchainContext =
ResolvedToolchainContext.load(
@@ -551,10 +550,7 @@
InconsistentAspectOrderException, StarlarkTransition.TransitionException {
Collection<ConfiguredTargetAndData> configuredTargets =
getPrerequisiteMapForTesting(
- eventHandler,
- dependentTarget,
- configurations,
- /*toolchainLabels=*/ ImmutableSet.of())
+ eventHandler, dependentTarget, configurations, /*toolchainContext=*/ null)
.values();
for (ConfiguredTargetAndData ct : configuredTargets) {
if (ct.getTarget().getLabel().equals(desiredTarget)) {
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsTest.java
index 628e9c5..b8ab9ba 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsTest.java
@@ -24,7 +24,6 @@
import com.google.common.collect.HashMultimap;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.ListMultimap;
import com.google.common.collect.Multimap;
@@ -147,7 +146,7 @@
(TargetAndConfiguration) skyKey.argument(),
ImmutableList.<Aspect>of(),
ImmutableMap.<Label, ConfigMatchingProvider>of(),
- /*toolchainLabels=*/ ImmutableSet.of(),
+ /*toolchainContext=*/ null,
stateProvider.lateBoundRuleClassProvider(),
stateProvider.lateBoundHostConfig(),
NestedSetBuilder.<Package>stableOrder(),