From d49324dadb1fc38c363c0bc7ab28afacdf71b742 Mon Sep 17 00:00:00 2001 From: Jiakai Zhang Date: Fri, 24 Feb 2023 17:05:02 +0000 Subject: [PATCH] Refactor platform_bootclasspath to support multiple boot images. Bug: 269230245 Test: m Change-Id: I223756d5481607a82732f70c51057609ec4ee43f --- java/platform_bootclasspath.go | 42 ++++++++++++++++------------------ 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/java/platform_bootclasspath.go b/java/platform_bootclasspath.go index f0de7a4d8..5824f08fd 100644 --- a/java/platform_bootclasspath.go +++ b/java/platform_bootclasspath.go @@ -129,7 +129,7 @@ func (b *platformBootclasspathModule) BootclasspathDepsMutator(ctx android.Botto // Add dependencies on all the non-updatable module configured in the "boot" boot image. That does // not include modules configured in the "art" boot image. - bootImageConfig := b.getImageConfig(ctx) + bootImageConfig := defaultBootImageConfig(ctx) addDependenciesOntoBootImageModules(ctx, bootImageConfig.modules, platformBootclasspathBootJarDepTag) // Add dependencies on all the apex jars. @@ -205,7 +205,7 @@ func (b *platformBootclasspathModule) generateClasspathProtoBuildActions(ctx and func (b *platformBootclasspathModule) configuredJars(ctx android.ModuleContext) android.ConfiguredJarList { // Include all non APEX jars - jars := b.getImageConfig(ctx).modules + jars := defaultBootImageConfig(ctx).modules // Include jars from APEXes that don't populate their classpath proto config. remainingJars := dexpreopt.GetGlobalConfig(ctx).ApexBootJars @@ -266,10 +266,6 @@ func (b *platformBootclasspathModule) checkApexModules(ctx android.ModuleContext } } -func (b *platformBootclasspathModule) getImageConfig(ctx android.EarlyModuleContext) *bootImageConfig { - return defaultBootImageConfig(ctx) -} - // generateHiddenAPIBuildActions generates all the hidden API related build rules. func (b *platformBootclasspathModule) generateHiddenAPIBuildActions(ctx android.ModuleContext, modules []android.Module, fragments []android.Module) bootDexJarByModule { @@ -410,27 +406,24 @@ func (b *platformBootclasspathModule) generateBootImageBuildActions(ctx android. // GenerateSingletonBuildActions method as it cannot create it for itself. dexpreopt.GetGlobalSoongConfig(ctx) - imageConfig := b.getImageConfig(ctx) - if imageConfig == nil { - return - } - global := dexpreopt.GetGlobalConfig(ctx) if !shouldBuildBootImages(ctx.Config(), global) { return } - // Generate the framework profile rule - bootFrameworkProfileRule(ctx, imageConfig) + frameworkBootImageConfig := defaultBootImageConfig(ctx) + bootFrameworkProfileRule(ctx, frameworkBootImageConfig) + b.generateBootImage(ctx, frameworkBootImageName, platformModules) + b.copyApexBootJarsForAppsDexpreopt(ctx, apexModules) + dumpOatRules(ctx, frameworkBootImageConfig) +} - // Copy platform module dex jars to their predefined locations. - platformBootDexJarsByModule := extractEncodedDexJarsFromModules(ctx, platformModules) - copyBootJarsToPredefinedLocations(ctx, platformBootDexJarsByModule, imageConfig.dexPathsByModule) +func (b *platformBootclasspathModule) generateBootImage(ctx android.ModuleContext, imageName string, modules []android.Module) { + imageConfig := genBootImageConfigs(ctx)[imageName] - // Copy apex module dex jars to their predefined locations. - config := GetApexBootConfig(ctx) - apexBootDexJarsByModule := extractEncodedDexJarsFromModules(ctx, apexModules) - copyBootJarsToPredefinedLocations(ctx, apexBootDexJarsByModule, config.dexPathsByModule) + // Copy module dex jars to their predefined locations. + bootDexJarsByModule := extractEncodedDexJarsFromModules(ctx, modules) + copyBootJarsToPredefinedLocations(ctx, bootDexJarsByModule, imageConfig.dexPathsByModule) // Build a profile for the image config and then use that to build the boot image. profile := bootImageProfileRule(ctx, imageConfig) @@ -443,6 +436,11 @@ func (b *platformBootclasspathModule) generateBootImageBuildActions(ctx android. // Build boot image files for the host variants. There are use directly by ART host side tests. buildBootImageVariantsForBuildOs(ctx, imageConfig, profile) - - dumpOatRules(ctx, imageConfig) +} + +// Copy apex module dex jars to their predefined locations. They will be used for dexpreopt for apps. +func (b *platformBootclasspathModule) copyApexBootJarsForAppsDexpreopt(ctx android.ModuleContext, apexModules []android.Module) { + config := GetApexBootConfig(ctx) + apexBootDexJarsByModule := extractEncodedDexJarsFromModules(ctx, apexModules) + copyBootJarsToPredefinedLocations(ctx, apexBootDexJarsByModule, config.dexPathsByModule) }