Loading cmd/multiproduct_kati/main.go +7 −5 Original line number Diff line number Diff line Loading @@ -460,19 +460,21 @@ func buildProduct(mpctx *mpContext, product string) { } }() buildWhat := build.BuildProductConfig config.SetSkipNinja(true) buildWhat := build.RunProductConfig if !*onlyConfig { buildWhat |= build.BuildSoong buildWhat |= build.RunSoong if !*onlySoong { buildWhat |= build.BuildKati buildWhat |= build.RunKati } } before := time.Now() build.Build(ctx, config, buildWhat) build.Build(ctx, config) // Save std_full.log if Kati re-read the makefiles if buildWhat&build.BuildKati != 0 { if buildWhat&build.RunKati != 0 { if after, err := os.Stat(config.KatiBuildNinjaFile()); err == nil && after.ModTime().After(before) { err := copyFile(stdLog, filepath.Join(filepath.Dir(stdLog), "std_full.log")) if err != nil { Loading cmd/soong_ui/main.go +2 −12 Original line number Diff line number Diff line Loading @@ -59,12 +59,10 @@ type command struct { run func(ctx build.Context, config build.Config, args []string, logsDir string) } const makeModeFlagName = "--make-mode" // list of supported commands (flags) supported by soong ui var commands []command = []command{ { flag: makeModeFlagName, flag: "--make-mode", description: "build the modules by the target name (i.e. soong_docs)", config: func(ctx build.Context, args ...string) build.Config { return build.NewConfig(ctx, args...) Loading Loading @@ -506,15 +504,7 @@ func runMake(ctx build.Context, config build.Config, _ []string, logsDir string) ctx.Fatal("done") } toBuild := build.BuildAll if config.UseBazel() { toBuild = build.BuildAllWithBazel } if config.Checkbuild() { toBuild |= build.RunBuildTests } build.Build(ctx, config, toBuild) build.Build(ctx, config) } // getCommand finds the appropriate command based on args[1] flag. args[0] Loading cuj/cuj.go +1 −1 Original line number Diff line number Diff line Loading @@ -115,7 +115,7 @@ func (t *Test) Run(logsDir string) { defer f.Shutdown() build.FindSources(buildCtx, config, f) build.Build(buildCtx, config, build.BuildAll) build.Build(buildCtx, config) t.results.metrics = met } Loading ui/build/build.go +41 −31 Original line number Diff line number Diff line Loading @@ -60,15 +60,15 @@ builddir = {{.OutDir}} {{end -}} pool highmem_pool depth = {{.HighmemParallel}} {{if .HasKatiSuffix}}subninja {{.KatiBuildNinjaFile}} {{if and (not .SkipKatiNinja) .HasKatiSuffix}}subninja {{.KatiBuildNinjaFile}} subninja {{.KatiPackageNinjaFile}} {{end -}} subninja {{.SoongNinjaFile}} `)) func createCombinedBuildNinjaFile(ctx Context, config Config) { // If we're in SkipKati mode, skip creating this file if it already exists if config.SkipKati() { // If we're in SkipKati mode but want to run kati ninja, skip creating this file if it already exists if config.SkipKati() && !config.SkipKatiNinja() { if _, err := os.Stat(config.CombinedNinjaFile()); err == nil || !os.IsNotExist(err) { return } Loading @@ -87,15 +87,22 @@ func createCombinedBuildNinjaFile(ctx Context, config Config) { // These are bitmasks which can be used to check whether various flags are set e.g. whether to use Bazel. const ( BuildNone = iota BuildProductConfig = 1 << iota BuildSoong = 1 << iota BuildKati = 1 << iota BuildNinja = 1 << iota BuildBazel = 1 << iota _ = iota // Whether to run the kati config step. RunProductConfig = 1 << iota // Whether to run soong to generate a ninja file. RunSoong = 1 << iota // Whether to run kati to generate a ninja file. RunKati = 1 << iota // Whether to include the kati-generated ninja file in the combined ninja. RunKatiNinja = 1 << iota // Whether to run ninja on the combined ninja. RunNinja = 1 << iota // Whether to run bazel on the combined ninja. RunBazel = 1 << iota RunBuildTests = 1 << iota BuildAll = BuildProductConfig | BuildSoong | BuildKati | BuildNinja BuildAllWithBazel = BuildProductConfig | BuildSoong | BuildKati | BuildBazel RunAll = RunProductConfig | RunSoong | RunKati | RunKatiNinja | RunNinja RunAllWithBazel = RunProductConfig | RunSoong | RunKati | RunKatiNinja | RunBazel ) // checkProblematicFiles fails the build if existing Android.mk or CleanSpec.mk files are found at the root of the tree. Loading Loading @@ -173,7 +180,7 @@ func checkRAM(ctx Context, config Config) { // Build the tree. The 'what' argument can be used to chose which components of // the build to run, via checking various bitmasks. func Build(ctx Context, config Config, what int) { func Build(ctx Context, config Config) { ctx.Verboseln("Starting build with args:", config.Arguments()) ctx.Verboseln("Environment:", config.Environment().Environ()) Loading Loading @@ -208,33 +215,39 @@ func Build(ctx Context, config Config, what int) { SetupPath(ctx, config) what := RunAll if config.UseBazel() { what = RunAllWithBazel } if config.Checkbuild() { what |= RunBuildTests } if config.SkipConfig() { ctx.Verboseln("Skipping Config as requested") what = what &^ BuildProductConfig what = what &^ RunProductConfig } if config.SkipKati() { ctx.Verboseln("Skipping Kati as requested") what = what &^ BuildKati what = what &^ RunKati } if config.SkipKatiNinja() { ctx.Verboseln("Skipping use of Kati ninja as requested") what = what &^ RunKatiNinja } if config.SkipNinja() { ctx.Verboseln("Skipping Ninja as requested") what = what &^ BuildNinja what = what &^ RunNinja } if config.StartGoma() { // Ensure start Goma compiler_proxy startGoma(ctx, config) } if config.StartRBE() { // Ensure RBE proxy is started startRBE(ctx, config) } if what&BuildProductConfig != 0 { // Run make for product config if what&RunProductConfig != 0 { runMakeProductConfig(ctx, config) } Loading @@ -254,8 +267,7 @@ func Build(ctx Context, config Config, what int) { return } if what&BuildSoong != 0 { // Run Soong if what&RunSoong != 0 { runSoong(ctx, config) if config.bazelBuildMode() == generateBuildFiles { Loading @@ -264,15 +276,14 @@ func Build(ctx Context, config Config, what int) { } } if what&BuildKati != 0 { // Run ckati if what&RunKati != 0 { genKatiSuffix(ctx, config) runKatiCleanSpec(ctx, config) runKatiBuild(ctx, config) runKatiPackage(ctx, config) ioutil.WriteFile(config.LastKatiSuffixFile(), []byte(config.KatiSuffix()), 0666) // a+rw } else { } else if what&RunKatiNinja != 0 { // Load last Kati Suffix if it exists if katiSuffix, err := ioutil.ReadFile(config.LastKatiSuffixFile()); err == nil { ctx.Verboseln("Loaded previous kati config:", string(katiSuffix)) Loading @@ -289,17 +300,16 @@ func Build(ctx Context, config Config, what int) { testForDanglingRules(ctx, config) } if what&BuildNinja != 0 { if what&BuildKati != 0 { if what&RunNinja != 0 { if what&RunKati != 0 { installCleanIfNecessary(ctx, config) } // Run ninja runNinjaForBuild(ctx, config) } // Currently, using Bazel requires Kati and Soong to run first, so check whether to run Bazel last. if what&BuildBazel != 0 { if what&RunBazel != 0 { runBazel(ctx, config) } } Loading ui/build/config.go +14 −2 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ type configImpl struct { dist bool skipConfig bool skipKati bool skipKatiNinja bool skipNinja bool skipSoongTests bool Loading Loading @@ -567,8 +568,7 @@ func getTargetsFromDirs(ctx Context, relDir string, dirs []string, targetNamePre func (c *configImpl) parseArgs(ctx Context, args []string) { for i := 0; i < len(args); i++ { arg := strings.TrimSpace(args[i]) if arg == "--make-mode" { } else if arg == "showcommands" { if arg == "showcommands" { c.verbose = true } else if arg == "--skip-ninja" { c.skipNinja = true Loading @@ -576,7 +576,11 @@ func (c *configImpl) parseArgs(ctx Context, args []string) { c.skipConfig = true c.skipKati = true } else if arg == "--skip-kati" { // TODO: remove --skip-kati once module builds have been migrated to --song-only c.skipKati = true } else if arg == "--soong-only" { c.skipKati = true c.skipKatiNinja = true } else if arg == "--skip-soong-tests" { c.skipSoongTests = true } else if len(arg) > 0 && arg[0] == '-' { Loading Loading @@ -792,10 +796,18 @@ func (c *configImpl) SkipKati() bool { return c.skipKati } func (c *configImpl) SkipKatiNinja() bool { return c.skipKatiNinja } func (c *configImpl) SkipNinja() bool { return c.skipNinja } func (c *configImpl) SetSkipNinja(v bool) { c.skipNinja = v } func (c *configImpl) SkipConfig() bool { return c.skipConfig } Loading Loading
cmd/multiproduct_kati/main.go +7 −5 Original line number Diff line number Diff line Loading @@ -460,19 +460,21 @@ func buildProduct(mpctx *mpContext, product string) { } }() buildWhat := build.BuildProductConfig config.SetSkipNinja(true) buildWhat := build.RunProductConfig if !*onlyConfig { buildWhat |= build.BuildSoong buildWhat |= build.RunSoong if !*onlySoong { buildWhat |= build.BuildKati buildWhat |= build.RunKati } } before := time.Now() build.Build(ctx, config, buildWhat) build.Build(ctx, config) // Save std_full.log if Kati re-read the makefiles if buildWhat&build.BuildKati != 0 { if buildWhat&build.RunKati != 0 { if after, err := os.Stat(config.KatiBuildNinjaFile()); err == nil && after.ModTime().After(before) { err := copyFile(stdLog, filepath.Join(filepath.Dir(stdLog), "std_full.log")) if err != nil { Loading
cmd/soong_ui/main.go +2 −12 Original line number Diff line number Diff line Loading @@ -59,12 +59,10 @@ type command struct { run func(ctx build.Context, config build.Config, args []string, logsDir string) } const makeModeFlagName = "--make-mode" // list of supported commands (flags) supported by soong ui var commands []command = []command{ { flag: makeModeFlagName, flag: "--make-mode", description: "build the modules by the target name (i.e. soong_docs)", config: func(ctx build.Context, args ...string) build.Config { return build.NewConfig(ctx, args...) Loading Loading @@ -506,15 +504,7 @@ func runMake(ctx build.Context, config build.Config, _ []string, logsDir string) ctx.Fatal("done") } toBuild := build.BuildAll if config.UseBazel() { toBuild = build.BuildAllWithBazel } if config.Checkbuild() { toBuild |= build.RunBuildTests } build.Build(ctx, config, toBuild) build.Build(ctx, config) } // getCommand finds the appropriate command based on args[1] flag. args[0] Loading
cuj/cuj.go +1 −1 Original line number Diff line number Diff line Loading @@ -115,7 +115,7 @@ func (t *Test) Run(logsDir string) { defer f.Shutdown() build.FindSources(buildCtx, config, f) build.Build(buildCtx, config, build.BuildAll) build.Build(buildCtx, config) t.results.metrics = met } Loading
ui/build/build.go +41 −31 Original line number Diff line number Diff line Loading @@ -60,15 +60,15 @@ builddir = {{.OutDir}} {{end -}} pool highmem_pool depth = {{.HighmemParallel}} {{if .HasKatiSuffix}}subninja {{.KatiBuildNinjaFile}} {{if and (not .SkipKatiNinja) .HasKatiSuffix}}subninja {{.KatiBuildNinjaFile}} subninja {{.KatiPackageNinjaFile}} {{end -}} subninja {{.SoongNinjaFile}} `)) func createCombinedBuildNinjaFile(ctx Context, config Config) { // If we're in SkipKati mode, skip creating this file if it already exists if config.SkipKati() { // If we're in SkipKati mode but want to run kati ninja, skip creating this file if it already exists if config.SkipKati() && !config.SkipKatiNinja() { if _, err := os.Stat(config.CombinedNinjaFile()); err == nil || !os.IsNotExist(err) { return } Loading @@ -87,15 +87,22 @@ func createCombinedBuildNinjaFile(ctx Context, config Config) { // These are bitmasks which can be used to check whether various flags are set e.g. whether to use Bazel. const ( BuildNone = iota BuildProductConfig = 1 << iota BuildSoong = 1 << iota BuildKati = 1 << iota BuildNinja = 1 << iota BuildBazel = 1 << iota _ = iota // Whether to run the kati config step. RunProductConfig = 1 << iota // Whether to run soong to generate a ninja file. RunSoong = 1 << iota // Whether to run kati to generate a ninja file. RunKati = 1 << iota // Whether to include the kati-generated ninja file in the combined ninja. RunKatiNinja = 1 << iota // Whether to run ninja on the combined ninja. RunNinja = 1 << iota // Whether to run bazel on the combined ninja. RunBazel = 1 << iota RunBuildTests = 1 << iota BuildAll = BuildProductConfig | BuildSoong | BuildKati | BuildNinja BuildAllWithBazel = BuildProductConfig | BuildSoong | BuildKati | BuildBazel RunAll = RunProductConfig | RunSoong | RunKati | RunKatiNinja | RunNinja RunAllWithBazel = RunProductConfig | RunSoong | RunKati | RunKatiNinja | RunBazel ) // checkProblematicFiles fails the build if existing Android.mk or CleanSpec.mk files are found at the root of the tree. Loading Loading @@ -173,7 +180,7 @@ func checkRAM(ctx Context, config Config) { // Build the tree. The 'what' argument can be used to chose which components of // the build to run, via checking various bitmasks. func Build(ctx Context, config Config, what int) { func Build(ctx Context, config Config) { ctx.Verboseln("Starting build with args:", config.Arguments()) ctx.Verboseln("Environment:", config.Environment().Environ()) Loading Loading @@ -208,33 +215,39 @@ func Build(ctx Context, config Config, what int) { SetupPath(ctx, config) what := RunAll if config.UseBazel() { what = RunAllWithBazel } if config.Checkbuild() { what |= RunBuildTests } if config.SkipConfig() { ctx.Verboseln("Skipping Config as requested") what = what &^ BuildProductConfig what = what &^ RunProductConfig } if config.SkipKati() { ctx.Verboseln("Skipping Kati as requested") what = what &^ BuildKati what = what &^ RunKati } if config.SkipKatiNinja() { ctx.Verboseln("Skipping use of Kati ninja as requested") what = what &^ RunKatiNinja } if config.SkipNinja() { ctx.Verboseln("Skipping Ninja as requested") what = what &^ BuildNinja what = what &^ RunNinja } if config.StartGoma() { // Ensure start Goma compiler_proxy startGoma(ctx, config) } if config.StartRBE() { // Ensure RBE proxy is started startRBE(ctx, config) } if what&BuildProductConfig != 0 { // Run make for product config if what&RunProductConfig != 0 { runMakeProductConfig(ctx, config) } Loading @@ -254,8 +267,7 @@ func Build(ctx Context, config Config, what int) { return } if what&BuildSoong != 0 { // Run Soong if what&RunSoong != 0 { runSoong(ctx, config) if config.bazelBuildMode() == generateBuildFiles { Loading @@ -264,15 +276,14 @@ func Build(ctx Context, config Config, what int) { } } if what&BuildKati != 0 { // Run ckati if what&RunKati != 0 { genKatiSuffix(ctx, config) runKatiCleanSpec(ctx, config) runKatiBuild(ctx, config) runKatiPackage(ctx, config) ioutil.WriteFile(config.LastKatiSuffixFile(), []byte(config.KatiSuffix()), 0666) // a+rw } else { } else if what&RunKatiNinja != 0 { // Load last Kati Suffix if it exists if katiSuffix, err := ioutil.ReadFile(config.LastKatiSuffixFile()); err == nil { ctx.Verboseln("Loaded previous kati config:", string(katiSuffix)) Loading @@ -289,17 +300,16 @@ func Build(ctx Context, config Config, what int) { testForDanglingRules(ctx, config) } if what&BuildNinja != 0 { if what&BuildKati != 0 { if what&RunNinja != 0 { if what&RunKati != 0 { installCleanIfNecessary(ctx, config) } // Run ninja runNinjaForBuild(ctx, config) } // Currently, using Bazel requires Kati and Soong to run first, so check whether to run Bazel last. if what&BuildBazel != 0 { if what&RunBazel != 0 { runBazel(ctx, config) } } Loading
ui/build/config.go +14 −2 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ type configImpl struct { dist bool skipConfig bool skipKati bool skipKatiNinja bool skipNinja bool skipSoongTests bool Loading Loading @@ -567,8 +568,7 @@ func getTargetsFromDirs(ctx Context, relDir string, dirs []string, targetNamePre func (c *configImpl) parseArgs(ctx Context, args []string) { for i := 0; i < len(args); i++ { arg := strings.TrimSpace(args[i]) if arg == "--make-mode" { } else if arg == "showcommands" { if arg == "showcommands" { c.verbose = true } else if arg == "--skip-ninja" { c.skipNinja = true Loading @@ -576,7 +576,11 @@ func (c *configImpl) parseArgs(ctx Context, args []string) { c.skipConfig = true c.skipKati = true } else if arg == "--skip-kati" { // TODO: remove --skip-kati once module builds have been migrated to --song-only c.skipKati = true } else if arg == "--soong-only" { c.skipKati = true c.skipKatiNinja = true } else if arg == "--skip-soong-tests" { c.skipSoongTests = true } else if len(arg) > 0 && arg[0] == '-' { Loading Loading @@ -792,10 +796,18 @@ func (c *configImpl) SkipKati() bool { return c.skipKati } func (c *configImpl) SkipKatiNinja() bool { return c.skipKatiNinja } func (c *configImpl) SkipNinja() bool { return c.skipNinja } func (c *configImpl) SetSkipNinja(v bool) { c.skipNinja = v } func (c *configImpl) SkipConfig() bool { return c.skipConfig } Loading