Generalize the platformBootclasspathDepsMutator

Adds a BootclasspathDepsMutator that is currently only implemented by
the platform_bootclasspath but which can be implemented by
bootclasspath_fragment too.

Bug: 177892522
Test: m nothing
Change-Id: Ibe35854281004d6e40bf1f797144fb582e8c08b9
This commit is contained in:
Paul Duffin 2021-04-22 12:08:59 +01:00
parent b67d878b80
commit 4994d26bfa
3 changed files with 41 additions and 20 deletions

View File

@ -24,6 +24,33 @@ import (
// Contains code that is common to both platform_bootclasspath and bootclasspath_fragment. // Contains code that is common to both platform_bootclasspath and bootclasspath_fragment.
func init() {
registerBootclasspathBuildComponents(android.InitRegistrationContext)
}
func registerBootclasspathBuildComponents(ctx android.RegistrationContext) {
ctx.FinalDepsMutators(func(ctx android.RegisterMutatorsContext) {
ctx.BottomUp("bootclasspath_deps", bootclasspathDepsMutator)
})
}
// BootclasspathDepsMutator is the interface that a module must implement if it wants to add
// dependencies onto APEX specific variants of bootclasspath fragments or bootclasspath contents.
type BootclasspathDepsMutator interface {
// BootclasspathDepsMutator implementations should add dependencies using
// addDependencyOntoApexModulePair and addDependencyOntoApexVariants.
BootclasspathDepsMutator(ctx android.BottomUpMutatorContext)
}
// bootclasspathDepsMutator is called during the final deps phase after all APEX variants have
// been created so can add dependencies onto specific APEX variants of modules.
func bootclasspathDepsMutator(ctx android.BottomUpMutatorContext) {
m := ctx.Module()
if p, ok := m.(BootclasspathDepsMutator); ok {
p.BootclasspathDepsMutator(ctx)
}
}
// addDependencyOntoApexVariants adds dependencies onto the appropriate apex specific variants of // addDependencyOntoApexVariants adds dependencies onto the appropriate apex specific variants of
// the module as specified in the ApexVariantReference list. // the module as specified in the ApexVariantReference list.
func addDependencyOntoApexVariants(ctx android.BottomUpMutatorContext, propertyName string, refs []ApexVariantReference, tag blueprint.DependencyTag) { func addDependencyOntoApexVariants(ctx android.BottomUpMutatorContext, propertyName string, refs []ApexVariantReference, tag blueprint.DependencyTag) {

View File

@ -27,10 +27,6 @@ func init() {
func registerPlatformBootclasspathBuildComponents(ctx android.RegistrationContext) { func registerPlatformBootclasspathBuildComponents(ctx android.RegistrationContext) {
ctx.RegisterModuleType("platform_bootclasspath", platformBootclasspathFactory) ctx.RegisterModuleType("platform_bootclasspath", platformBootclasspathFactory)
ctx.FinalDepsMutators(func(ctx android.RegisterMutatorsContext) {
ctx.BottomUp("platform_bootclasspath_deps", platformBootclasspathDepsMutator)
})
} }
// The tag used for the dependency between the platform bootclasspath and any configured boot jars. // The tag used for the dependency between the platform bootclasspath and any configured boot jars.
@ -126,25 +122,22 @@ func (b *platformBootclasspathModule) hiddenAPIDepsMutator(ctx android.BottomUpM
hiddenAPIAddStubLibDependencies(ctx, sdkKindToStubLibModules) hiddenAPIAddStubLibDependencies(ctx, sdkKindToStubLibModules)
} }
func platformBootclasspathDepsMutator(ctx android.BottomUpMutatorContext) { func (b *platformBootclasspathModule) BootclasspathDepsMutator(ctx android.BottomUpMutatorContext) {
m := ctx.Module() // Add dependencies on all the modules configured in the "art" boot image.
if p, ok := m.(*platformBootclasspathModule); ok { artImageConfig := genBootImageConfigs(ctx)[artBootImageName]
// Add dependencies on all the modules configured in the "art" boot image. addDependenciesOntoBootImageModules(ctx, artImageConfig.modules)
artImageConfig := genBootImageConfigs(ctx)[artBootImageName]
addDependenciesOntoBootImageModules(ctx, artImageConfig.modules)
// Add dependencies on all the modules configured in the "boot" boot image. That does not // Add dependencies on all the modules configured in the "boot" boot image. That does not
// include modules configured in the "art" boot image. // include modules configured in the "art" boot image.
bootImageConfig := p.getImageConfig(ctx) bootImageConfig := b.getImageConfig(ctx)
addDependenciesOntoBootImageModules(ctx, bootImageConfig.modules) addDependenciesOntoBootImageModules(ctx, bootImageConfig.modules)
// Add dependencies on all the updatable modules. // Add dependencies on all the updatable modules.
updatableModules := dexpreopt.GetGlobalConfig(ctx).UpdatableBootJars updatableModules := dexpreopt.GetGlobalConfig(ctx).UpdatableBootJars
addDependenciesOntoBootImageModules(ctx, updatableModules) addDependenciesOntoBootImageModules(ctx, updatableModules)
// Add dependencies on all the fragments. // Add dependencies on all the fragments.
p.properties.BootclasspathFragmentsDepsProperties.addDependenciesOntoFragments(ctx) b.properties.BootclasspathFragmentsDepsProperties.addDependenciesOntoFragments(ctx)
}
} }
func addDependenciesOntoBootImageModules(ctx android.BottomUpMutatorContext, modules android.ConfiguredJarList) { func addDependenciesOntoBootImageModules(ctx android.BottomUpMutatorContext, modules android.ConfiguredJarList) {

View File

@ -232,6 +232,7 @@ func registerRequiredBuildComponentsForTest(ctx android.RegistrationContext) {
RegisterAppBuildComponents(ctx) RegisterAppBuildComponents(ctx)
RegisterAppImportBuildComponents(ctx) RegisterAppImportBuildComponents(ctx)
RegisterAppSetBuildComponents(ctx) RegisterAppSetBuildComponents(ctx)
registerBootclasspathBuildComponents(ctx)
RegisterBootImageBuildComponents(ctx) RegisterBootImageBuildComponents(ctx)
RegisterDexpreoptBootJarsComponents(ctx) RegisterDexpreoptBootJarsComponents(ctx)
RegisterDocsBuildComponents(ctx) RegisterDocsBuildComponents(ctx)