diff options
author | 2017-07-20 19:43:20 +0200 | |
---|---|---|
committer | 2017-07-21 09:14:45 +0200 | |
commit | 2e56f0664d91fce3974938198d8a30e1aeef8d62 (patch) | |
tree | a3e05e61f632804e162f8c626e5e656d00905cba /src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java | |
parent | 520bbbc5ff375d3c4aebe09ee51442dd5511e7b8 (diff) |
Use toolchain resolution in rule creation.
Part of #2219.
Change-Id: Id4929d5ddcd57b4635af5e513eb9a09f16a78e71
PiperOrigin-RevId: 162634398
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java | 64 |
1 files changed, 44 insertions, 20 deletions
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 5569a643b3..b01faa95e4 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 @@ -27,6 +27,7 @@ import com.google.devtools.build.lib.analysis.DependencyResolver.InconsistentAsp import com.google.devtools.build.lib.analysis.MergedConfiguredTarget; import com.google.devtools.build.lib.analysis.MergedConfiguredTarget.DuplicateException; import com.google.devtools.build.lib.analysis.TargetAndConfiguration; +import com.google.devtools.build.lib.analysis.ToolchainContext; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider; import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException; @@ -54,6 +55,7 @@ import com.google.devtools.build.lib.skyframe.ConfiguredTargetFunction.Configure import com.google.devtools.build.lib.skyframe.ConfiguredTargetFunction.DependencyEvaluationException; import com.google.devtools.build.lib.skyframe.SkyframeExecutor.BuildViewProvider; import com.google.devtools.build.lib.skyframe.SkylarkImportLookupFunction.SkylarkImportFailedException; +import com.google.devtools.build.lib.skyframe.ToolchainUtil.ToolchainContextException; import com.google.devtools.build.lib.syntax.Type.ConversionException; import com.google.devtools.build.lib.util.OrderedSetMultimap; import com.google.devtools.build.lib.util.Preconditions; @@ -264,18 +266,35 @@ public final class AspectFunction implements SkyFunction { return null; } + // Determine what toolchains are needed by this target. + ToolchainContext toolchainContext; + try { + ImmutableList<Label> requiredToolchains = aspect.getDefinition().getRequiredToolchains(); + toolchainContext = + ToolchainUtil.createToolchainContext( + env, requiredToolchains, key.getAspectConfiguration()); + } catch (ToolchainContextException e) { + // TODO(katre): better error handling + throw new AspectCreationException(e.getMessage()); + } + if (env.valuesMissing()) { + return null; + } + OrderedSetMultimap<Attribute, ConfiguredTarget> depValueMap; try { - depValueMap = ConfiguredTargetFunction.computeDependencies( - env, - resolver, - originalTargetAndAspectConfiguration, - aspectPath, - configConditions, - ruleClassProvider, - view.getHostConfiguration(originalTargetAndAspectConfiguration.getConfiguration()), - transitivePackages, - transitiveRootCauses); + depValueMap = + ConfiguredTargetFunction.computeDependencies( + env, + resolver, + originalTargetAndAspectConfiguration, + aspectPath, + configConditions, + toolchainContext, + ruleClassProvider, + view.getHostConfiguration(originalTargetAndAspectConfiguration.getConfiguration()), + transitivePackages, + transitiveRootCauses); } catch (ConfiguredTargetFunctionException e) { throw new AspectCreationException(e.getMessage()); } @@ -296,6 +315,7 @@ public final class AspectFunction implements SkyFunction { associatedTarget, key.getAspectConfiguration(), configConditions, + toolchainContext, depValueMap, transitivePackages); } catch (DependencyEvaluationException e) { @@ -419,6 +439,7 @@ public final class AspectFunction implements SkyFunction { ConfiguredTarget associatedTarget, BuildConfiguration aspectConfiguration, ImmutableMap<Label, ConfigMatchingProvider> configConditions, + ToolchainContext toolchainContext, OrderedSetMultimap<Attribute, ConfiguredTarget> directDeps, NestedSetBuilder<Package> transitivePackages) throws AspectFunctionException, InterruptedException { @@ -434,16 +455,19 @@ public final class AspectFunction implements SkyFunction { ConfiguredAspect configuredAspect; if (ConfiguredTargetFunction.aspectMatchesConfiguredTarget(associatedTarget, aspect)) { - configuredAspect = view.getConfiguredTargetFactory().createAspect( - analysisEnvironment, - associatedTarget, - aspectPath, - aspectFactory, - aspect, - directDeps, - configConditions, - aspectConfiguration, - view.getHostConfiguration(aspectConfiguration)); + configuredAspect = + view.getConfiguredTargetFactory() + .createAspect( + analysisEnvironment, + associatedTarget, + aspectPath, + aspectFactory, + aspect, + directDeps, + configConditions, + toolchainContext, + aspectConfiguration, + view.getHostConfiguration(aspectConfiguration)); } else { configuredAspect = ConfiguredAspect.forNonapplicableTarget(aspect.getDescriptor()); } |