Refactor 'in_make' to mean Kati is not skipped.
In Nougat and before, Make wrote a marker file to indicate that soong_build was invoked from Make to change certain behaviors of Soong at build time. https://cs.android.com/android/platform/superproject/+/android-7.1.2_r36:build/core/soong.mk;l=70-73;drc=ae18638b0406ad107b0882a02a13cdd8b92f2a4e Things have changed, and now soong_build is invoked from soong_ui, which supports a --skip-make configuration flag: https://cs.android.com/android/platform/superproject/+/master:build/soong/ui/build/build.go;l=31-33;drc=680387bf1d3ce7cbc77f535be7c42cec411b1687 Thus, the various remnants of 'EmbeddedInMake' and 'inMake' configuration are misleading, since soong_build is no longer invoked from Make. This CL refactors all instances to actually mean that Kati is enabled (not skipped with --skip-make), and will run after soong_build finishes, so Kati-specific behavior like the AndroidMk singleton should run. Test: TH presubmit Change-Id: I576ab8e54f99f5c8ddf9feaf9a828019b279e266
This commit is contained in:
@@ -417,7 +417,7 @@ func AndroidMkSingleton() Singleton {
|
|||||||
type androidMkSingleton struct{}
|
type androidMkSingleton struct{}
|
||||||
|
|
||||||
func (c *androidMkSingleton) GenerateBuildActions(ctx SingletonContext) {
|
func (c *androidMkSingleton) GenerateBuildActions(ctx SingletonContext) {
|
||||||
if !ctx.Config().EmbeddedInMake() {
|
if !ctx.Config().KatiEnabled() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -78,7 +78,7 @@ func TestAndroidMkSingleton_PassesUpdatedAndroidMkDataToCustomCallback(t *testin
|
|||||||
`
|
`
|
||||||
|
|
||||||
config := TestConfig(buildDir, nil, bp, nil)
|
config := TestConfig(buildDir, nil, bp, nil)
|
||||||
config.inMake = true // Enable androidmk Singleton
|
config.katiEnabled = true // Enable androidmk Singleton
|
||||||
|
|
||||||
ctx := NewTestContext(config)
|
ctx := NewTestContext(config)
|
||||||
ctx.RegisterSingletonType("androidmk", AndroidMkSingleton)
|
ctx.RegisterSingletonType("androidmk", AndroidMkSingleton)
|
||||||
@@ -250,7 +250,7 @@ func TestGetDistForGoals(t *testing.T) {
|
|||||||
|
|
||||||
for _, testCase := range testCases {
|
for _, testCase := range testCases {
|
||||||
config := TestConfig(buildDir, nil, testCase.bp, nil)
|
config := TestConfig(buildDir, nil, testCase.bp, nil)
|
||||||
config.inMake = true // Enable androidmk Singleton
|
config.katiEnabled = true // Enable androidmk Singleton
|
||||||
|
|
||||||
ctx := NewTestContext(config)
|
ctx := NewTestContext(config)
|
||||||
ctx.RegisterSingletonType("androidmk", AndroidMkSingleton)
|
ctx.RegisterSingletonType("androidmk", AndroidMkSingleton)
|
||||||
|
@@ -112,7 +112,9 @@ type config struct {
|
|||||||
envDeps map[string]string
|
envDeps map[string]string
|
||||||
envFrozen bool
|
envFrozen bool
|
||||||
|
|
||||||
inMake bool
|
// Changes behavior based on whether Kati runs after soong_build, or if soong_build
|
||||||
|
// runs standalone.
|
||||||
|
katiEnabled bool
|
||||||
|
|
||||||
captureBuild bool // true for tests, saves build parameters for each module
|
captureBuild bool // true for tests, saves build parameters for each module
|
||||||
ignoreEnvironment bool // true for tests, returns empty from all Getenv calls
|
ignoreEnvironment bool // true for tests, returns empty from all Getenv calls
|
||||||
@@ -390,9 +392,9 @@ func NewConfig(srcDir, buildDir string, moduleListFile string) (Config, error) {
|
|||||||
return Config{}, err
|
return Config{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
inMakeFile := filepath.Join(buildDir, ".soong.in_make")
|
KatiEnabledMarkerFile := filepath.Join(buildDir, ".soong.kati_enabled")
|
||||||
if _, err := os.Stat(absolutePath(inMakeFile)); err == nil {
|
if _, err := os.Stat(absolutePath(KatiEnabledMarkerFile)); err == nil {
|
||||||
config.inMake = true
|
config.katiEnabled = true
|
||||||
}
|
}
|
||||||
|
|
||||||
targets, err := decodeTargetProductVariables(config)
|
targets, err := decodeTargetProductVariables(config)
|
||||||
@@ -619,8 +621,8 @@ func (c *config) EnvDeps() map[string]string {
|
|||||||
return c.envDeps
|
return c.envDeps
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *config) EmbeddedInMake() bool {
|
func (c *config) KatiEnabled() bool {
|
||||||
return c.inMake
|
return c.katiEnabled
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *config) BuildId() string {
|
func (c *config) BuildId() string {
|
||||||
|
@@ -213,7 +213,7 @@ type dist struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *makeVarsSingleton) GenerateBuildActions(ctx SingletonContext) {
|
func (s *makeVarsSingleton) GenerateBuildActions(ctx SingletonContext) {
|
||||||
if !ctx.Config().EmbeddedInMake() {
|
if !ctx.Config().KatiEnabled() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1440,7 +1440,7 @@ func (m *ModuleBase) generateModuleTarget(ctx ModuleContext) {
|
|||||||
|
|
||||||
if len(deps) > 0 {
|
if len(deps) > 0 {
|
||||||
suffix := ""
|
suffix := ""
|
||||||
if ctx.Config().EmbeddedInMake() {
|
if ctx.Config().KatiEnabled() {
|
||||||
suffix = "-soong"
|
suffix = "-soong"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2320,7 +2320,7 @@ func (m *moduleContext) skipInstall(fullInstallPath InstallPath) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if m.Device() {
|
if m.Device() {
|
||||||
if m.Config().EmbeddedInMake() && !m.InstallBypassMake() {
|
if m.Config().KatiEnabled() && !m.InstallBypassMake() {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2373,7 +2373,7 @@ func (m *moduleContext) installFile(installPath InstallPath, name string, srcPat
|
|||||||
Input: srcPath,
|
Input: srcPath,
|
||||||
Implicits: implicitDeps,
|
Implicits: implicitDeps,
|
||||||
OrderOnly: orderOnlyDeps,
|
OrderOnly: orderOnlyDeps,
|
||||||
Default: !m.Config().EmbeddedInMake(),
|
Default: !m.Config().KatiEnabled(),
|
||||||
})
|
})
|
||||||
|
|
||||||
m.installFiles = append(m.installFiles, fullInstallPath)
|
m.installFiles = append(m.installFiles, fullInstallPath)
|
||||||
@@ -2405,7 +2405,7 @@ func (m *moduleContext) InstallSymlink(installPath InstallPath, name string, src
|
|||||||
Description: "install symlink " + fullInstallPath.Base(),
|
Description: "install symlink " + fullInstallPath.Base(),
|
||||||
Output: fullInstallPath,
|
Output: fullInstallPath,
|
||||||
Input: srcPath,
|
Input: srcPath,
|
||||||
Default: !m.Config().EmbeddedInMake(),
|
Default: !m.Config().KatiEnabled(),
|
||||||
Args: map[string]string{
|
Args: map[string]string{
|
||||||
"fromPath": relPath,
|
"fromPath": relPath,
|
||||||
},
|
},
|
||||||
@@ -2436,7 +2436,7 @@ func (m *moduleContext) InstallAbsoluteSymlink(installPath InstallPath, name str
|
|||||||
Rule: Symlink,
|
Rule: Symlink,
|
||||||
Description: "install symlink " + fullInstallPath.Base() + " -> " + absPath,
|
Description: "install symlink " + fullInstallPath.Base() + " -> " + absPath,
|
||||||
Output: fullInstallPath,
|
Output: fullInstallPath,
|
||||||
Default: !m.Config().EmbeddedInMake(),
|
Default: !m.Config().KatiEnabled(),
|
||||||
Args: map[string]string{
|
Args: map[string]string{
|
||||||
"fromPath": absPath,
|
"fromPath": absPath,
|
||||||
},
|
},
|
||||||
@@ -2665,7 +2665,7 @@ func (c *buildTargetSingleton) GenerateBuildActions(ctx SingletonContext) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
suffix := ""
|
suffix := ""
|
||||||
if ctx.Config().EmbeddedInMake() {
|
if ctx.Config().KatiEnabled() {
|
||||||
suffix = "-soong"
|
suffix = "-soong"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2673,7 +2673,7 @@ func (c *buildTargetSingleton) GenerateBuildActions(ctx SingletonContext) {
|
|||||||
ctx.Phony("checkbuild"+suffix, checkbuildDeps...)
|
ctx.Phony("checkbuild"+suffix, checkbuildDeps...)
|
||||||
|
|
||||||
// Make will generate the MODULES-IN-* targets
|
// Make will generate the MODULES-IN-* targets
|
||||||
if ctx.Config().EmbeddedInMake() {
|
if ctx.Config().KatiEnabled() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1312,7 +1312,7 @@ func PathForModuleInstall(ctx ModuleInstallPathContext, pathComponents ...string
|
|||||||
|
|
||||||
ret := pathForInstall(ctx, os, arch, partition, ctx.Debug(), pathComponents...)
|
ret := pathForInstall(ctx, os, arch, partition, ctx.Debug(), pathComponents...)
|
||||||
|
|
||||||
if ctx.InstallBypassMake() && ctx.Config().EmbeddedInMake() {
|
if ctx.InstallBypassMake() && ctx.Config().KatiEnabled() {
|
||||||
ret = ret.ToMakePath()
|
ret = ret.ToMakePath()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -53,7 +53,7 @@ func (p *phonySingleton) GenerateBuildActions(ctx SingletonContext) {
|
|||||||
p.phonyMap[phony] = SortedUniquePaths(p.phonyMap[phony])
|
p.phonyMap[phony] = SortedUniquePaths(p.phonyMap[phony])
|
||||||
}
|
}
|
||||||
|
|
||||||
if !ctx.Config().EmbeddedInMake() {
|
if !ctx.Config().KatiEnabled() {
|
||||||
for _, phony := range p.phonyList {
|
for _, phony := range p.phonyList {
|
||||||
ctx.Build(pctx, BuildParams{
|
ctx.Build(pctx, BuildParams{
|
||||||
Rule: blueprint.Phony,
|
Rule: blueprint.Phony,
|
||||||
|
@@ -424,8 +424,8 @@ func CheckErrorsAgainstExpectations(t *testing.T, errs []error, expectedErrorPat
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func SetInMakeForTests(config Config) {
|
func SetKatiEnabledForTests(config Config) {
|
||||||
config.inMake = true
|
config.katiEnabled = true
|
||||||
}
|
}
|
||||||
|
|
||||||
func AndroidMkEntriesForTest(t *testing.T, config Config, bpPath string, mod blueprint.Module) []AndroidMkEntries {
|
func AndroidMkEntriesForTest(t *testing.T, config Config, bpPath string, mod blueprint.Module) []AndroidMkEntries {
|
||||||
|
@@ -32,7 +32,7 @@ func testPrebuilt(t *testing.T, bp string, fs map[string][]byte, handlers ...con
|
|||||||
// * Configure that we are inside make
|
// * Configure that we are inside make
|
||||||
// * Add CommonOS to ensure that androidmk processing works.
|
// * Add CommonOS to ensure that androidmk processing works.
|
||||||
android.RegisterAndroidMkBuildComponents(ctx)
|
android.RegisterAndroidMkBuildComponents(ctx)
|
||||||
android.SetInMakeForTests(config)
|
android.SetKatiEnabledForTests(config)
|
||||||
|
|
||||||
for _, handler := range handlers {
|
for _, handler := range handlers {
|
||||||
handler(config)
|
handler(config)
|
||||||
|
@@ -35,8 +35,8 @@ type Stripper struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (stripper *Stripper) NeedsStrip(actx android.ModuleContext) bool {
|
func (stripper *Stripper) NeedsStrip(actx android.ModuleContext) bool {
|
||||||
// TODO(ccross): enable host stripping when embedded in make? Make never had support for stripping host binaries.
|
// TODO(ccross): enable host stripping when Kati is enabled? Make never had support for stripping host binaries.
|
||||||
return (!actx.Config().EmbeddedInMake() || actx.Device()) && !Bool(stripper.StripProperties.Strip.None)
|
return (!actx.Config().KatiEnabled() || actx.Device()) && !Bool(stripper.StripProperties.Strip.None)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (stripper *Stripper) strip(actx android.ModuleContext, in android.Path, out android.ModuleOutPath,
|
func (stripper *Stripper) strip(actx android.ModuleContext, in android.Path, out android.ModuleOutPath,
|
||||||
|
@@ -447,7 +447,7 @@ func (l *lintSingleton) generateLintReportZips(ctx android.SingletonContext) {
|
|||||||
var outputs []*lintOutputs
|
var outputs []*lintOutputs
|
||||||
var dirs []string
|
var dirs []string
|
||||||
ctx.VisitAllModules(func(m android.Module) {
|
ctx.VisitAllModules(func(m android.Module) {
|
||||||
if ctx.Config().EmbeddedInMake() && !m.ExportedToMake() {
|
if ctx.Config().KatiEnabled() && !m.ExportedToMake() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
export OUT_DIR=${OUT_DIR:-out}
|
export OUT_DIR=${OUT_DIR:-out}
|
||||||
|
|
||||||
if [ -e ${OUT_DIR}/soong/.soong.in_make ]; then
|
if [ -e ${OUT_DIR}/soong/.soong.kati_enabled ]; then
|
||||||
# If ${OUT_DIR} has been created without --skip-make, Soong will create an
|
# If ${OUT_DIR} has been created without --skip-make, Soong will create an
|
||||||
# ${OUT_DIR}/soong/build.ninja that leaves out many targets which are
|
# ${OUT_DIR}/soong/build.ninja that leaves out many targets which are
|
||||||
# expected to be supplied by the .mk files, and that might cause errors in
|
# expected to be supplied by the .mk files, and that might cause errors in
|
||||||
@@ -32,8 +32,8 @@ source build/envsetup.sh
|
|||||||
|
|
||||||
my_get_build_var() {
|
my_get_build_var() {
|
||||||
# get_build_var will run Soong in normal in-make mode where it creates
|
# get_build_var will run Soong in normal in-make mode where it creates
|
||||||
# .soong.in_make. That would clobber our real out directory, so we need to
|
# .soong.kati_enabled. That would clobber our real out directory, so we need
|
||||||
# run it in a different one.
|
# to run it in a different one.
|
||||||
OUT_DIR=${OUT_DIR}/get_build_var get_build_var "$@"
|
OUT_DIR=${OUT_DIR}/get_build_var get_build_var "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -87,7 +87,7 @@ func testSdkContext(bp string, fs map[string][]byte, extraOsTypes []android.OsTy
|
|||||||
// * Configure that we are inside make
|
// * Configure that we are inside make
|
||||||
// * Add CommonOS to ensure that androidmk processing works.
|
// * Add CommonOS to ensure that androidmk processing works.
|
||||||
android.RegisterAndroidMkBuildComponents(ctx)
|
android.RegisterAndroidMkBuildComponents(ctx)
|
||||||
android.SetInMakeForTests(config)
|
android.SetKatiEnabledForTests(config)
|
||||||
config.Targets[android.CommonOS] = []android.Target{
|
config.Targets[android.CommonOS] = []android.Target{
|
||||||
{android.CommonOS, android.Arch{ArchType: android.Common}, android.NativeBridgeDisabled, "", "", true},
|
{android.CommonOS, android.Arch{ArchType: android.Common}, android.NativeBridgeDisabled, "", "", true},
|
||||||
}
|
}
|
||||||
|
@@ -23,13 +23,20 @@ import (
|
|||||||
"android/soong/ui/metrics"
|
"android/soong/ui/metrics"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Ensures the out directory exists, and has the proper files to prevent kati
|
// SetupOutDir ensures the out directory exists, and has the proper files to
|
||||||
// from recursing into it.
|
// prevent kati from recursing into it.
|
||||||
func SetupOutDir(ctx Context, config Config) {
|
func SetupOutDir(ctx Context, config Config) {
|
||||||
ensureEmptyFileExists(ctx, filepath.Join(config.OutDir(), "Android.mk"))
|
ensureEmptyFileExists(ctx, filepath.Join(config.OutDir(), "Android.mk"))
|
||||||
ensureEmptyFileExists(ctx, filepath.Join(config.OutDir(), "CleanSpec.mk"))
|
ensureEmptyFileExists(ctx, filepath.Join(config.OutDir(), "CleanSpec.mk"))
|
||||||
if !config.SkipMake() {
|
if !config.SkipMake() {
|
||||||
ensureEmptyFileExists(ctx, filepath.Join(config.SoongOutDir(), ".soong.in_make"))
|
// Run soong_build with Kati for a hybrid build, e.g. running the
|
||||||
|
// AndroidMk singleton and postinstall commands. Communicate this to
|
||||||
|
// soong_build by writing an empty .soong.kati_enabled marker file in the
|
||||||
|
// soong_build output directory for the soong_build primary builder to
|
||||||
|
// know if the user wants to run Kati after.
|
||||||
|
//
|
||||||
|
// This does not preclude running Kati for *product configuration purposes*.
|
||||||
|
ensureEmptyFileExists(ctx, filepath.Join(config.SoongOutDir(), ".soong.kati_enabled"))
|
||||||
}
|
}
|
||||||
// The ninja_build file is used by our buildbots to understand that the output
|
// The ninja_build file is used by our buildbots to understand that the output
|
||||||
// can be parsed as ninja output.
|
// can be parsed as ninja output.
|
||||||
|
Reference in New Issue
Block a user