From ca30e08b9d20ddf9eecf8c456a8a83d5bf78a28a Mon Sep 17 00:00:00 2001 From: Taylor Santiago Date: Tue, 30 Jul 2024 13:48:43 -0700 Subject: [PATCH] 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 --- ui/build/sandbox_linux.go | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/ui/build/sandbox_linux.go b/ui/build/sandbox_linux.go index 5c3fec15e..c38174c69 100644 --- a/ui/build/sandbox_linux.go +++ b/ui/build/sandbox_linux.go @@ -48,7 +48,11 @@ var ( } ) -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 @@ func (c *Cmd) sandboxSupported() bool { 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 @@ func (c *Cmd) wrapSandbox() { "-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