diff --git a/soong_ui.bash b/soong_ui.bash index e1af359f4..e3997cf45 100755 --- a/soong_ui.bash +++ b/soong_ui.bash @@ -57,7 +57,15 @@ function run_go local mf_src="${TOP}/build/soong/cmd/microfactory" - local out_dir="${OUT_DIR:-${TOP}/out}" + local out_dir="${OUT_DIR-}" + if [ -z "${out_dir}" ]; then + if [ "${OUT_DIR_COMMON_BASE-}" ]; then + out_dir="${OUT_DIR_COMMON_BASE}/$(basename ${TOP})" + else + out_dir="${TOP}/out" + fi + fi + local mf_bin="${out_dir}/microfactory_$(uname)" local mf_version_file="${out_dir}/.microfactory_$(uname)_version" local soong_ui_bin="${out_dir}/soong_ui" diff --git a/ui/build/config.go b/ui/build/config.go index 4853643cc..9a8a3fb3d 100644 --- a/ui/build/config.go +++ b/ui/build/config.go @@ -50,6 +50,19 @@ func NewConfig(ctx Context, args ...string) Config { environ: OsEnvironment(), } + // Make sure OUT_DIR is set appropriately + if _, ok := ret.environ.Get("OUT_DIR"); !ok { + 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.Unset( // We're already using it "USE_SOONG_UI", @@ -67,6 +80,9 @@ func NewConfig(ctx Context, args ...string) Config { // Used by the goma compiler wrapper, but should only be set by // gomacc "GOMACC_PATH", + + // We handle this above + "OUT_DIR_COMMON_BASE", ) // Tell python not to spam the source tree with .pyc files.