aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build
diff options
context:
space:
mode:
authorGravatar Philipp Wollermann <philwo@google.com>2015-06-08 11:15:02 +0000
committerGravatar Laurent Le Brun <laurentlb@google.com>2015-06-08 12:54:20 +0000
commita068dee102a27e1a4f14fca7be96714b3b477bba (patch)
tree260a7d367e722ab7e590982b2b6aa37601964057 /src/main/java/com/google/devtools/build
parentd94cb739a5be713af48d1ad0224a7f5301e4897d (diff)
Implement "More flexible strategy flag for Bazel".
-- MOS_MIGRATED_REVID=95427512
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java41
-rw-r--r--src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/test/StandaloneTestStrategy.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/standalone/StandaloneContextProvider.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/standalone/StandaloneSpawnStrategy.java (renamed from src/main/java/com/google/devtools/build/lib/standalone/LocalSpawnStrategy.java)4
5 files changed, 43 insertions, 25 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java
index db7233e864..4656c2c66a 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java
@@ -34,10 +34,13 @@ import com.google.devtools.build.lib.runtime.BlazeRuntime;
import com.google.devtools.build.lib.runtime.Command;
import com.google.devtools.build.lib.runtime.GotOptionsEvent;
import com.google.devtools.build.lib.skyframe.PrecomputedValue;
+import com.google.devtools.common.options.Converters.AssignmentConverter;
import com.google.devtools.common.options.Option;
import com.google.devtools.common.options.OptionsBase;
import com.google.devtools.common.options.OptionsProvider;
+import java.util.HashMap;
+import java.util.List;
import java.util.Map;
/**
@@ -64,8 +67,17 @@ public class BazelRulesModule extends BlazeModule {
help = "Specify how to execute genrules."
+ "'standalone' means run all of them locally."
+ "'sandboxed' means run them in namespaces based sandbox (available only on Linux)")
-
public String genruleStrategy;
+
+ @Option(name = "strategy",
+ allowMultiple = true,
+ converter = AssignmentConverter.class,
+ defaultValue = "",
+ category = "strategy",
+ help = "Specify how to distribute compilation of other spawn actions. "
+ + "Example: 'Javac=local' means to spawn Java compilation locally. "
+ + "'JavaIjar=sandboxed' means to spawn Java Ijar actions in a sandbox. ")
+ public List<Map.Entry<String, String>> strategy;
}
private static class BazelActionContextConsumer implements ActionContextConsumer {
@@ -77,23 +89,32 @@ public class BazelRulesModule extends BlazeModule {
}
@Override
public Map<String, String> getSpawnActionContexts() {
- ImmutableMap.Builder<String, String> builder = ImmutableMap.builder();
+ Map<String, String> contexts = new HashMap<>();
+
+ contexts.put("Genrule", options.genruleStrategy);
- builder.put("Genrule", options.genruleStrategy);
+ for (Map.Entry<String, String> strategy : options.strategy) {
+ String strategyName = strategy.getValue();
+ // TODO(philwo) - remove this when the standalone / local mess is cleaned up.
+ // Some flag expansions use "local" as the strategy name, but the strategy is now called
+ // "standalone", so we'll translate it here.
+ if (strategyName.equals("local")) {
+ strategyName = "standalone";
+ }
+ contexts.put(strategy.getKey(), strategyName);
+ }
// TODO(bazel-team): put this in getActionContexts (key=SpawnActionContext.class) instead
- builder.put("", options.spawnStrategy);
+ contexts.put("", options.spawnStrategy);
- return builder.build();
+ return ImmutableMap.copyOf(contexts);
}
@Override
public Map<Class<? extends ActionContext>, String> getActionContexts() {
- ImmutableMap.Builder<Class<? extends ActionContext>, String> builder =
- ImmutableMap.builder();
- builder.put(CppCompileActionContext.class, "");
- builder.put(CppLinkActionContext.class, "");
- return builder.build();
+ return ImmutableMap.of(
+ CppCompileActionContext.class, "",
+ CppLinkActionContext.class, "");
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java b/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java
index be3341c1f9..ce501d0da5 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java
@@ -105,6 +105,7 @@ import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.TreeMap;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
@@ -175,7 +176,8 @@ public class ExecutionTool {
private ActionInputFileCache fileCache;
private List<ActionContextProvider> actionContextProviders;
- private Map<String, SpawnActionContext> spawnStrategyMap = new HashMap<>();
+ private Map<String, SpawnActionContext> spawnStrategyMap =
+ new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
private List<ActionContext> strategies = new ArrayList<>();
ExecutionTool(BlazeRuntime runtime, BuildRequest request) throws ExecutorInitException {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/test/StandaloneTestStrategy.java b/src/main/java/com/google/devtools/build/lib/rules/test/StandaloneTestStrategy.java
index 268ba81179..ebc5aeb76b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/test/StandaloneTestStrategy.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/test/StandaloneTestStrategy.java
@@ -47,16 +47,11 @@ import java.util.Map;
/**
* Runs TestRunnerAction actions.
*/
-@ExecutionStrategy(contextType = TestActionContext.class,
- name = { "standalone" })
+@ExecutionStrategy(contextType = TestActionContext.class, name = { "standalone" })
public class StandaloneTestStrategy extends TestStrategy {
- /*
- TODO(bazel-team):
- * tests
- * It would be nice to get rid of (cd $TEST_SRCDIR) in the test-setup script.
- * test timeouts.
- * parsing XML output.
- */
+ // TODO(bazel-team) - add tests for this strategy.
+ // TODO(bazel-team) - add support for test timeouts.
+ // TODO(bazel-team) - add support for parsing XML output.
private final Path workspace;
diff --git a/src/main/java/com/google/devtools/build/lib/standalone/StandaloneContextProvider.java b/src/main/java/com/google/devtools/build/lib/standalone/StandaloneContextProvider.java
index ad2d5c2d15..d0c2fc5e67 100644
--- a/src/main/java/com/google/devtools/build/lib/standalone/StandaloneContextProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/standalone/StandaloneContextProvider.java
@@ -65,14 +65,14 @@ public class StandaloneContextProvider implements ActionContextProvider {
}
@SuppressWarnings("unchecked")
- private final ActionContext localSpawnStrategy;
+ private final ActionContext standaloneSpawnStrategy;
private final ImmutableList<ActionContext> strategies;
private final BlazeRuntime runtime;
public StandaloneContextProvider(BlazeRuntime runtime, BuildRequest buildRequest) {
boolean verboseFailures = buildRequest.getOptions(ExecutionOptions.class).verboseFailures;
- localSpawnStrategy = new LocalSpawnStrategy(runtime.getExecRoot(), verboseFailures);
+ standaloneSpawnStrategy = new StandaloneSpawnStrategy(runtime.getExecRoot(), verboseFailures);
this.runtime = runtime;
TestActionContext testStrategy = new StandaloneTestStrategy(buildRequest,
@@ -90,7 +90,7 @@ public class StandaloneContextProvider implements ActionContextProvider {
strategiesBuilder.add(sandboxedLinuxStrategy);
}
strategiesBuilder.add(
- localSpawnStrategy,
+ standaloneSpawnStrategy,
new DummyIncludeScanningContext(),
new LocalLinkStrategy(),
testStrategy,
diff --git a/src/main/java/com/google/devtools/build/lib/standalone/LocalSpawnStrategy.java b/src/main/java/com/google/devtools/build/lib/standalone/StandaloneSpawnStrategy.java
index 662c35ea07..0b034b490e 100644
--- a/src/main/java/com/google/devtools/build/lib/standalone/LocalSpawnStrategy.java
+++ b/src/main/java/com/google/devtools/build/lib/standalone/StandaloneSpawnStrategy.java
@@ -37,12 +37,12 @@ import java.util.List;
* Strategy that uses subprocessing to execute a process.
*/
@ExecutionStrategy(name = { "standalone" }, contextType = SpawnActionContext.class)
-public class LocalSpawnStrategy implements SpawnActionContext {
+public class StandaloneSpawnStrategy implements SpawnActionContext {
private final boolean verboseFailures;
private final Path processWrapper;
- public LocalSpawnStrategy(Path execRoot, boolean verboseFailures) {
+ public StandaloneSpawnStrategy(Path execRoot, boolean verboseFailures) {
this.verboseFailures = verboseFailures;
this.processWrapper = execRoot.getRelative(
"_bin/process-wrapper" + OsUtils.executableExtension());