bootclasspath_fragment must only depend on source contents
This change ensures that bootclasspath_fragment only depends on source modules and prebuilt_bootclasspath_fragment only depends on prebuilt modules. It does that in two ways: 1. It adds the dependencies in ComponentDepsMutator method which is called before any renaming of prebuilts is done which makes it very easy to add a dependency directly onto either the source or prebuilt as required. 2. It uses a tag which prevents dependencies on a source module from being replaced with a dependency on a prebuilt module which ensures that a dependency on the source modules is not replaced with a dependency on a prebuilt module. Bug: 177892522 Test: m nothing Change-Id: Ibcfae39083afbc07fcf729ead3ed5f5d020845bf
This commit is contained in:
@@ -53,7 +53,7 @@ func RegisterBootImageBuildComponents(ctx android.RegistrationContext) {
|
||||
ctx.RegisterModuleType("prebuilt_bootclasspath_fragment", prebuiltBootImageFactory)
|
||||
}
|
||||
|
||||
type bootImageContentDependencyTag struct {
|
||||
type bootclasspathFragmentContentDependencyTag struct {
|
||||
blueprint.BaseDependencyTag
|
||||
}
|
||||
|
||||
@@ -62,16 +62,22 @@ type bootImageContentDependencyTag struct {
|
||||
// This is a temporary workaround to make it easier to migrate to boot image modules with proper
|
||||
// dependencies.
|
||||
// TODO(b/177892522): Remove this and add needed visibility.
|
||||
func (b bootImageContentDependencyTag) ExcludeFromVisibilityEnforcement() {
|
||||
func (b bootclasspathFragmentContentDependencyTag) ExcludeFromVisibilityEnforcement() {
|
||||
}
|
||||
|
||||
// The bootclasspath_fragment contents must never depend on prebuilts.
|
||||
func (b bootclasspathFragmentContentDependencyTag) ReplaceSourceWithPrebuilt() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
// The tag used for the dependency between the boot image module and its contents.
|
||||
var bootImageContentDepTag = bootImageContentDependencyTag{}
|
||||
var bootclasspathFragmentContentDepTag = bootclasspathFragmentContentDependencyTag{}
|
||||
|
||||
var _ android.ExcludeFromVisibilityEnforcementTag = bootImageContentDepTag
|
||||
var _ android.ExcludeFromVisibilityEnforcementTag = bootclasspathFragmentContentDepTag
|
||||
var _ android.ReplaceSourceWithPrebuilt = bootclasspathFragmentContentDepTag
|
||||
|
||||
func IsbootImageContentDepTag(tag blueprint.DependencyTag) bool {
|
||||
return tag == bootImageContentDepTag
|
||||
func IsBootclasspathFragmentContentDepTag(tag blueprint.DependencyTag) bool {
|
||||
return tag == bootclasspathFragmentContentDepTag
|
||||
}
|
||||
|
||||
type bootImageProperties struct {
|
||||
@@ -187,7 +193,7 @@ func (i BootImageInfo) AndroidBootImageFilesByArchType() map[android.ArchType]an
|
||||
|
||||
func (b *BootImageModule) DepIsInSameApex(ctx android.BaseModuleContext, dep android.Module) bool {
|
||||
tag := ctx.OtherModuleDependencyTag(dep)
|
||||
if tag == bootImageContentDepTag {
|
||||
if IsBootclasspathFragmentContentDepTag(tag) {
|
||||
// Boot image contents are automatically added to apex.
|
||||
return true
|
||||
}
|
||||
@@ -202,8 +208,26 @@ func (b *BootImageModule) ShouldSupportSdkVersion(ctx android.BaseModuleContext,
|
||||
return nil
|
||||
}
|
||||
|
||||
// ComponentDepsMutator adds dependencies onto modules before any prebuilt modules without a
|
||||
// corresponding source module are renamed. This means that adding a dependency using a name without
|
||||
// a prebuilt_ prefix will always resolve to a source module and when using a name with that prefix
|
||||
// it will always resolve to a prebuilt module.
|
||||
func (b *BootImageModule) ComponentDepsMutator(ctx android.BottomUpMutatorContext) {
|
||||
module := ctx.Module()
|
||||
_, isSourceModule := module.(*BootImageModule)
|
||||
|
||||
for _, name := range b.properties.Contents {
|
||||
// A bootclasspath_fragment must depend only on other source modules, while the
|
||||
// prebuilt_bootclasspath_fragment must only depend on other prebuilt modules.
|
||||
if !isSourceModule {
|
||||
name = android.PrebuiltNameFromSource(name)
|
||||
}
|
||||
ctx.AddDependency(module, bootclasspathFragmentContentDepTag, name)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func (b *BootImageModule) DepsMutator(ctx android.BottomUpMutatorContext) {
|
||||
ctx.AddDependency(ctx.Module(), bootImageContentDepTag, b.properties.Contents...)
|
||||
|
||||
if SkipDexpreoptBootJars(ctx) {
|
||||
return
|
||||
|
Reference in New Issue
Block a user