diff --git a/android/config.go b/android/config.go index 1482e5d78..7fbfa3930 100644 --- a/android/config.go +++ b/android/config.go @@ -75,10 +75,26 @@ func (c Config) OutDir() string { return c.soongOutDir } +func (c Config) RunGoTests() bool { + return c.runGoTests +} + +func (c Config) UseValidationsForGoTests() bool { + return c.useValidationsForGoTests +} + func (c Config) DebugCompilation() bool { return false // Never compile Go code in the main build for debugging } +func (c Config) Subninjas() []string { + return []string{} +} + +func (c Config) PrimaryBuilderInvocations() []bootstrap.PrimaryBuilderInvocation { + return []bootstrap.PrimaryBuilderInvocation{} +} + // A DeviceConfig object represents the configuration for a particular device // being built. For now there will only be one of these, but in the future there // may be multiple devices being built. @@ -125,6 +141,9 @@ type config struct { soongOutDir string // the path of the build output directory moduleListFile string // the path to the file which lists blueprint files to parse. + runGoTests bool + useValidationsForGoTests bool + env map[string]string envLock sync.Mutex envDeps map[string]string @@ -396,8 +415,8 @@ func TestArchConfig(buildDir string, env map[string]string, bp string, fs map[st // bootstrap run. Only per-run data is reset. Data which needs to persist across // multiple runs in the same program execution is carried over (such as Bazel // context or environment deps). -func ConfigForAdditionalRun(c Config) (Config, error) { - newConfig, err := NewConfig(c.soongOutDir, c.moduleListFile, c.env) +func ConfigForAdditionalRun(cmdlineArgs bootstrap.Args, c Config) (Config, error) { + newConfig, err := NewConfig(cmdlineArgs, c.soongOutDir, c.env) if err != nil { return Config{}, err } @@ -408,17 +427,19 @@ func ConfigForAdditionalRun(c Config) (Config, error) { // NewConfig creates a new Config object. The srcDir argument specifies the path // to the root source directory. It also loads the config file, if found. -func NewConfig(soongOutDir string, moduleListFile string, availableEnv map[string]string) (Config, error) { +func NewConfig(cmdlineArgs bootstrap.Args, soongOutDir string, availableEnv map[string]string) (Config, error) { // Make a config with default options. config := &config{ ProductVariablesFileName: filepath.Join(soongOutDir, productVariablesFileName), env: availableEnv, - soongOutDir: soongOutDir, - multilibConflicts: make(map[ArchType]bool), + soongOutDir: soongOutDir, + runGoTests: cmdlineArgs.RunGoTests, + useValidationsForGoTests: cmdlineArgs.UseValidations, + multilibConflicts: make(map[ArchType]bool), - moduleListFile: moduleListFile, + moduleListFile: cmdlineArgs.ModuleListFile, fs: pathtools.NewOsFs(absSrcDir), } diff --git a/cmd/soong_build/main.go b/cmd/soong_build/main.go index 16a4e1a8a..7305a6daa 100644 --- a/cmd/soong_build/main.go +++ b/cmd/soong_build/main.go @@ -113,8 +113,8 @@ func newContext(configuration android.Config, prepareBuildActions bool) *android return ctx } -func newConfig(outDir string, availableEnv map[string]string) android.Config { - configuration, err := android.NewConfig(outDir, cmdlineArgs.ModuleListFile, availableEnv) +func newConfig(cmdlineArgs bootstrap.Args, outDir string, availableEnv map[string]string) android.Config { + configuration, err := android.NewConfig(cmdlineArgs, outDir, availableEnv) if err != nil { fmt.Fprintf(os.Stderr, "%s", err) os.Exit(1) @@ -140,13 +140,13 @@ func runMixedModeBuild(configuration android.Config, firstCtx *android.Context, os.Exit(1) } // Second pass: Full analysis, using the bazel command results. Output ninja file. - secondConfig, err := android.ConfigForAdditionalRun(configuration) + secondArgs = cmdlineArgs + secondConfig, err := android.ConfigForAdditionalRun(secondArgs, configuration) if err != nil { fmt.Fprintf(os.Stderr, "%s", err) os.Exit(1) } secondCtx := newContext(secondConfig, true) - secondArgs = cmdlineArgs ninjaDeps := bootstrap.RunBlueprint(secondArgs, secondCtx.Context, secondConfig) ninjaDeps = append(ninjaDeps, extraNinjaDeps...) @@ -298,7 +298,7 @@ func main() { availableEnv := parseAvailableEnv() - configuration := newConfig(outDir, availableEnv) + configuration := newConfig(cmdlineArgs, outDir, availableEnv) extraNinjaDeps := []string{ configuration.ProductVariablesFileName, usedEnvFile, diff --git a/ui/build/soong.go b/ui/build/soong.go index a627daed6..d4f6f2f81 100644 --- a/ui/build/soong.go +++ b/ui/build/soong.go @@ -71,10 +71,14 @@ func writeEnvironmentFile(ctx Context, envFile string, envDeps map[string]string // A tiny struct used to tell Blueprint that it's in bootstrap mode. It would // probably be nicer to use a flag in bootstrap.Args instead. type BlueprintConfig struct { - toolDir string - soongOutDir string - outDir string - debugCompilation bool + toolDir string + soongOutDir string + outDir string + runGoTests bool + useValidations bool + debugCompilation bool + subninjas []string + primaryBuilderInvocations []bootstrap.PrimaryBuilderInvocation } func (c BlueprintConfig) HostToolDir() string { @@ -89,10 +93,26 @@ func (c BlueprintConfig) OutDir() string { return c.outDir } +func (c BlueprintConfig) RunGoTests() bool { + return c.runGoTests +} + +func (c BlueprintConfig) UseValidationsForGoTests() bool { + return c.useValidations +} + func (c BlueprintConfig) DebugCompilation() bool { return c.debugCompilation } +func (c BlueprintConfig) Subninjas() []string { + return c.subninjas +} + +func (c BlueprintConfig) PrimaryBuilderInvocations() []bootstrap.PrimaryBuilderInvocation { + return c.primaryBuilderInvocations +} + func environmentArgs(config Config, suffix string) []string { return []string{ "--available_env", shared.JoinPath(config.SoongOutDir(), availableEnvFile), @@ -211,10 +231,14 @@ func bootstrapBlueprint(ctx Context, config Config) { blueprintCtx := blueprint.NewContext() blueprintCtx.SetIgnoreUnknownModuleTypes(true) blueprintConfig := BlueprintConfig{ - soongOutDir: config.SoongOutDir(), - toolDir: config.HostToolDir(), - outDir: config.OutDir(), - debugCompilation: os.Getenv("SOONG_DELVE") != "", + soongOutDir: config.SoongOutDir(), + toolDir: config.HostToolDir(), + outDir: config.OutDir(), + runGoTests: !config.skipSoongTests, + useValidations: true, + debugCompilation: os.Getenv("SOONG_DELVE") != "", + subninjas: args.Subninjas, + primaryBuilderInvocations: args.PrimaryBuilderInvocations, } args.EmptyNinjaFile = false