diff options
author | 2017-11-06 23:10:36 +0100 | |
---|---|---|
committer | 2017-11-07 19:07:02 +0100 | |
commit | a7f8a91e7692be2e1941cb82da486709c228aad7 (patch) | |
tree | 6256357e5f2bd26496ecff12122e9b4e11fa36bc /src/main/java/com/google/devtools/build/lib/rules/ToolchainType.java | |
parent | 49212e985d41b03d5e8cd4417f773748596587fe (diff) |
Introduce cc_toolchain_type, which exports c++ make variables. Use
//tools/cpp:toolchain_type as the canonical c++ toolchain.
PiperOrigin-RevId: 174759558
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/ToolchainType.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/ToolchainType.java | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/ToolchainType.java b/src/main/java/com/google/devtools/build/lib/rules/ToolchainType.java index d9dd120867..46d2828f9b 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/ToolchainType.java +++ b/src/main/java/com/google/devtools/build/lib/rules/ToolchainType.java @@ -14,6 +14,7 @@ package com.google.devtools.build.lib.rules; +import com.google.common.base.Function; import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder; @@ -23,6 +24,7 @@ import com.google.devtools.build.lib.analysis.Runfiles; import com.google.devtools.build.lib.analysis.RunfilesProvider; import com.google.devtools.build.lib.analysis.TemplateVariableInfo; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; +import com.google.devtools.build.lib.analysis.config.BuildConfiguration.Fragment; import com.google.devtools.build.lib.cmdline.Label; import java.util.TreeMap; @@ -30,19 +32,37 @@ import java.util.TreeMap; * Abstract base class for {@code toolchain_type}. */ public class ToolchainType implements RuleConfiguredTargetFactory { - private final ImmutableMap<Label, Class<? extends BuildConfiguration.Fragment>> fragmentMap; + private ImmutableMap<Label, Class<? extends BuildConfiguration.Fragment>> fragmentMap; + private final Function<RuleContext, ImmutableMap<Label, Class<? extends Fragment>>> + fragmentMapFromRuleContext; private final ImmutableMap<Label, ImmutableMap<String, String>> hardcodedVariableMap; protected ToolchainType( ImmutableMap<Label, Class<? extends BuildConfiguration.Fragment>> fragmentMap, ImmutableMap<Label, ImmutableMap<String, String>> hardcodedVariableMap) { this.fragmentMap = fragmentMap; + this.fragmentMapFromRuleContext = null; + this.hardcodedVariableMap = hardcodedVariableMap; + } + + // This constructor is required to allow for toolchains that depend on the tools repository, + // which depends on RuleContext. + protected ToolchainType( + Function<RuleContext, ImmutableMap<Label, Class<? extends Fragment>>> + fragmentMapFromRuleContext, + ImmutableMap<Label, ImmutableMap<String, String>> hardcodedVariableMap) { + this.fragmentMap = null; + this.fragmentMapFromRuleContext = fragmentMapFromRuleContext; this.hardcodedVariableMap = hardcodedVariableMap; } @Override public ConfiguredTarget create(RuleContext ruleContext) throws InterruptedException, RuleErrorException { + if (fragmentMap == null && fragmentMapFromRuleContext != null) { + this.fragmentMap = fragmentMapFromRuleContext.apply(ruleContext); + } + // This cannot be an ImmutableMap.Builder because that asserts when a key is duplicated TreeMap<String, String> makeVariables = new TreeMap<>(); Class<? extends BuildConfiguration.Fragment> fragmentClass = |