diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/standalone/StandaloneModule.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/standalone/StandaloneModule.java | 56 |
1 files changed, 55 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/standalone/StandaloneModule.java b/src/main/java/com/google/devtools/build/lib/standalone/StandaloneModule.java index 728dc4b6d7..2f7a97b8da 100644 --- a/src/main/java/com/google/devtools/build/lib/standalone/StandaloneModule.java +++ b/src/main/java/com/google/devtools/build/lib/standalone/StandaloneModule.java @@ -13,11 +13,28 @@ // limitations under the License. package com.google.devtools.build.lib.standalone; +import com.google.devtools.build.lib.actions.ResourceManager; import com.google.devtools.build.lib.actions.SpawnActionContext; +import com.google.devtools.build.lib.analysis.test.TestActionContext; import com.google.devtools.build.lib.buildtool.BuildRequest; +import com.google.devtools.build.lib.exec.ExecutionOptions; import com.google.devtools.build.lib.exec.ExecutorBuilder; +import com.google.devtools.build.lib.exec.FileWriteStrategy; +import com.google.devtools.build.lib.exec.SpawnRunner; +import com.google.devtools.build.lib.exec.StandaloneTestStrategy; +import com.google.devtools.build.lib.exec.TestStrategy; +import com.google.devtools.build.lib.exec.apple.XcodeLocalEnvProvider; +import com.google.devtools.build.lib.exec.local.LocalEnvProvider; +import com.google.devtools.build.lib.exec.local.LocalExecutionOptions; +import com.google.devtools.build.lib.exec.local.LocalSpawnRunner; +import com.google.devtools.build.lib.exec.local.PosixLocalEnvProvider; +import com.google.devtools.build.lib.exec.local.WindowsLocalEnvProvider; +import com.google.devtools.build.lib.rules.cpp.SpawnGccStrategy; +import com.google.devtools.build.lib.rules.test.ExclusiveTestStrategy; import com.google.devtools.build.lib.runtime.BlazeModule; import com.google.devtools.build.lib.runtime.CommandEnvironment; +import com.google.devtools.build.lib.util.OS; +import com.google.devtools.build.lib.vfs.Path; /** * StandaloneModule provides pluggable functionality for blaze. @@ -25,8 +42,28 @@ import com.google.devtools.build.lib.runtime.CommandEnvironment; public class StandaloneModule extends BlazeModule { @Override public void executorInit(CommandEnvironment env, BuildRequest request, ExecutorBuilder builder) { - builder.addActionContextProvider(new StandaloneActionContextProvider(env)); + // TODO(ulfjack): Move this to another module. builder.addActionContextProvider(new DummyIncludeScanningContextProvider(env)); + + ExecutionOptions executionOptions = env.getOptions().getOptions(ExecutionOptions.class); + Path testTmpRoot = + TestStrategy.getTmpRoot(env.getWorkspace(), env.getExecRoot(), executionOptions); + TestActionContext testStrategy = + new StandaloneTestStrategy( + executionOptions, + env.getBlazeWorkspace().getBinTools(), + testTmpRoot); + + // Order of strategies passed to builder is significant - when there are many strategies that + // could potentially be used and a spawnActionContext doesn't specify which one it wants, the + // last one from strategies list will be used + builder.addActionContext( + new StandaloneSpawnStrategy(env.getExecRoot(), createLocalRunner(env))); + builder.addActionContext(new SpawnGccStrategy()); + builder.addActionContext(testStrategy); + builder.addActionContext(new ExclusiveTestStrategy(testStrategy)); + builder.addActionContext(new FileWriteStrategy()); + // This makes the "sandboxed" strategy the default Spawn strategy, unless it is overridden by a // later BlazeModule. builder.addStrategyByMnemonic("", "standalone"); @@ -35,4 +72,21 @@ public class StandaloneModule extends BlazeModule { // necessarily the default. builder.addStrategyByContext(SpawnActionContext.class, "standalone"); } + + private static SpawnRunner createLocalRunner(CommandEnvironment env) { + LocalExecutionOptions localExecutionOptions = + env.getOptions().getOptions(LocalExecutionOptions.class); + LocalEnvProvider localEnvProvider = + OS.getCurrent() == OS.DARWIN + ? new XcodeLocalEnvProvider(env.getClientEnv()) + : (OS.getCurrent() == OS.WINDOWS + ? new WindowsLocalEnvProvider(env.getClientEnv()) + : new PosixLocalEnvProvider(env.getClientEnv())); + return + new LocalSpawnRunner( + env.getExecRoot(), + localExecutionOptions, + ResourceManager.instance(), + localEnvProvider); + } } |