Setup java paths in soong_ui

This way config.mk no longer needs to check which java is in PATH and
fix it. It'll be consistent for all build steps under soong_ui.

Also unify handling of ANDROID_JAVA_HOME / JAVA_HOME with
OVERRIDE_ANDROID_JAVA_HOME / EXPERIMENTAL_USE_OPENJDK9.

Test: m nothing
Test: build/soong/soong_ui.bash --make-mode nothing (w/o envsetup.sh)
Test: aosp_arm ninja files are the same before/after
Test: before/after ninja files match with OVERRIDE_ANDROID_JAVA_HOME
Test: before/after ninja files match with EXPERIMENTAL_USE_OPENJDK9
Change-Id: Icdb65093d9c346524074de239a4f895e4230a24d
This commit is contained in:
Dan Willemsen
2017-10-30 13:42:06 -07:00
parent d293e65c82
commit d9e8f0a95a
5 changed files with 43 additions and 26 deletions

View File

@@ -55,13 +55,8 @@ func init() {
pctx.VariableConfigMethod("hostPrebuiltTag", android.Config.PrebuiltOS) pctx.VariableConfigMethod("hostPrebuiltTag", android.Config.PrebuiltOS)
pctx.VariableFunc("JavaHome", func(config interface{}) (string, error) { pctx.VariableFunc("JavaHome", func(config interface{}) (string, error) {
if override := config.(android.Config).Getenv("OVERRIDE_ANDROID_JAVA_HOME"); override != "" { // This is set up and guaranteed by soong_ui
return override, nil return config.(android.Config).Getenv("ANDROID_JAVA_HOME"), nil
}
if config.(android.Config).UseOpenJDK9() {
return "prebuilts/jdk/jdk9/${hostPrebuiltTag}", nil
}
return "prebuilts/jdk/jdk8/${hostPrebuiltTag}", nil
}) })
pctx.SourcePathVariable("JavaToolchain", "${JavaHome}/bin") pctx.SourcePathVariable("JavaToolchain", "${JavaHome}/bin")

View File

@@ -104,6 +104,9 @@ func NewConfig(ctx Context, args ...string) Config {
"MAKEFLAGS", "MAKEFLAGS",
"MAKELEVEL", "MAKELEVEL",
"MFLAGS", "MFLAGS",
// Set in envsetup.sh, reset in makefiles
"ANDROID_JAVA_TOOLCHAIN",
) )
// Tell python not to spam the source tree with .pyc files. // 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) log.Fatalln("Error verifying tree state:", err)
} }
if srcDir, err := filepath.Abs("."); err == nil { if srcDir := absPath(ctx, "."); strings.ContainsRune(srcDir, ' ') {
if strings.ContainsRune(srcDir, ' ') { log.Println("You are building in a directory whose absolute path contains a space character:")
log.Println("You are building in a directory whose absolute path contains a space character:") log.Println()
log.Println() log.Printf("%q\n", srcDir)
log.Printf("%q\n", srcDir) log.Println()
log.Println() log.Fatalln("Directory names containing spaces are not supported")
log.Fatalln("Directory names containing spaces are not supported")
}
} }
if outDir := ret.OutDir(); strings.ContainsRune(outDir, ' ') { 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") 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} return Config{ret}
} }

View File

@@ -50,14 +50,8 @@ func (c *Cmd) sandboxSupported() bool {
func (c *Cmd) wrapSandbox() { func (c *Cmd) wrapSandbox() {
homeDir, _ := c.Environment.Get("HOME") homeDir, _ := c.Environment.Get("HOME")
outDir, err := filepath.Abs(c.config.OutDir()) outDir := absPath(c.ctx, c.config.OutDir())
if err != nil { distDir := absPath(c.ctx, c.config.DistDir())
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)
}
c.Args[0] = c.Path c.Args[0] = c.Path
c.Path = sandboxExecPath c.Path = sandboxExecPath

View File

@@ -77,9 +77,7 @@ func runSoong(ctx Context, config Config) {
var cfg microfactory.Config var cfg microfactory.Config
cfg.Map("github.com/google/blueprint", "build/blueprint") cfg.Map("github.com/google/blueprint", "build/blueprint")
if absPath, err := filepath.Abs("."); err == nil { cfg.TrimPath = absPath(ctx, ".")
cfg.TrimPath = absPath
}
minibp := filepath.Join(config.SoongOutDir(), ".minibootstrap/minibp") minibp := filepath.Join(config.SoongOutDir(), ".minibootstrap/minibp")
if _, err := microfactory.Build(&cfg, minibp, "github.com/google/blueprint/bootstrap/minibp"); err != nil { if _, err := microfactory.Build(&cfg, minibp, "github.com/google/blueprint/bootstrap/minibp"); err != nil {

View File

@@ -24,6 +24,14 @@ import (
"unsafe" "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 // indexList finds the index of a string in a []string
func indexList(s string, list []string) int { func indexList(s string, list []string) int {
for i, l := range list { for i, l := range list {