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
This commit is contained in:
Lukacs T. Berki 2021-09-02 09:58:09 +02:00
parent 7686708a43
commit ea1a31c07f
3 changed files with 64 additions and 19 deletions

View file

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

View file

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

View file

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