Merge changes I91abbd28,I111a69e6
* changes: Add a soong-only mode to soong-ui Various cleanup in soong_ui to aid new feature
This commit is contained in:
commit
2be5d88b35
5 changed files with 65 additions and 51 deletions
|
@ -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 {
|
||||
|
|
|
@ -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...)
|
||||
|
@ -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]
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
@ -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
|
||||
RunBuildTests = 1 << iota
|
||||
BuildAll = BuildProductConfig | BuildSoong | BuildKati | BuildNinja
|
||||
BuildAllWithBazel = BuildProductConfig | BuildSoong | BuildKati | BuildBazel
|
||||
_ = 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
|
||||
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.
|
||||
|
@ -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())
|
||||
|
||||
|
@ -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)
|
||||
}
|
||||
|
||||
|
@ -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 {
|
||||
|
@ -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))
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -48,6 +48,7 @@ type configImpl struct {
|
|||
dist bool
|
||||
skipConfig bool
|
||||
skipKati bool
|
||||
skipKatiNinja bool
|
||||
skipNinja bool
|
||||
skipSoongTests bool
|
||||
|
||||
|
@ -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
|
||||
|
@ -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] == '-' {
|
||||
|
@ -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…
Reference in a new issue