aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java
diff options
context:
space:
mode:
authorGravatar lberki <lberki@google.com>2017-09-04 17:40:32 +0200
committerGravatar Yun Peng <pcloudy@google.com>2017-09-04 18:24:47 +0200
commitb54c9adbb9a31e5af4b4627e4179407cb54084c0 (patch)
tree5cf09883a9d320ea84e2a64fcb924bc06cecbebb /src/main/java
parentb0b8bad00f163a3fa89e813f36fcaffac521eaad (diff)
Make Make variables from genrule.toolchains override the usual synthetic host JAVA/JAVABASE attributes.
Also fix a few lint warnings and move a class so that it's closer to where it's actually used. RELNOTES: None. PiperOrigin-RevId: 167501208
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/ConfigurationMakeVariableContext.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/genrule/GenRuleBase.java66
2 files changed, 42 insertions, 26 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfigurationMakeVariableContext.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfigurationMakeVariableContext.java
index 3392aff327..e4e2c63eac 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfigurationMakeVariableContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfigurationMakeVariableContext.java
@@ -54,7 +54,7 @@ public class ConfigurationMakeVariableContext implements MakeVariableExpander.Co
ImmutableMap<String, String> ruleMakeVariables,
Package pkg,
BuildConfiguration configuration) {
- this(ruleMakeVariables, pkg, configuration, ImmutableList.<MakeVariableSupplier>of());
+ this(ruleMakeVariables, pkg, configuration, ImmutableList.of());
}
public ConfigurationMakeVariableContext(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/genrule/GenRuleBase.java b/src/main/java/com/google/devtools/build/lib/rules/genrule/GenRuleBase.java
index e2b14a62ce..a11f16493e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/genrule/GenRuleBase.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/genrule/GenRuleBase.java
@@ -27,7 +27,7 @@ import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.FileProvider;
import com.google.devtools.build.lib.analysis.FilesToRunProvider;
import com.google.devtools.build.lib.analysis.MakeVariableExpander.ExpansionException;
-import com.google.devtools.build.lib.analysis.MakeVariableSupplier;
+import com.google.devtools.build.lib.analysis.MakeVariableInfo;
import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder;
import com.google.devtools.build.lib.analysis.RuleConfiguredTargetFactory;
@@ -273,19 +273,7 @@ public abstract class GenRuleBase implements RuleConfiguredTargetFactory {
return ruleContext.expandMakeVariables(
"cmd",
command,
- createCommandResolverContext(ruleContext, resolvedSrcs, filesToBuild));
- }
-
- /**
- * Creates a new {@link CommandResolverContext} instance to use in {@link #resolveCommand}.
- */
- protected CommandResolverContext createCommandResolverContext(RuleContext ruleContext,
- NestedSet<Artifact> resolvedSrcs, NestedSet<Artifact> filesToBuild) {
- return new CommandResolverContext(
- ruleContext,
- resolvedSrcs,
- filesToBuild,
- ImmutableList.of(new CcFlagsSupplier(ruleContext)));
+ new CommandResolverContext(ruleContext, resolvedSrcs, filesToBuild));
}
/**
@@ -297,37 +285,58 @@ public abstract class GenRuleBase implements RuleConfiguredTargetFactory {
private final RuleContext ruleContext;
private final NestedSet<Artifact> resolvedSrcs;
private final NestedSet<Artifact> filesToBuild;
+ private final Iterable<MakeVariableInfo> toolchains;
public CommandResolverContext(
RuleContext ruleContext,
NestedSet<Artifact> resolvedSrcs,
- NestedSet<Artifact> filesToBuild,
- Iterable<? extends MakeVariableSupplier> makeVariableSuppliers) {
+ NestedSet<Artifact> filesToBuild) {
super(
- ruleContext,
+ ruleContext.getMakeVariables(ImmutableList.of(":cc_toolchain")),
ruleContext.getRule().getPackage(),
ruleContext.getConfiguration(),
- makeVariableSuppliers);
+ ImmutableList.of(new CcFlagsSupplier(ruleContext)));
this.ruleContext = ruleContext;
this.resolvedSrcs = resolvedSrcs;
this.filesToBuild = filesToBuild;
+ this.toolchains = ruleContext.getPrerequisites(
+ "toolchains", Mode.TARGET, MakeVariableInfo.PROVIDER);
}
public RuleContext getRuleContext() {
return ruleContext;
}
+ private String resolveVariableFromToolchains(String variableName) {
+ for (MakeVariableInfo info : toolchains) {
+ String result = info.getMakeVariables().get(variableName);
+ if (result != null) {
+ return result;
+ }
+ }
+
+ return null;
+ }
+
@Override
public String lookupMakeVariable(String variableName) throws ExpansionException {
if (variableName.equals("SRCS")) {
return Artifact.joinExecPaths(" ", resolvedSrcs);
- } else if (variableName.equals("<")) {
+ }
+
+ if (variableName.equals("<")) {
return expandSingletonArtifact(resolvedSrcs, "$<", "input file");
- } else if (variableName.equals("OUTS")) {
+ }
+
+ if (variableName.equals("OUTS")) {
return Artifact.joinExecPaths(" ", filesToBuild);
- } else if (variableName.equals("@")) {
+ }
+
+ if (variableName.equals("@")) {
return expandSingletonArtifact(filesToBuild, "$@", "output file");
- } else if (variableName.equals("@D")) {
+ }
+
+ if (variableName.equals("@D")) {
// The output directory. If there is only one filename in outs,
// this expands to the directory containing that file. If there are
// multiple filenames, this variable instead expands to the
@@ -354,7 +363,14 @@ public abstract class GenRuleBase implements RuleConfiguredTargetFactory {
ruleContext.getRule().getLabel().getPackageIdentifier().getSourceRoot();
return dir.getRelative(relPath).getPathString();
}
- } else if (JDK_MAKE_VARIABLE.matcher("$(" + variableName + ")").find()) {
+ }
+
+ String valueFromToolchains = resolveVariableFromToolchains(variableName);
+ if (valueFromToolchains != null) {
+ return valueFromToolchains;
+ }
+
+ if (JDK_MAKE_VARIABLE.matcher("$(" + variableName + ")").find()) {
List<String> attributes = new ArrayList<>();
attributes.addAll(ConfigurationMakeVariableContext.DEFAULT_MAKE_VARIABLE_ATTRIBUTES);
attributes.add(":host_jdk");
@@ -363,9 +379,9 @@ public abstract class GenRuleBase implements RuleConfiguredTargetFactory {
ruleContext.getTarget().getPackage(),
ruleContext.getHostConfiguration())
.lookupMakeVariable(variableName);
- } else {
- return super.lookupMakeVariable(variableName);
}
+
+ return super.lookupMakeVariable(variableName);
}
/**