aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2017-04-05 16:02:11 +0000
committerGravatar Marcel Hlopko <hlopko@google.com>2017-04-06 11:00:07 +0200
commit8c41633a8700cbadd2ef219879cba305b576070e (patch)
treed4150ffc285d03581c1558965dc06f744b8a6f2b /src/main/java/com/google/devtools/build/lib
parent36109fc44c884e14589b07a7c1d36e33076ca2e5 (diff)
Genrules only depend on the host JDK if they have Java make variables.
e.g.: cmd = "$(JAVA) foo.java ..." PiperOrigin-RevId: 152263822
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/genrule/BazelGenRuleRule.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/genrule/BUILD1
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/genrule/GenRuleBase.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/genrule/GenRuleBaseRule.java19
4 files changed, 22 insertions, 3 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/genrule/BazelGenRuleRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/genrule/BazelGenRuleRule.java
index ccc2c6c042..1d843da2cd 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/genrule/BazelGenRuleRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/genrule/BazelGenRuleRule.java
@@ -24,7 +24,6 @@ import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.rules.cpp.CppConfiguration;
import com.google.devtools.build.lib.rules.genrule.GenRuleBaseRule;
import com.google.devtools.build.lib.rules.java.JavaConfiguration;
-import com.google.devtools.build.lib.rules.java.JavaSemantics;
/**
* Rule definition for genrule for Bazel.
@@ -52,7 +51,7 @@ public final class BazelGenRuleRule implements RuleDefinition {
.add(attr("stamp", BOOLEAN).value(false))
.add(attr(":cc_toolchain", LABEL).value(GenRuleBaseRule.CC_TOOLCHAIN))
- .add(attr(":host_jdk", LABEL).cfg(HOST).value(JavaSemantics.HOST_JDK))
+ .add(attr(":host_jdk", LABEL).cfg(HOST).value(GenRuleBaseRule.HOST_JDK))
.build();
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/genrule/BUILD b/src/main/java/com/google/devtools/build/lib/rules/genrule/BUILD
index 5c97ae1988..81ab46717a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/genrule/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/rules/genrule/BUILD
@@ -12,6 +12,7 @@ java_library(
"//src/main/java/com/google/devtools/build/lib:build-base",
"//src/main/java/com/google/devtools/build/lib:events",
"//src/main/java/com/google/devtools/build/lib:java-compilation",
+ "//src/main/java/com/google/devtools/build/lib:java-implicit-attributes",
"//src/main/java/com/google/devtools/build/lib:packages",
"//src/main/java/com/google/devtools/build/lib:vfs",
"//src/main/java/com/google/devtools/build/lib/actions",
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 407a45cb3d..1aab9b1648 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
@@ -64,7 +64,7 @@ public abstract class GenRuleBase implements RuleConfiguredTargetFactory {
return CROSSTOOL_MAKE_VARIABLE.matcher(command).find();
}
- protected boolean requiresJdk(String command) {
+ protected static boolean requiresJdk(String command) {
return JDK_MAKE_VARIABLE.matcher(command).find();
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/genrule/GenRuleBaseRule.java b/src/main/java/com/google/devtools/build/lib/rules/genrule/GenRuleBaseRule.java
index 544a03df21..d4cb75844f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/genrule/GenRuleBaseRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/genrule/GenRuleBaseRule.java
@@ -37,6 +37,9 @@ import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
import com.google.devtools.build.lib.rules.MakeVariableProvider;
import com.google.devtools.build.lib.rules.cpp.CppConfiguration;
import com.google.devtools.build.lib.rules.cpp.CppRuleClasses;
+import com.google.devtools.build.lib.rules.java.JavaImplicitAttributes;
+import com.google.devtools.build.lib.rules.java.JavaSemantics;
+import com.google.devtools.build.lib.rules.java.Jvm;
import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.util.FileTypeSet;
@@ -63,6 +66,22 @@ public class GenRuleBaseRule implements RuleDefinition {
}
};
+ /**
+ * Late-bound dependency on the host JDK <i>iff</i> the genrule has make variables that need
+ * that rule.
+ */
+ public static final Attribute.LateBoundLabel<BuildConfiguration> HOST_JDK =
+ new Attribute.LateBoundLabel<BuildConfiguration>(
+ JavaImplicitAttributes.JDK_LABEL, Jvm.class) {
+ @Override
+ public Label resolve(Rule rule, AttributeMap attributes, BuildConfiguration configuration) {
+ return attributes != null
+ && GenRuleBase.requiresJdk(attributes.get("cmd", Type.STRING))
+ ? JavaSemantics.HOST_JDK.resolve(rule, attributes, configuration)
+ : null;
+ }
+ };
+
@Override
public RuleClass build(
RuleClass.Builder builder, RuleDefinitionEnvironment env) {