diff --git a/java/config/config.go b/java/config/config.go index 654d9352f..d4994a1c9 100644 --- a/java/config/config.go +++ b/java/config/config.go @@ -55,13 +55,8 @@ func init() { pctx.VariableConfigMethod("hostPrebuiltTag", android.Config.PrebuiltOS) pctx.VariableFunc("JavaHome", func(config interface{}) (string, error) { - if override := config.(android.Config).Getenv("OVERRIDE_ANDROID_JAVA_HOME"); override != "" { - return override, nil - } - if config.(android.Config).UseOpenJDK9() { - return "prebuilts/jdk/jdk9/${hostPrebuiltTag}", nil - } - return "prebuilts/jdk/jdk8/${hostPrebuiltTag}", nil + // This is set up and guaranteed by soong_ui + return config.(android.Config).Getenv("ANDROID_JAVA_HOME"), nil }) pctx.SourcePathVariable("JavaToolchain", "${JavaHome}/bin") diff --git a/ui/build/config.go b/ui/build/config.go index 191a1029b..940bb2fb2 100644 --- a/ui/build/config.go +++ b/ui/build/config.go @@ -104,6 +104,9 @@ func NewConfig(ctx Context, args ...string) Config { "MAKEFLAGS", "MAKELEVEL", "MFLAGS", + + // Set in envsetup.sh, reset in makefiles + "ANDROID_JAVA_TOOLCHAIN", ) // Tell python not to spam the source tree with .pyc files. @@ -117,14 +120,12 @@ func NewConfig(ctx Context, args ...string) Config { log.Fatalln("Error verifying tree state:", err) } - if srcDir, err := filepath.Abs("."); err == nil { - if strings.ContainsRune(srcDir, ' ') { - log.Println("You are building in a directory whose absolute path contains a space character:") - log.Println() - log.Printf("%q\n", srcDir) - log.Println() - log.Fatalln("Directory names containing spaces are not supported") - } + if srcDir := absPath(ctx, "."); strings.ContainsRune(srcDir, ' ') { + log.Println("You are building in a directory whose absolute path contains a space character:") + log.Println() + log.Printf("%q\n", srcDir) + log.Println() + log.Fatalln("Directory names containing spaces are not supported") } if outDir := ret.OutDir(); strings.ContainsRune(outDir, ' ') { @@ -143,6 +144,27 @@ func NewConfig(ctx Context, args ...string) Config { log.Fatalln("Directory names containing spaces are not supported") } + // Configure Java-related variables, including adding it to $PATH + javaHome := func() string { + if override, ok := ret.environ.Get("OVERRIDE_ANDROID_JAVA_HOME"); ok { + return override + } + if v, ok := ret.environ.Get("EXPERIMENTAL_USE_OPENJDK9"); ok && v != "" { + return filepath.Join("prebuilts/jdk/jdk9", ret.HostPrebuiltTag()) + } + return filepath.Join("prebuilts/jdk/jdk8", ret.HostPrebuiltTag()) + }() + absJavaHome := absPath(ctx, javaHome) + + newPath := []string{filepath.Join(absJavaHome, "bin")} + if path, ok := ret.environ.Get("PATH"); ok && path != "" { + newPath = append(newPath, path) + } + ret.environ.Unset("OVERRIDE_ANDROID_JAVA_HOME") + ret.environ.Set("JAVA_HOME", absJavaHome) + ret.environ.Set("ANDROID_JAVA_HOME", javaHome) + ret.environ.Set("PATH", strings.Join(newPath, string(filepath.ListSeparator))) + return Config{ret} } diff --git a/ui/build/sandbox_darwin.go b/ui/build/sandbox_darwin.go index 2cf6e20ee..56791f782 100644 --- a/ui/build/sandbox_darwin.go +++ b/ui/build/sandbox_darwin.go @@ -50,14 +50,8 @@ func (c *Cmd) sandboxSupported() bool { func (c *Cmd) wrapSandbox() { homeDir, _ := c.Environment.Get("HOME") - outDir, err := filepath.Abs(c.config.OutDir()) - if err != nil { - c.ctx.Fatalln("Failed to get absolute path of OUT_DIR:", err) - } - distDir, err := filepath.Abs(c.config.DistDir()) - if err != nil { - c.ctx.Fatalln("Failed to get absolute path of DIST_DIR:", err) - } + outDir := absPath(c.ctx, c.config.OutDir()) + distDir := absPath(c.ctx, c.config.DistDir()) c.Args[0] = c.Path c.Path = sandboxExecPath diff --git a/ui/build/soong.go b/ui/build/soong.go index 8220597d4..d3bcf876b 100644 --- a/ui/build/soong.go +++ b/ui/build/soong.go @@ -77,9 +77,7 @@ func runSoong(ctx Context, config Config) { var cfg microfactory.Config cfg.Map("github.com/google/blueprint", "build/blueprint") - if absPath, err := filepath.Abs("."); err == nil { - cfg.TrimPath = absPath - } + cfg.TrimPath = absPath(ctx, ".") minibp := filepath.Join(config.SoongOutDir(), ".minibootstrap/minibp") if _, err := microfactory.Build(&cfg, minibp, "github.com/google/blueprint/bootstrap/minibp"); err != nil { diff --git a/ui/build/util.go b/ui/build/util.go index 2555e8a49..f698ccd0b 100644 --- a/ui/build/util.go +++ b/ui/build/util.go @@ -24,6 +24,14 @@ import ( "unsafe" ) +func absPath(ctx Context, p string) string { + ret, err := filepath.Abs(p) + if err != nil { + ctx.Fatalf("Failed to get absolute path: %v", err) + } + return ret +} + // indexList finds the index of a string in a []string func indexList(s string, list []string) int { for i, l := range list {