summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--android/bazel_handler.go11
-rw-r--r--android/bazel_handler_test.go3
2 files changed, 11 insertions, 3 deletions
diff --git a/android/bazel_handler.go b/android/bazel_handler.go
index 908b2d69d..0529f237d 100644
--- a/android/bazel_handler.go
+++ b/android/bazel_handler.go
@@ -1103,7 +1103,7 @@ func (c *bazelSingleton) GenerateBuildActions(ctx SingletonContext) {
}
// Register bazel-owned build statements (obtained from the aquery invocation).
-func createCommand(cmd *RuleBuilderCommand, buildStatement bazel.BuildStatement, executionRoot string, bazelOutDir string, ctx PathContext) {
+func createCommand(cmd *RuleBuilderCommand, buildStatement bazel.BuildStatement, executionRoot string, bazelOutDir string, ctx BuilderContext) {
// executionRoot is the action cwd.
cmd.Text(fmt.Sprintf("cd '%s' &&", executionRoot))
@@ -1122,7 +1122,14 @@ func createCommand(cmd *RuleBuilderCommand, buildStatement bazel.BuildStatement,
}
// The actual Bazel action.
- cmd.Text(buildStatement.Command)
+ if len(buildStatement.Command) > 16*1024 {
+ commandFile := PathForBazelOut(ctx, buildStatement.OutputPaths[0]+".sh")
+ WriteFileRule(ctx, commandFile, buildStatement.Command)
+
+ cmd.Text("bash").Text(buildStatement.OutputPaths[0] + ".sh").Implicit(commandFile)
+ } else {
+ cmd.Text(buildStatement.Command)
+ }
for _, outputPath := range buildStatement.OutputPaths {
cmd.ImplicitOutput(PathForBazelOut(ctx, outputPath))
diff --git a/android/bazel_handler_test.go b/android/bazel_handler_test.go
index bc16cb53a..10bbf312b 100644
--- a/android/bazel_handler_test.go
+++ b/android/bazel_handler_test.go
@@ -129,7 +129,8 @@ func TestInvokeBazelPopulatesBuildStatements(t *testing.T) {
}
cmd := RuleBuilderCommand{}
- createCommand(&cmd, got[0], "test/exec_root", "test/bazel_out", PathContextForTesting(TestConfig("out", nil, "", nil)))
+ ctx := builderContextForTests{PathContextForTesting(TestConfig("out", nil, "", nil))}
+ createCommand(&cmd, got[0], "test/exec_root", "test/bazel_out", ctx)
if actual, expected := cmd.buf.String(), testCase.command; expected != actual {
t.Errorf("expected: [%s], actual: [%s]", expected, actual)
}