aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/standalone/StandaloneModule.java
diff options
context:
space:
mode:
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.java56
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);
+ }
}