diff options
| author | 2019-05-17 15:36:46 -0700 | |
|---|---|---|
| committer | 2019-05-17 22:51:00 +0000 | |
| commit | ee3ea31a244d65ecac2e5816132db311dcfe24df (patch) | |
| tree | 3ca6201d4205364466826b3796ccd085a9668a81 | |
| parent | 77c22bf008c81440243d9b73508dfb5b7e555ed8 (diff) | |
Limit calls to strip.sh on darwin
strip.sh can use a file descriptor per .o file when run on .a files,
which can hit the system file descriptor limit on darwin. This
causes failures when manay variants of libgcc_stripped are built
simultaneously. Put all strip rules on darwin into a pool that
limits them to 10 concurrent processes, which will limit the file
descriptor usage to ~7500.
Fixes: 132822437
Test: no mention of darwinStripPool in out/soong/build.ninja on linux
Test: m libgcc_stripped on darwin
Change-Id: I3d4fbbd8d44d2e9059a79df113ab95336ec2c658
| -rw-r--r-- | cc/builder.go | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/cc/builder.go b/cc/builder.go index c99e46189..8d09a99e9 100644 --- a/cc/builder.go +++ b/cc/builder.go @@ -123,12 +123,25 @@ var ( _ = pctx.SourcePathVariable("stripPath", "build/soong/scripts/strip.sh") _ = pctx.SourcePathVariable("xzCmd", "prebuilts/build-tools/${config.HostPrebuiltTag}/bin/xz") + // b/132822437: objcopy uses a file descriptor per .o file when called on .a files, which runs the system out of + // file descriptors on darwin. Limit concurrent calls to 10 on darwin. + darwinStripPool = func() blueprint.Pool { + if runtime.GOOS == "darwin" { + return pctx.StaticPool("darwinStripPool", blueprint.PoolParams{ + Depth: 10, + }) + } else { + return nil + } + }() + strip = pctx.AndroidStaticRule("strip", blueprint.RuleParams{ Depfile: "${out}.d", Deps: blueprint.DepsGCC, Command: "CROSS_COMPILE=$crossCompile XZ=$xzCmd CLANG_BIN=${config.ClangBin} $stripPath ${args} -i ${in} -o ${out} -d ${out}.d", CommandDeps: []string{"$stripPath", "$xzCmd"}, + Pool: darwinStripPool, }, "args", "crossCompile") |