aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/ToolchainType.java
diff options
context:
space:
mode:
authorGravatar cpeyser <cpeyser@google.com>2017-11-06 23:10:36 +0100
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2017-11-07 19:07:02 +0100
commita7f8a91e7692be2e1941cb82da486709c228aad7 (patch)
tree6256357e5f2bd26496ecff12122e9b4e11fa36bc /src/main/java/com/google/devtools/build/lib/rules/ToolchainType.java
parent49212e985d41b03d5e8cd4417f773748596587fe (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.java22
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 =