Loading ui/build/config.go +40 −15 Original line number Diff line number Diff line Loading @@ -214,6 +214,10 @@ func NewConfig(ctx Context, args ...string) Config { sandboxConfig: &SandboxConfig{}, ninjaWeightListSource: DEFAULT, } wd, err := os.Getwd() if err != nil { ctx.Fatalln("Failed to get working directory:", err) } // Skip soong tests by default on Linux if runtime.GOOS == "linux" { Loading Loading @@ -245,17 +249,13 @@ func NewConfig(ctx Context, args ...string) Config { // Make sure OUT_DIR is set appropriately if outDir, ok := ret.environ.Get("OUT_DIR"); ok { ret.environ.Set("OUT_DIR", filepath.Clean(outDir)) ret.environ.Set("OUT_DIR", ret.sandboxPath(wd, filepath.Clean(outDir))) } else { outDir := "out" if baseDir, ok := ret.environ.Get("OUT_DIR_COMMON_BASE"); ok { if wd, err := os.Getwd(); err != nil { ctx.Fatalln("Failed to get working directory:", err) } else { outDir = filepath.Join(baseDir, filepath.Base(wd)) } } ret.environ.Set("OUT_DIR", outDir) ret.environ.Set("OUT_DIR", ret.sandboxPath(wd, outDir)) } // loadEnvConfig needs to know what the OUT_DIR is, so it should Loading Loading @@ -350,6 +350,9 @@ func NewConfig(ctx Context, args ...string) Config { // Use config.useN2 instead. "SOONG_USE_N2", // Leaks usernames into environment. "HOME", ) if ret.UseGoma() || ret.ForceUseGoma() { Loading @@ -361,12 +364,12 @@ func NewConfig(ctx Context, args ...string) Config { ret.environ.Set("PYTHONDONTWRITEBYTECODE", "1") tmpDir := absPath(ctx, ret.TempDir()) ret.environ.Set("TMPDIR", tmpDir) ret.environ.Set("TMPDIR", ret.sandboxPath(wd, tmpDir)) // Always set ASAN_SYMBOLIZER_PATH so that ASAN-based tools can symbolize any crashes symbolizerPath := filepath.Join("prebuilts/clang/host", ret.HostPrebuiltTag(), "llvm-binutils-stable/llvm-symbolizer") ret.environ.Set("ASAN_SYMBOLIZER_PATH", absPath(ctx, symbolizerPath)) ret.environ.Set("ASAN_SYMBOLIZER_PATH", ret.sandboxPath(wd, absPath(ctx, symbolizerPath))) // Precondition: the current directory is the top of the source tree checkTopDir(ctx) Loading Loading @@ -420,15 +423,18 @@ func NewConfig(ctx Context, args ...string) Config { ret.configureLocale(ctx) newPath := []string{filepath.Join(absJavaHome, "bin")} newPath := []string{ret.sandboxPath(wd, filepath.Join(absJavaHome, "bin"))} if path, ok := ret.environ.Get("PATH"); ok && path != "" { newPath = append(newPath, path) entries := strings.Split(path, string(filepath.ListSeparator)) for _, ent := range entries { newPath = append(newPath, ret.sandboxPath(wd, ent)) } } ret.environ.Unset("OVERRIDE_ANDROID_JAVA_HOME") ret.environ.Set("JAVA_HOME", absJavaHome) ret.environ.Set("ANDROID_JAVA_HOME", javaHome) ret.environ.Set("ANDROID_JAVA8_HOME", java8Home) ret.environ.Set("JAVA_HOME", ret.sandboxPath(wd, absJavaHome)) ret.environ.Set("ANDROID_JAVA_HOME", ret.sandboxPath(wd, javaHome)) ret.environ.Set("ANDROID_JAVA8_HOME", ret.sandboxPath(wd, java8Home)) ret.environ.Set("PATH", strings.Join(newPath, string(filepath.ListSeparator))) // b/286885495, https://bugzilla.redhat.com/show_bug.cgi?id=2227130: some versions of Fedora include patches Loading @@ -444,7 +450,7 @@ func NewConfig(ctx Context, args ...string) Config { ret.buildDateTime = strconv.FormatInt(time.Now().Unix(), 10) } ret.environ.Set("BUILD_DATETIME_FILE", buildDateTimeFile) ret.environ.Set("BUILD_DATETIME_FILE", ret.sandboxPath(wd, buildDateTimeFile)) if _, ok := ret.environ.Get("BUILD_USERNAME"); !ok { username := "unknown" Loading @@ -455,6 +461,7 @@ func NewConfig(ctx Context, args ...string) Config { } ret.environ.Set("BUILD_USERNAME", username) } ret.environ.Set("PWD", ret.sandboxPath(wd, wd)) if ret.UseRBE() { for k, v := range getRBEVars(ctx, Config{ret}) { Loading Loading @@ -1296,6 +1303,19 @@ func (c *configImpl) UseABFS() bool { return err == nil } func (c *configImpl) sandboxPath(base, in string) string { if !c.UseABFS() { return in } rel, err := filepath.Rel(base, in) if err != nil { return in } return filepath.Join(abfsSrcDir, rel) } func (c *configImpl) UseRBE() bool { // These alternate modes of running Soong do not use RBE / reclient. if c.Queryview() || c.JsonModuleGraph() { Loading Loading @@ -1722,6 +1742,11 @@ func (c *configImpl) EmptyNinjaFile() bool { } func (c *configImpl) SkipMetricsUpload() bool { // b/362625275 - Metrics upload sometimes prevents abfs unmount if c.UseABFS() { return true } return c.skipMetricsUpload } Loading ui/build/path.go +18 −0 Original line number Diff line number Diff line Loading @@ -57,6 +57,22 @@ func parsePathDir(dir string) []string { return ret } func updatePathForSandbox(config Config) { wd, err := os.Getwd() if err != nil { return } var newPath []string if path, ok := config.Environment().Get("PATH"); ok && path != "" { entries := strings.Split(path, string(filepath.ListSeparator)) for _, ent := range entries { newPath = append(newPath, config.sandboxPath(wd, ent)) } } config.Environment().Set("PATH", strings.Join(newPath, string(filepath.ListSeparator))) } // SetupLitePath is the "lite" version of SetupPath used for dumpvars, or other // places that does not need the full logging capabilities of path_interposer, // wants the minimal performance overhead, and still get the benefits of $PATH Loading Loading @@ -121,6 +137,7 @@ func SetupLitePath(ctx Context, config Config, tmpDir string) { // Set $PATH to be the directories containing the host tool symlinks, and // the prebuilts directory for the current host OS. config.Environment().Set("PATH", myPath) updatePathForSandbox(config) config.pathReplaced = true } Loading Loading @@ -265,5 +282,6 @@ func SetupPath(ctx Context, config Config) { // Replace the $PATH variable with the path_interposer symlinks, and // checked-in prebuilts. config.Environment().Set("PATH", myPath) updatePathForSandbox(config) config.pathReplaced = true } ui/build/sandbox_linux.go +11 −2 Original line number Diff line number Diff line Loading @@ -187,8 +187,17 @@ func (c *Cmd) readMountArgs() []string { return args } func (c *Cmd) wrapSandbox() { func (c *Cmd) workDir() string { if !c.config.UseABFS() { wd, _ := os.Getwd() return wd } return abfsSrcDir } func (c *Cmd) wrapSandbox() { wd := c.workDir() var sandboxArgs []string sandboxArgs = append(sandboxArgs, Loading Loading @@ -226,7 +235,7 @@ func (c *Cmd) wrapSandbox() { ) sandboxArgs = append(sandboxArgs, c.readMountArgs()... c.readMountArgs()..., ) sandboxArgs = append(sandboxArgs, Loading Loading
ui/build/config.go +40 −15 Original line number Diff line number Diff line Loading @@ -214,6 +214,10 @@ func NewConfig(ctx Context, args ...string) Config { sandboxConfig: &SandboxConfig{}, ninjaWeightListSource: DEFAULT, } wd, err := os.Getwd() if err != nil { ctx.Fatalln("Failed to get working directory:", err) } // Skip soong tests by default on Linux if runtime.GOOS == "linux" { Loading Loading @@ -245,17 +249,13 @@ func NewConfig(ctx Context, args ...string) Config { // Make sure OUT_DIR is set appropriately if outDir, ok := ret.environ.Get("OUT_DIR"); ok { ret.environ.Set("OUT_DIR", filepath.Clean(outDir)) ret.environ.Set("OUT_DIR", ret.sandboxPath(wd, filepath.Clean(outDir))) } else { outDir := "out" if baseDir, ok := ret.environ.Get("OUT_DIR_COMMON_BASE"); ok { if wd, err := os.Getwd(); err != nil { ctx.Fatalln("Failed to get working directory:", err) } else { outDir = filepath.Join(baseDir, filepath.Base(wd)) } } ret.environ.Set("OUT_DIR", outDir) ret.environ.Set("OUT_DIR", ret.sandboxPath(wd, outDir)) } // loadEnvConfig needs to know what the OUT_DIR is, so it should Loading Loading @@ -350,6 +350,9 @@ func NewConfig(ctx Context, args ...string) Config { // Use config.useN2 instead. "SOONG_USE_N2", // Leaks usernames into environment. "HOME", ) if ret.UseGoma() || ret.ForceUseGoma() { Loading @@ -361,12 +364,12 @@ func NewConfig(ctx Context, args ...string) Config { ret.environ.Set("PYTHONDONTWRITEBYTECODE", "1") tmpDir := absPath(ctx, ret.TempDir()) ret.environ.Set("TMPDIR", tmpDir) ret.environ.Set("TMPDIR", ret.sandboxPath(wd, tmpDir)) // Always set ASAN_SYMBOLIZER_PATH so that ASAN-based tools can symbolize any crashes symbolizerPath := filepath.Join("prebuilts/clang/host", ret.HostPrebuiltTag(), "llvm-binutils-stable/llvm-symbolizer") ret.environ.Set("ASAN_SYMBOLIZER_PATH", absPath(ctx, symbolizerPath)) ret.environ.Set("ASAN_SYMBOLIZER_PATH", ret.sandboxPath(wd, absPath(ctx, symbolizerPath))) // Precondition: the current directory is the top of the source tree checkTopDir(ctx) Loading Loading @@ -420,15 +423,18 @@ func NewConfig(ctx Context, args ...string) Config { ret.configureLocale(ctx) newPath := []string{filepath.Join(absJavaHome, "bin")} newPath := []string{ret.sandboxPath(wd, filepath.Join(absJavaHome, "bin"))} if path, ok := ret.environ.Get("PATH"); ok && path != "" { newPath = append(newPath, path) entries := strings.Split(path, string(filepath.ListSeparator)) for _, ent := range entries { newPath = append(newPath, ret.sandboxPath(wd, ent)) } } ret.environ.Unset("OVERRIDE_ANDROID_JAVA_HOME") ret.environ.Set("JAVA_HOME", absJavaHome) ret.environ.Set("ANDROID_JAVA_HOME", javaHome) ret.environ.Set("ANDROID_JAVA8_HOME", java8Home) ret.environ.Set("JAVA_HOME", ret.sandboxPath(wd, absJavaHome)) ret.environ.Set("ANDROID_JAVA_HOME", ret.sandboxPath(wd, javaHome)) ret.environ.Set("ANDROID_JAVA8_HOME", ret.sandboxPath(wd, java8Home)) ret.environ.Set("PATH", strings.Join(newPath, string(filepath.ListSeparator))) // b/286885495, https://bugzilla.redhat.com/show_bug.cgi?id=2227130: some versions of Fedora include patches Loading @@ -444,7 +450,7 @@ func NewConfig(ctx Context, args ...string) Config { ret.buildDateTime = strconv.FormatInt(time.Now().Unix(), 10) } ret.environ.Set("BUILD_DATETIME_FILE", buildDateTimeFile) ret.environ.Set("BUILD_DATETIME_FILE", ret.sandboxPath(wd, buildDateTimeFile)) if _, ok := ret.environ.Get("BUILD_USERNAME"); !ok { username := "unknown" Loading @@ -455,6 +461,7 @@ func NewConfig(ctx Context, args ...string) Config { } ret.environ.Set("BUILD_USERNAME", username) } ret.environ.Set("PWD", ret.sandboxPath(wd, wd)) if ret.UseRBE() { for k, v := range getRBEVars(ctx, Config{ret}) { Loading Loading @@ -1296,6 +1303,19 @@ func (c *configImpl) UseABFS() bool { return err == nil } func (c *configImpl) sandboxPath(base, in string) string { if !c.UseABFS() { return in } rel, err := filepath.Rel(base, in) if err != nil { return in } return filepath.Join(abfsSrcDir, rel) } func (c *configImpl) UseRBE() bool { // These alternate modes of running Soong do not use RBE / reclient. if c.Queryview() || c.JsonModuleGraph() { Loading Loading @@ -1722,6 +1742,11 @@ func (c *configImpl) EmptyNinjaFile() bool { } func (c *configImpl) SkipMetricsUpload() bool { // b/362625275 - Metrics upload sometimes prevents abfs unmount if c.UseABFS() { return true } return c.skipMetricsUpload } Loading
ui/build/path.go +18 −0 Original line number Diff line number Diff line Loading @@ -57,6 +57,22 @@ func parsePathDir(dir string) []string { return ret } func updatePathForSandbox(config Config) { wd, err := os.Getwd() if err != nil { return } var newPath []string if path, ok := config.Environment().Get("PATH"); ok && path != "" { entries := strings.Split(path, string(filepath.ListSeparator)) for _, ent := range entries { newPath = append(newPath, config.sandboxPath(wd, ent)) } } config.Environment().Set("PATH", strings.Join(newPath, string(filepath.ListSeparator))) } // SetupLitePath is the "lite" version of SetupPath used for dumpvars, or other // places that does not need the full logging capabilities of path_interposer, // wants the minimal performance overhead, and still get the benefits of $PATH Loading Loading @@ -121,6 +137,7 @@ func SetupLitePath(ctx Context, config Config, tmpDir string) { // Set $PATH to be the directories containing the host tool symlinks, and // the prebuilts directory for the current host OS. config.Environment().Set("PATH", myPath) updatePathForSandbox(config) config.pathReplaced = true } Loading Loading @@ -265,5 +282,6 @@ func SetupPath(ctx Context, config Config) { // Replace the $PATH variable with the path_interposer symlinks, and // checked-in prebuilts. config.Environment().Set("PATH", myPath) updatePathForSandbox(config) config.pathReplaced = true }
ui/build/sandbox_linux.go +11 −2 Original line number Diff line number Diff line Loading @@ -187,8 +187,17 @@ func (c *Cmd) readMountArgs() []string { return args } func (c *Cmd) wrapSandbox() { func (c *Cmd) workDir() string { if !c.config.UseABFS() { wd, _ := os.Getwd() return wd } return abfsSrcDir } func (c *Cmd) wrapSandbox() { wd := c.workDir() var sandboxArgs []string sandboxArgs = append(sandboxArgs, Loading Loading @@ -226,7 +235,7 @@ func (c *Cmd) wrapSandbox() { ) sandboxArgs = append(sandboxArgs, c.readMountArgs()... c.readMountArgs()..., ) sandboxArgs = append(sandboxArgs, Loading