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.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")

View File

@ -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}
}

View File

@ -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

View File

@ -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 {

View File

@ -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 {