diff options
Diffstat (limited to 'src')
7 files changed, 49 insertions, 29 deletions
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 c04365a903..3d970bb7ee 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 @@ -275,11 +275,6 @@ public final class ConfiguredTargetFactory { @Nullable ToolchainContext toolchainContext) throws InterruptedException, ActionConflictException { - // Load the requested toolchains into the ToolchainContext. - if (toolchainContext != null) { - toolchainContext.resolveToolchains(prerequisiteMap); - } - // Visibility computation and checking is done for every rule. RuleContext ruleContext = new RuleContext.Builder( @@ -392,11 +387,6 @@ public final class ConfiguredTargetFactory { BuildConfiguration hostConfiguration) throws AspectFunctionException, InterruptedException { - // Load the requested toolchains into the ToolchainContext. - if (toolchainContext != null) { - toolchainContext.resolveToolchains(prerequisiteMap); - } - RuleContext.Builder builder = new RuleContext.Builder( env, 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 e1339795f5..027323239c 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 @@ -434,7 +434,9 @@ public final class AspectFunction implements SkyFunction { originalTargetAndAspectConfiguration, aspectPath, configConditions, - toolchainContext, + toolchainContext == null + ? ImmutableSet.of() + : toolchainContext.resolvedToolchainLabels(), ruleClassProvider, view.getHostConfiguration(originalTargetAndAspectConfiguration.getConfiguration()), transitivePackagesForPackageRootResolution, @@ -451,6 +453,11 @@ public final class AspectFunction implements SkyFunction { new AspectCreationException("Loading failed", transitiveRootCauses.build())); } + // Load the requested toolchains into the ToolchainContext, now that we have dependencies. + if (toolchainContext != null) { + toolchainContext.resolveToolchains(depValueMap); + } + return createAspect( env, key, 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 0598feb03e..938ce5e51b 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 @@ -294,7 +294,9 @@ public final class ConfiguredTargetFunction implements SkyFunction { ctgValue, ImmutableList.<Aspect>of(), configConditions, - toolchainContext, + toolchainContext == null + ? ImmutableSet.of() + : toolchainContext.resolvedToolchainLabels(), ruleClassProvider, view.getHostConfiguration(configuration), transitivePackagesForPackageRootResolution, @@ -309,6 +311,12 @@ public final class ConfiguredTargetFunction implements SkyFunction { "Analysis failed", configuration, transitiveRootCauses.build())); } Preconditions.checkNotNull(depValueMap); + + // Load the requested toolchains into the ToolchainContext, now that we have dependencies. + if (toolchainContext != null) { + toolchainContext.resolveToolchains(depValueMap); + } + ConfiguredTargetValue ans = createConfiguredTarget( view, @@ -416,7 +424,7 @@ public final class ConfiguredTargetFunction implements SkyFunction { * @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 toolchainContext context information for required toolchains + * @param toolchainLabels labels of required toolchain dependencies * @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 @@ -433,7 +441,7 @@ public final class ConfiguredTargetFunction implements SkyFunction { TargetAndConfiguration ctgValue, Iterable<Aspect> aspects, ImmutableMap<Label, ConfigMatchingProvider> configConditions, - @Nullable ToolchainContext toolchainContext, + ImmutableSet<Label> toolchainLabels, RuleClassProvider ruleClassProvider, BuildConfiguration hostConfiguration, @Nullable NestedSetBuilder<Package> transitivePackagesForPackageRootResolution, @@ -450,9 +458,7 @@ public final class ConfiguredTargetFunction implements SkyFunction { hostConfiguration, aspects, configConditions, - toolchainContext == null - ? ImmutableSet.of() - : toolchainContext.resolvedToolchainLabels(), + toolchainLabels, transitiveRootCauses, defaultBuildOptions, ((ConfiguredRuleClassProvider) ruleClassProvider).getTrimmingTransitionFactory()); 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 e56942b2fd..9e05215db8 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 @@ -125,7 +125,7 @@ public class PostConfiguredTargetFunction implements SkyFunction { hostConfiguration, /*aspect=*/ null, configConditions, - /*toolchainLabels*/ ImmutableSet.of(), + /*toolchainLabels=*/ ImmutableSet.of(), defaultBuildOptions, ((ConfiguredRuleClassProvider) ruleClassProvider).getTrimmingTransitionFactory()); if (configuredTargetAndData.getConfiguration() != null) { 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 25e0c83f65..471c742ba6 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,6 +23,7 @@ import static org.junit.Assert.fail; 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; @@ -376,8 +377,14 @@ public class BuildViewTest extends BuildViewTestBase { "filegroup(name='top', srcs=[':inner', 'file'])", "sh_binary(name='inner', srcs=['script.sh'])"); ConfiguredTarget top = Iterables.getOnlyElement(update("//package:top").getTargetsToBuild()); - Iterable<Dependency> targets = getView().getDirectPrerequisiteDependenciesForTesting( - reporter, top, getBuildConfigurationCollection(), /*toolchainContext=*/ null).values(); + Iterable<Dependency> targets = + getView() + .getDirectPrerequisiteDependenciesForTesting( + reporter, + top, + getBuildConfigurationCollection(), + /*toolchainLabels=*/ ImmutableSet.of()) + .values(); Dependency innerDependency = Dependency.withTransitionAndAspects( 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 14a3cc5386..7ab4d65212 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 @@ -262,7 +262,7 @@ public class BuildViewForTesting { configuration, ImmutableSet.copyOf( getDirectPrerequisiteDependenciesForTesting( - eventHandler, ct, configurations, /*toolchainContext=*/ null) + eventHandler, ct, configurations, /*toolchainLabels=*/ ImmutableSet.of()) .values())); } @@ -271,7 +271,7 @@ public class BuildViewForTesting { final ExtendedEventHandler eventHandler, final ConfiguredTarget ct, BuildConfigurationCollection configurations, - ToolchainContext toolchainContext) + ImmutableSet<Label> toolchainLabels) throws EvalException, InvalidConfigurationException, InterruptedException, InconsistentAspectOrderException { @@ -352,7 +352,7 @@ public class BuildViewForTesting { configurations.getHostConfiguration(), /*aspect=*/ null, getConfigurableAttributeKeysForTesting(eventHandler, ctgNode), - toolchainContext == null ? ImmutableSet.of() : toolchainContext.resolvedToolchainLabels(), + toolchainLabels, skyframeExecutor.getDefaultBuildOptions(), ruleClassProvider.getTrimmingTransitionFactory()); } @@ -386,12 +386,12 @@ public class BuildViewForTesting { final ExtendedEventHandler eventHandler, ConfiguredTarget target, BuildConfigurationCollection configurations, - ToolchainContext toolchainContext) + ImmutableSet<Label> toolchainLabels) throws EvalException, InvalidConfigurationException, InterruptedException, InconsistentAspectOrderException { OrderedSetMultimap<Attribute, Dependency> depNodeNames = getDirectPrerequisiteDependenciesForTesting( - eventHandler, target, configurations, toolchainContext); + eventHandler, target, configurations, toolchainLabels); ImmutableMultimap<Dependency, ConfiguredTargetAndData> cts = skyframeExecutor.getConfiguredTargetMapForTesting( @@ -495,7 +495,10 @@ public class BuildViewForTesting { requiredToolchains, targetConfig, eventHandler); OrderedSetMultimap<Attribute, ConfiguredTargetAndData> prerequisiteMap = getPrerequisiteMapForTesting( - eventHandler, configuredTarget, configurations, toolchainContext); + eventHandler, + configuredTarget, + configurations, + toolchainContext.resolvedToolchainLabels()); toolchainContext.resolveToolchains(prerequisiteMap); return new RuleContext.Builder( @@ -512,7 +515,10 @@ public class BuildViewForTesting { PackageGroupContents.create(ImmutableList.of(PackageSpecification.everything())))) .setPrerequisites( getPrerequisiteMapForTesting( - eventHandler, configuredTarget, configurations, toolchainContext)) + eventHandler, + configuredTarget, + configurations, + toolchainContext.resolvedToolchainLabels())) .setConfigConditions(ImmutableMap.<Label, ConfigMatchingProvider>of()) .setUniversalFragments(ruleClassProvider.getUniversalFragments()) .setToolchainContext(toolchainContext) @@ -534,7 +540,10 @@ public class BuildViewForTesting { InconsistentAspectOrderException { Collection<ConfiguredTargetAndData> configuredTargets = getPrerequisiteMapForTesting( - eventHandler, dependentTarget, configurations, /*toolchainContext=*/ null) + eventHandler, + dependentTarget, + configurations, + /*toolchainLabels=*/ ImmutableSet.of()) .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 79fdc5f56e..31091267d3 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,6 +24,7 @@ import com.google.common.collect.Collections2; 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; @@ -145,7 +146,7 @@ public class ConfigurationsForTargetsTest extends AnalysisTestCase { (TargetAndConfiguration) skyKey.argument(), ImmutableList.<Aspect>of(), ImmutableMap.<Label, ConfigMatchingProvider>of(), - /*toolchainContext=*/ null, + /*toolchainLabels=*/ ImmutableSet.of(), stateProvider.lateBoundRuleClassProvider(), stateProvider.lateBoundHostConfig(), NestedSetBuilder.<Package>stableOrder(), |