Add the transitive dependencies of boot_image to apex
This avoids having to specify boot libraries in both the boot_image and separately as java_libs on the apex. Simply add them to the boot_image (happens automatically ATM when using image_name: "art") and add the boot_image to the apex. Bug: 177892522 Test: m nothing Change-Id: I7e0c41665604b73780cdf0dc555067497b1e6ef0
This commit is contained in:
parent
82886d6cbf
commit
4d101b60f0
18
apex/apex.go
18
apex/apex.go
|
@ -1702,6 +1702,9 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
|||
filesInfo = append(filesInfo, af)
|
||||
}
|
||||
}
|
||||
|
||||
// Track transitive dependencies.
|
||||
return true
|
||||
}
|
||||
case javaLibTag:
|
||||
switch child.(type) {
|
||||
|
@ -1910,6 +1913,21 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
|||
filesInfo = append(filesInfo, af)
|
||||
return true // track transitive dependencies
|
||||
}
|
||||
} else if java.IsbootImageContentDepTag(depTag) {
|
||||
// Add the contents of the boot image to the apex.
|
||||
switch child.(type) {
|
||||
case *java.Library, *java.SdkLibrary:
|
||||
af := apexFileForJavaModule(ctx, child.(javaModule))
|
||||
if !af.ok() {
|
||||
ctx.PropertyErrorf("boot_images", "boot image content %q is not configured to be compiled into dex", depName)
|
||||
return false
|
||||
}
|
||||
filesInfo = append(filesInfo, af)
|
||||
return true // track transitive dependencies
|
||||
default:
|
||||
ctx.PropertyErrorf("boot_images", "boot image content %q of type %q is not supported", depName, ctx.OtherModuleType(child))
|
||||
}
|
||||
|
||||
} else if _, ok := depTag.(android.CopyDirectlyInAnyApexTag); ok {
|
||||
// nothing
|
||||
} else if am.CanHaveApexVariants() && am.IsInstallableToApex() {
|
||||
|
|
|
@ -177,8 +177,10 @@ func TestBootImageInArtApex(t *testing.T) {
|
|||
boot_images: [
|
||||
"mybootimage",
|
||||
],
|
||||
// bar (like foo) should be transitively included in this apex because it is part of the
|
||||
// mybootimage boot_image. However, it is kept here to ensure that the apex dedups the files
|
||||
// correctly.
|
||||
java_libs: [
|
||||
"foo",
|
||||
"bar",
|
||||
],
|
||||
updatable: false,
|
||||
|
@ -247,7 +249,6 @@ func TestBootImageInArtApex(t *testing.T) {
|
|||
java.CheckModuleDependencies(t, result.TestContext, "com.android.art", "android_common_com.android.art_image", []string{
|
||||
`bar`,
|
||||
`com.android.art.key`,
|
||||
`foo`,
|
||||
`mybootimage`,
|
||||
})
|
||||
}
|
||||
|
@ -365,8 +366,12 @@ func TestBootImageContentsNoName(t *testing.T) {
|
|||
}
|
||||
`)
|
||||
|
||||
// The apex is empty because the contents of boot_image are not transitively included, yet!
|
||||
ensureExactContents(t, result.TestContext, "myapex", "android_common_myapex_image", []string{})
|
||||
ensureExactContents(t, result.TestContext, "myapex", "android_common_myapex_image", []string{
|
||||
// This does not include art, oat or vdex files as they are only included for the art boot
|
||||
// image.
|
||||
"javalib/bar.jar",
|
||||
"javalib/foo.jar",
|
||||
})
|
||||
|
||||
java.CheckModuleDependencies(t, result.TestContext, "myapex", "android_common_myapex_image", []string{
|
||||
`myapex.key`,
|
||||
|
|
|
@ -70,6 +70,10 @@ var bootImageContentDepTag = bootImageContentDependencyTag{}
|
|||
|
||||
var _ android.ExcludeFromVisibilityEnforcementTag = bootImageContentDepTag
|
||||
|
||||
func IsbootImageContentDepTag(tag blueprint.DependencyTag) bool {
|
||||
return tag == bootImageContentDepTag
|
||||
}
|
||||
|
||||
type bootImageProperties struct {
|
||||
// The name of the image this represents.
|
||||
//
|
||||
|
@ -182,8 +186,8 @@ 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 {
|
||||
// Boot image contents are not automatically added to apex, yet.
|
||||
return false
|
||||
// Boot image contents are automatically added to apex.
|
||||
return true
|
||||
}
|
||||
if android.IsMetaDependencyTag(tag) {
|
||||
// Cross-cutting metadata dependencies are metadata.
|
||||
|
|
Loading…
Reference in New Issue