aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/genrule/GenRuleBaseRule.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/genrule/GenRuleBaseRule.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/genrule/GenRuleBaseRule.java19
1 files changed, 19 insertions, 0 deletions
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) {