Use consistent directory for source and output inside the build sandbox
for ABFS.
A consistent source directory addresses problematic full path inputs and
outputs, which can manifest as cache misses or build failures after an ABFS
patch application.
Bug: 347704053
Change-Id: Ib2297bb0b904b1b490e83c22fd468eee928e53fe
diff --git a/ui/build/sandbox_linux.go b/ui/build/sandbox_linux.go
index 5c3fec1..c38174c 100644
--- a/ui/build/sandbox_linux.go
+++ b/ui/build/sandbox_linux.go
@@ -48,7 +48,11 @@
}
)
-const nsjailPath = "prebuilts/build-tools/linux-x86/bin/nsjail"
+const (
+ nsjailPath = "prebuilts/build-tools/linux-x86/bin/nsjail"
+ abfsSrcDir = "/src"
+ abfsOutDir = "/src/out"
+)
var sandboxConfig struct {
once sync.Once
@@ -145,6 +149,22 @@
return sandboxConfig.working
}
+func (c *Cmd) srcDirArg() string {
+ if !c.config.UseABFS() {
+ return sandboxConfig.srcDir
+ }
+
+ return sandboxConfig.srcDir + ":" + abfsSrcDir
+}
+
+func (c *Cmd) outDirArg() string {
+ if !c.config.UseABFS() {
+ return sandboxConfig.outDir
+ }
+
+ return sandboxConfig.outDir + ":" + abfsOutDir
+}
+
func (c *Cmd) wrapSandbox() {
wd, _ := os.Getwd()
@@ -188,10 +208,10 @@
"-B", "/tmp",
// Mount source
- c.config.sandboxConfig.SrcDirMountFlag(), sandboxConfig.srcDir,
+ c.config.sandboxConfig.SrcDirMountFlag(), c.srcDirArg(),
//Mount out dir as read-write
- "-B", sandboxConfig.outDir,
+ "-B", c.outDirArg(),
// Disable newcgroup for now, since it may require newer kernels
// TODO: try out cgroups