diff options
author | John Cater <jcater@google.com> | 2017-07-18 17:32:44 +0200 |
---|---|---|
committer | Klaus Aehlig <aehlig@google.com> | 2017-07-19 10:20:20 +0200 |
commit | 15074a4990e167048e47ede8bdb6412998ac6798 (patch) | |
tree | c2e0c52ff4baebcd2774da6c8faa65289023bc08 /src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunction.java | |
parent | c8c988a8f7e0cdb94d2991f7a4bad14af446223e (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.java | 26 |
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 { |