Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 546de4a1 authored by Anton Hansson's avatar Anton Hansson
Browse files

Add a soong-only mode to soong-ui

The previous --skip-kati flag could be interpreted as "do not run kati
to re-generate ninja file". Add a more specific flag for the "soong
only" build use-case, where we do not load the kati-generated ninja
files at all.

Bug: 189187214
Test: build/soong/soong_ui.bash \
  --make-mode \
  --soong-only
  --skip-soong-tests \
  TARGET_PRODUCT=mainline_sdk \
  SOONG_ALLOW_MISSING_DEPENDENCIES=true \
  SOONG_SDK_SNAPSHOT_VERSION=unversioned \
  SOONG_SDK_SNAPSHOT_USE_SRCJAR=true \
  out/soong/mainline-sdks/art-module-sdk.zip
Change-Id: I91abbd28af517d4b550ebc6d88fd64947caf9545
parent d274ea91
Loading
Loading
Loading
Loading
+12 −6
Original line number Diff line number Diff line
@@ -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
		}
@@ -94,13 +94,15 @@ const (
	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 | RunNinja
	RunAllWithBazel = RunProductConfig | RunSoong | RunKati | RunBazel
	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.
@@ -228,6 +230,10 @@ func Build(ctx Context, config Config) {
		ctx.Verboseln("Skipping Kati as requested")
		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 &^ RunNinja
@@ -277,7 +283,7 @@ func Build(ctx Context, config 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))
+9 −0
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ type configImpl struct {
	dist           bool
	skipConfig     bool
	skipKati       bool
	skipKatiNinja  bool
	skipNinja      bool
	skipSoongTests bool

@@ -573,7 +574,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] == '-' {
@@ -789,6 +794,10 @@ func (c *configImpl) SkipKati() bool {
	return c.skipKati
}

func (c *configImpl) SkipKatiNinja() bool {
	return c.skipKatiNinja
}

func (c *configImpl) SkipNinja() bool {
	return c.skipNinja
}