Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3cd732bc authored by Taylor Santiago's avatar Taylor Santiago Committed by Gerrit Code Review
Browse files

Merge "Clean environment variables to account for sandbox work directory." into main

parents 729c770b 0af8ea14
Loading
Loading
Loading
Loading
+40 −15
Original line number Diff line number Diff line
@@ -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" {
@@ -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
@@ -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() {
@@ -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)
@@ -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
@@ -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"
@@ -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}) {
@@ -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() {
@@ -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
}

+18 −0
Original line number Diff line number Diff line
@@ -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
@@ -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
}

@@ -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
}
+11 −2
Original line number Diff line number Diff line
@@ -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,
@@ -226,7 +235,7 @@ func (c *Cmd) wrapSandbox() {
	)

	sandboxArgs = append(sandboxArgs,
		c.readMountArgs()...
		c.readMountArgs()...,
	)

	sandboxArgs = append(sandboxArgs,