aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
diff options
context:
space:
mode:
authorGravatar John Cater <jcater@google.com>2017-07-20 19:43:20 +0200
committerGravatar Klaus Aehlig <aehlig@google.com>2017-07-21 09:14:45 +0200
commit2e56f0664d91fce3974938198d8a30e1aeef8d62 (patch)
treea3e05e61f632804e162f8c626e5e656d00905cba /src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
parent520bbbc5ff375d3c4aebe09ee51442dd5511e7b8 (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.java64
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());
}