Add support for local execution requirement and REQUIREMENTS_SET and some cleanup.
This does not currently change behavior, but it will be used as part of choosing an execution location based on Xcode availability with Dynamic Spawn Strategy.
RELNOTES: None.
PiperOrigin-RevId: 285997919
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ExecutionRequirements.java b/src/main/java/com/google/devtools/build/lib/actions/ExecutionRequirements.java
index 0314e6d..e23b2bc 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ExecutionRequirements.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ExecutionRequirements.java
@@ -19,7 +19,6 @@
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.packages.Rule;
-import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -191,12 +190,21 @@
*/
public static final String NO_REMOTE = "no-remote";
+ /** Disables local execution of a spawn. */
+ public static final String NO_LOCAL = "no-local";
+
/** Disables local sandboxing of a spawn. */
public static final String LEGACY_NOSANDBOX = "nosandbox";
/** Disables local sandboxing of a spawn. */
public static final String NO_SANDBOX = "no-sandbox";
+ /**
+ * Set for Xcode-related rules. Used for quality control to make sure that all Xcode-dependent
+ * rules propagate the necessary configurations. Begins with "supports" so as not to be filtered
+ * out for Bazel by {@code TargetUtils}.
+ */
+ public static final String REQUIREMENTS_SET = "supports-xcode-requirements-set";
/**
* Enables networking for a spawn if possible (only if sandboxing is enabled and if the sandbox
@@ -222,9 +230,4 @@
/** Use this to request eager fetching of a single remote output into local memory. */
public static final String REMOTE_EXECUTION_INLINE_OUTPUTS = "internal-inline-outputs";
- public static boolean maybeExecutedRemotely(Set<String> executionRequirements) {
- return !executionRequirements.contains(ExecutionRequirements.LOCAL)
- && !executionRequirements.contains(ExecutionRequirements.NO_REMOTE)
- && !executionRequirements.contains(ExecutionRequirements.NO_REMOTE_EXEC);
- }
}
diff --git a/src/main/java/com/google/devtools/build/lib/actions/Spawns.java b/src/main/java/com/google/devtools/build/lib/actions/Spawns.java
index bdbdf23..0e66436 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/Spawns.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/Spawns.java
@@ -42,7 +42,14 @@
/** Returns {@code true} if {@code spawn} may be executed remotely. */
public static boolean mayBeExecutedRemotely(Spawn spawn) {
- return ExecutionRequirements.maybeExecutedRemotely(spawn.getExecutionInfo().keySet());
+ return !spawn.getExecutionInfo().containsKey(ExecutionRequirements.LOCAL)
+ && !spawn.getExecutionInfo().containsKey(ExecutionRequirements.NO_REMOTE)
+ && !spawn.getExecutionInfo().containsKey(ExecutionRequirements.NO_REMOTE_EXEC);
+ }
+
+ /** Returns {@code true} if {@code spawn} may be executed locally. */
+ public static boolean mayBeExecutedLocally(Spawn spawn) {
+ return !spawn.getExecutionInfo().containsKey(ExecutionRequirements.NO_LOCAL);
}
/** Returns whether a Spawn can be executed in a sandbox environment. */
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/TestTargetProperties.java b/src/main/java/com/google/devtools/build/lib/analysis/test/TestTargetProperties.java
index c0237ae..dbbf827 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/TestTargetProperties.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/TestTargetProperties.java
@@ -99,7 +99,10 @@
ruleContext.getConfiguration().modifyExecutionInfo(executionInfo, TestRunnerAction.MNEMONIC);
this.executionInfo = ImmutableMap.copyOf(executionInfo);
- isRemotable = ExecutionRequirements.maybeExecutedRemotely(executionInfo.keySet());
+ isRemotable =
+ !executionInfo.containsKey(ExecutionRequirements.LOCAL)
+ && !executionInfo.containsKey(ExecutionRequirements.NO_REMOTE)
+ && !executionInfo.containsKey(ExecutionRequirements.NO_REMOTE_EXEC);
language = TargetUtils.getRuleLanguage(rule);
}