Merge "Extract default image specific logic from buildBootImage" am: 6d4de43833 am: 29b18b8c17

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1686149

Change-Id: Ifd9767dc1b40ac4a5346c7528329fb314aadfddc
This commit is contained in:
Paul Duffin
2021-04-27 17:42:25 +00:00
committed by Automerger Merge Worker

View File

@@ -434,10 +434,21 @@ func (d *dexpreoptBootJars) GenerateSingletonBuildActions(ctx android.SingletonC
return return
} }
// Always create the default boot image first, to get a unique profile rule for all images. // Generate the profile rule from the default boot image.
d.defaultBootImage = buildBootImage(ctx, defaultBootImageConfig(ctx)) defaultImageConfig := defaultBootImageConfig(ctx)
profile := bootImageProfileRule(ctx, defaultImageConfig)
// Generate the framework profile rule
bootFrameworkProfileRule(ctx, defaultImageConfig)
// Generate the updatable bootclasspath packages rule.
updatableBcpPackagesRule(ctx, defaultImageConfig)
// Create the default boot image.
d.defaultBootImage = buildBootImage(ctx, defaultImageConfig, profile)
// Create boot image for the ART apex (build artifacts are accessed via the global boot image config). // Create boot image for the ART apex (build artifacts are accessed via the global boot image config).
d.otherImages = append(d.otherImages, buildBootImage(ctx, artBootImageConfig(ctx))) d.otherImages = append(d.otherImages, buildBootImage(ctx, artBootImageConfig(ctx), profile))
copyUpdatableBootJars(ctx) copyUpdatableBootJars(ctx)
@@ -605,16 +616,12 @@ func findAndCopyBootJars(ctx android.SingletonContext, bootjars android.Configur
} }
// buildBootImage takes a bootImageConfig, creates rules to build it, and returns the image. // buildBootImage takes a bootImageConfig, creates rules to build it, and returns the image.
func buildBootImage(ctx android.SingletonContext, image *bootImageConfig) *bootImageConfig { func buildBootImage(ctx android.SingletonContext, image *bootImageConfig, profile android.WritablePath) *bootImageConfig {
getBootJarFunc := func(module android.Module) (int, android.Path) { getBootJarFunc := func(module android.Module) (int, android.Path) {
return getBootImageJar(ctx, image, module) return getBootImageJar(ctx, image, module)
} }
findAndCopyBootJars(ctx, image.modules, image.dexPaths, getBootJarFunc) findAndCopyBootJars(ctx, image.modules, image.dexPaths, getBootJarFunc)
profile := bootImageProfileRule(ctx, image)
bootFrameworkProfileRule(ctx, image)
updatableBcpPackagesRule(ctx, image)
var zipFiles android.Paths var zipFiles android.Paths
for _, variant := range image.variants { for _, variant := range image.variants {
files := buildBootImageVariant(ctx, variant, profile) files := buildBootImageVariant(ctx, variant, profile)
@@ -805,7 +812,7 @@ func bootImageProfileRule(ctx android.SingletonContext, image *bootImageConfig)
if global.DisableGenerateProfile { if global.DisableGenerateProfile {
return nil return nil
} }
profile := ctx.Config().Once(bootImageProfileRuleKey, func() interface{} {
defaultProfile := "frameworks/base/config/boot-image-profile.txt" defaultProfile := "frameworks/base/config/boot-image-profile.txt"
rule := android.NewRuleBuilder(pctx, ctx) rule := android.NewRuleBuilder(pctx, ctx)
@@ -844,15 +851,8 @@ func bootImageProfileRule(ctx android.SingletonContext, image *bootImageConfig)
image.profileInstalls = rule.Installs() image.profileInstalls = rule.Installs()
return profile return profile
})
if profile == nil {
return nil // wrap nil into a typed pointer with value nil
}
return profile.(android.WritablePath)
} }
var bootImageProfileRuleKey = android.NewOnceKey("bootImageProfileRule")
func bootFrameworkProfileRule(ctx android.SingletonContext, image *bootImageConfig) android.WritablePath { func bootFrameworkProfileRule(ctx android.SingletonContext, image *bootImageConfig) android.WritablePath {
globalSoong := dexpreopt.GetCachedGlobalSoongConfig(ctx) globalSoong := dexpreopt.GetCachedGlobalSoongConfig(ctx)
global := dexpreopt.GetGlobalConfig(ctx) global := dexpreopt.GetGlobalConfig(ctx)
@@ -860,7 +860,6 @@ func bootFrameworkProfileRule(ctx android.SingletonContext, image *bootImageConf
if global.DisableGenerateProfile || ctx.Config().UnbundledBuild() { if global.DisableGenerateProfile || ctx.Config().UnbundledBuild() {
return nil return nil
} }
return ctx.Config().Once(bootFrameworkProfileRuleKey, func() interface{} {
// Some branches like master-art-host don't have frameworks/base, so manually // Some branches like master-art-host don't have frameworks/base, so manually
// handle the case that the default is missing. Those branches won't attempt to build the profile rule, // handle the case that the default is missing. Those branches won't attempt to build the profile rule,
@@ -894,17 +893,13 @@ func bootFrameworkProfileRule(ctx android.SingletonContext, image *bootImageConf
image.profileInstalls = append(image.profileInstalls, rule.Installs()...) image.profileInstalls = append(image.profileInstalls, rule.Installs()...)
return profile return profile
}).(android.WritablePath)
} }
var bootFrameworkProfileRuleKey = android.NewOnceKey("bootFrameworkProfileRule")
func updatableBcpPackagesRule(ctx android.SingletonContext, image *bootImageConfig) android.WritablePath { func updatableBcpPackagesRule(ctx android.SingletonContext, image *bootImageConfig) android.WritablePath {
if ctx.Config().UnbundledBuild() { if ctx.Config().UnbundledBuild() {
return nil return nil
} }
return ctx.Config().Once(updatableBcpPackagesRuleKey, func() interface{} {
global := dexpreopt.GetGlobalConfig(ctx) global := dexpreopt.GetGlobalConfig(ctx)
updatableModules := global.UpdatableBootJars.CopyOfJars() updatableModules := global.UpdatableBootJars.CopyOfJars()
@@ -945,11 +940,8 @@ func updatableBcpPackagesRule(ctx android.SingletonContext, image *bootImageConf
image.profileInstalls = append(image.profileInstalls, rule.Installs()...) image.profileInstalls = append(image.profileInstalls, rule.Installs()...)
return updatableBcpPackages return updatableBcpPackages
}).(android.WritablePath)
} }
var updatableBcpPackagesRuleKey = android.NewOnceKey("updatableBcpPackagesRule")
func dumpOatRules(ctx android.SingletonContext, image *bootImageConfig) { func dumpOatRules(ctx android.SingletonContext, image *bootImageConfig) {
var allPhonies android.Paths var allPhonies android.Paths
for _, image := range image.variants { for _, image := range image.variants {