diff options
author | 2015-06-08 11:15:02 +0000 | |
---|---|---|
committer | 2015-06-08 12:54:20 +0000 | |
commit | a068dee102a27e1a4f14fca7be96714b3b477bba (patch) | |
tree | 260a7d367e722ab7e590982b2b6aa37601964057 /src/main/java/com/google/devtools/build | |
parent | d94cb739a5be713af48d1ad0224a7f5301e4897d (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.java | 41 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java | 4 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/test/StandaloneTestStrategy.java | 13 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/standalone/StandaloneContextProvider.java | 6 | ||||
-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()); |