aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunction.java
diff options
context:
space:
mode:
authorGravatar John Cater <jcater@google.com>2017-07-18 17:32:44 +0200
committerGravatar Klaus Aehlig <aehlig@google.com>2017-07-19 10:20:20 +0200
commit15074a4990e167048e47ede8bdb6412998ac6798 (patch)
treec2e0c52ff4baebcd2774da6c8faa65289023bc08 /src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunction.java
parentc8c988a8f7e0cdb94d2991f7a4bad14af446223e (diff)
Add --extra_toolchains flag to register additional toolchain labels.
Fixes https://github.com/katre/bazel/issues/4. Change-Id: I664aaeb0d2aa4f36ecd0f1a5f13b5d7f25dcc8d6 PiperOrigin-RevId: 162355466
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunction.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunction.java26
1 files changed, 22 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunction.java
index e77c53d2b9..666da966c1 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunction.java
@@ -16,10 +16,12 @@ package com.google.devtools.build.lib.skyframe;
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
+import com.google.devtools.build.lib.analysis.PlatformConfiguration;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.platform.DeclaredToolchainInfo;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.rules.ExternalPackageUtil;
+import com.google.devtools.build.lib.rules.ExternalPackageUtil.ExternalPackageException;
import com.google.devtools.build.lib.skyframe.ConfiguredTargetFunction.ConfiguredValueCreationException;
import com.google.devtools.build.skyframe.LegacySkyKey;
import com.google.devtools.build.skyframe.SkyFunction;
@@ -44,15 +46,22 @@ public class RegisteredToolchainsFunction implements SkyFunction {
BuildConfiguration configuration = (BuildConfiguration) skyKey.argument();
- // Get the registered toolchains.
- List<Label> registeredToolchainLabels = ExternalPackageUtil.getRegisteredToolchainLabels(env);
- if (registeredToolchainLabels == null) {
+ ImmutableList.Builder<Label> registeredToolchainLabels = new ImmutableList.Builder<>();
+
+ // Get the toolchains from the configuration.
+ PlatformConfiguration platformConfiguration =
+ configuration.getFragment(PlatformConfiguration.class);
+ registeredToolchainLabels.addAll(platformConfiguration.getExtraToolchains());
+
+ // Get the registered toolchains from the WORKSPACE.
+ registeredToolchainLabels.addAll(getWorkspaceToolchains(env));
+ if (env.valuesMissing()) {
return null;
}
// Load the configured target for each, and get the declared toolchain providers.
ImmutableList<DeclaredToolchainInfo> registeredToolchains =
- configureRegisteredToolchains(env, configuration, registeredToolchainLabels);
+ configureRegisteredToolchains(env, configuration, registeredToolchainLabels.build());
if (env.valuesMissing()) {
return null;
}
@@ -60,6 +69,15 @@ public class RegisteredToolchainsFunction implements SkyFunction {
return RegisteredToolchainsValue.create(registeredToolchains);
}
+ private Iterable<? extends Label> getWorkspaceToolchains(Environment env)
+ throws ExternalPackageException, InterruptedException {
+ List<Label> labels = ExternalPackageUtil.getRegisteredToolchainLabels(env);
+ if (labels == null) {
+ return ImmutableList.of();
+ }
+ return labels;
+ }
+
private ImmutableList<DeclaredToolchainInfo> configureRegisteredToolchains(
Environment env, BuildConfiguration configuration, List<Label> labels)
throws InterruptedException, RegisteredToolchainsFunctionException {