Remove the bootstrap.Config class.
It was confusing because bootstrapping uses two configurations: the
"global" config and the special-cased bootstrap one.
This change merges them.
Test: Presubmits.
Change-Id: I82b482cbe28a343ab6991374b2a28667e1a06b48
diff --git a/android/config.go b/android/config.go
index 1482e5d..7fbfa39 100644
--- a/android/config.go
+++ b/android/config.go
@@ -75,10 +75,26 @@
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 @@
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 @@
// 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 @@
// 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 16a4e1a..7305a6d 100644
--- a/cmd/soong_build/main.go
+++ b/cmd/soong_build/main.go
@@ -113,8 +113,8 @@
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 @@
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 @@
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 a627dae..d4f6f2f 100644
--- a/ui/build/soong.go
+++ b/ui/build/soong.go
@@ -71,10 +71,14 @@
// 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 @@
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 @@
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