Adds the target_platform_has_constraint method to allow rules to check the target platform.
Fixes #10368.
RELNOTES: Adds ctx.target_platform_has_constraint to allow rules to check the target platform's constraints.
PiperOrigin-RevId: 286001442
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
index a2b2ca0..02ba0cf 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
@@ -57,6 +57,7 @@
import com.google.devtools.build.lib.analysis.config.transitions.TransitionFactory;
import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.analysis.constraints.ConstraintSemantics;
+import com.google.devtools.build.lib.analysis.platform.ConstraintValueInfo;
import com.google.devtools.build.lib.analysis.platform.PlatformInfo;
import com.google.devtools.build.lib.analysis.stringtemplate.TemplateContext;
import com.google.devtools.build.lib.cmdline.Label;
@@ -1225,6 +1226,13 @@
return toolchainContext;
}
+ public boolean targetPlatformHasConstraint(ConstraintValueInfo constraintValue) {
+ if (toolchainContext == null || toolchainContext.targetPlatform() == null) {
+ return false;
+ }
+ return toolchainContext.targetPlatform().constraints().hasConstraintValue(constraintValue);
+ }
+
public ConstraintSemantics getConstraintSemantics() {
return constraintSemantics;
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleContext.java
index 1caa9a1..15e1dfd 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleContext.java
@@ -693,6 +693,11 @@
}
@Override
+ public boolean targetPlatformHasConstraint(ConstraintValueInfo constraintValue) {
+ return ruleContext.targetPlatformHasConstraint(constraintValue);
+ }
+
+ @Override
public String toString() {
return ruleLabelCanonicalName;
}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkRuleContextApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkRuleContextApi.java
index 4fa981a..8a134cc 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkRuleContextApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/SkylarkRuleContextApi.java
@@ -318,6 +318,19 @@
ToolchainContextApi toolchains() throws EvalException;
@SkylarkCallable(
+ name = "target_platform_has_constraint",
+ doc = "Returns true if the given constraint value is part of the current target platform.",
+ parameters = {
+ @Param(
+ name = "constraintValue",
+ positional = true,
+ named = false,
+ type = ConstraintValueInfoApi.class,
+ doc = "The constraint value to check the target platform against.")
+ })
+ boolean targetPlatformHasConstraint(ConstraintValueT constraintValue);
+
+ @SkylarkCallable(
name = "tokenize",
doc = "Splits a shell command into a list of tokens.",
// TODO(cparsons): Look into flipping this to true.