From d6cee7e37411022f2b1c37102ca0591e219969b6 Mon Sep 17 00:00:00 2001 From: "Lukacs T. Berki" Date: Wed, 1 Sep 2021 16:25:51 +0200 Subject: [PATCH] Make OutDir() and SoongOutDir() be consistent. They both used to return out/soong. Unfortunately, the tests seem to assume the old behavior, so I had to keep tests inconsistent and I was scared of dexpreopt, too. Test: Presubmits. Change-Id: Ib00c7956fd2cdb28cc11d481c17e5a3ff5ad563a --- android/config.go | 12 +++++++++--- cmd/soong_build/main.go | 9 ++++----- dexpreopt/dexpreopt_gen/dexpreopt_gen.go | 4 +++- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/android/config.go b/android/config.go index 7fbfa3930..a32a1a681 100644 --- a/android/config.go +++ b/android/config.go @@ -72,7 +72,7 @@ func (c Config) SoongOutDir() string { } func (c Config) OutDir() string { - return c.soongOutDir + return c.outDir } func (c Config) RunGoTests() bool { @@ -138,7 +138,8 @@ type config struct { deviceConfig *deviceConfig - soongOutDir string // the path of the build output directory + outDir string // The output directory (usually out/) + soongOutDir string moduleListFile string // the path to the file which lists blueprint files to parse. runGoTests bool @@ -302,9 +303,10 @@ func saveToBazelConfigFile(config *productVariables, outDir string) error { // NullConfig returns a mostly empty Config for use by standalone tools like dexpreopt_gen that // use the android package. -func NullConfig(soongOutDir string) Config { +func NullConfig(outDir, soongOutDir string) Config { return Config{ config: &config{ + outDir: outDir, soongOutDir: soongOutDir, fs: pathtools.OsFs, }, @@ -338,6 +340,9 @@ func TestConfig(buildDir string, env map[string]string, bp string, fs map[string ShippingApiLevel: stringPtr("30"), }, + outDir: buildDir, + // soongOutDir is inconsistent with production (it should be buildDir + "/soong") + // but a lot of tests assume this :( soongOutDir: buildDir, captureBuild: true, env: envCopy, @@ -434,6 +439,7 @@ func NewConfig(cmdlineArgs bootstrap.Args, soongOutDir string, availableEnv map[ env: availableEnv, + outDir: cmdlineArgs.OutDir, soongOutDir: soongOutDir, runGoTests: cmdlineArgs.RunGoTests, useValidationsForGoTests: cmdlineArgs.UseValidations, diff --git a/cmd/soong_build/main.go b/cmd/soong_build/main.go index 7305a6daa..3e724ee53 100644 --- a/cmd/soong_build/main.go +++ b/cmd/soong_build/main.go @@ -35,7 +35,7 @@ import ( var ( topDir string - outDir string + soongOutDir string availableEnvFile string usedEnvFile string @@ -55,13 +55,12 @@ var ( func init() { // Flags that make sense in every mode flag.StringVar(&topDir, "top", "", "Top directory of the Android source tree") - flag.StringVar(&outDir, "out", "", "Soong output directory (usually $TOP/out/soong)") + flag.StringVar(&soongOutDir, "soong_out", "", "Soong output directory (usually $TOP/out/soong)") flag.StringVar(&availableEnvFile, "available_env", "", "File containing available environment variables") flag.StringVar(&usedEnvFile, "used_env", "", "File containing used environment variables") flag.StringVar(&globFile, "globFile", "build-globs.ninja", "the Ninja file of globs to output") flag.StringVar(&globListDir, "globListDir", "", "the directory containing the glob list files") - flag.StringVar(&cmdlineArgs.SoongOutDir, "b", ".", "the build output directory") - flag.StringVar(&cmdlineArgs.OutDir, "n", "", "the ninja builddir directory") + flag.StringVar(&cmdlineArgs.OutDir, "out", "", "the ninja builddir directory") flag.StringVar(&cmdlineArgs.ModuleListFile, "l", "", "file that lists filepaths to parse") // Debug flags @@ -298,7 +297,7 @@ func main() { availableEnv := parseAvailableEnv() - configuration := newConfig(cmdlineArgs, outDir, availableEnv) + configuration := newConfig(cmdlineArgs, soongOutDir, availableEnv) extraNinjaDeps := []string{ configuration.ProductVariablesFileName, usedEnvFile, diff --git a/dexpreopt/dexpreopt_gen/dexpreopt_gen.go b/dexpreopt/dexpreopt_gen/dexpreopt_gen.go index 7dbe74c27..ba05d945d 100644 --- a/dexpreopt/dexpreopt_gen/dexpreopt_gen.go +++ b/dexpreopt/dexpreopt_gen/dexpreopt_gen.go @@ -87,7 +87,9 @@ func main() { usage("--module configuration file is required") } - ctx := &builderContext{android.NullConfig(*outDir)} + // NOTE: duplicating --out_dir here is incorrect (one should be the another + // plus "/soong" but doing so apparently breaks dexpreopt + ctx := &builderContext{android.NullConfig(*outDir, *outDir)} globalSoongConfigData, err := ioutil.ReadFile(*globalSoongConfigPath) if err != nil {