Merge changes I67589bcc,Ibcfae390

* changes:
  Replace boot image with bootclasspath fragment in sdk package
  bootclasspath_fragment must only depend on source contents
This commit is contained in:
Paul Duffin 2021-04-22 14:02:43 +00:00 committed by Gerrit Code Review
commit 7cbdf81e95
5 changed files with 69 additions and 29 deletions

View File

@ -1924,7 +1924,7 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
// Rlib is statically linked, but it might have shared lib
// dependencies. Track them.
return true
} else if java.IsbootImageContentDepTag(depTag) {
} else if java.IsBootclasspathFragmentContentDepTag(depTag) {
// Add the contents of the bootclasspath fragment to the apex.
switch child.(type) {
case *java.Library, *java.SdkLibrary:

View File

@ -216,6 +216,22 @@ func TestBootclasspathFragmentInArtApex(t *testing.T) {
],
}
java_import {
name: "foo",
jars: ["foo.jar"],
apex_available: [
"com.android.art",
],
}
java_import {
name: "bar",
jars: ["bar.jar"],
apex_available: [
"com.android.art",
],
}
// Make sure that a preferred prebuilt doesn't affect the apex.
prebuilt_boot_image {
name: "mybootclasspathfragment",

View File

@ -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

View File

@ -20,7 +20,7 @@ bootstrap_go_package {
"update.go",
],
testSrcs: [
"boot_image_sdk_test.go",
"bootclasspath_fragment_sdk_test.go",
"bp_test.go",
"cc_sdk_test.go",
"compat_config_sdk_test.go",

View File

@ -20,17 +20,17 @@ import (
"android/soong/android"
)
func TestSnapshotWithBootImage(t *testing.T) {
func TestSnapshotWithBootclasspathFragment(t *testing.T) {
result := android.GroupFixturePreparers(
prepareForSdkTestWithJava,
android.FixtureWithRootAndroidBp(`
sdk {
name: "mysdk",
boot_images: ["mybootimage"],
bootclasspath_fragments: ["mybootclasspathfragment"],
}
boot_image {
name: "mybootimage",
bootclasspath_fragment {
name: "mybootclasspathfragment",
image_name: "art",
}
`),
@ -40,8 +40,8 @@ func TestSnapshotWithBootImage(t *testing.T) {
checkUnversionedAndroidBpContents(`
// This is auto-generated. DO NOT EDIT.
prebuilt_boot_image {
name: "mybootimage",
prebuilt_bootclasspath_fragment {
name: "mybootclasspathfragment",
prefer: false,
visibility: ["//visibility:public"],
apex_available: ["//apex_available:platform"],
@ -51,9 +51,9 @@ prebuilt_boot_image {
checkVersionedAndroidBpContents(`
// This is auto-generated. DO NOT EDIT.
prebuilt_boot_image {
name: "mysdk_mybootimage@current",
sdk_member_name: "mybootimage",
prebuilt_bootclasspath_fragment {
name: "mysdk_mybootclasspathfragment@current",
sdk_member_name: "mybootclasspathfragment",
visibility: ["//visibility:public"],
apex_available: ["//apex_available:platform"],
image_name: "art",
@ -62,37 +62,37 @@ prebuilt_boot_image {
sdk_snapshot {
name: "mysdk@current",
visibility: ["//visibility:public"],
boot_images: ["mysdk_mybootimage@current"],
bootclasspath_fragments: ["mysdk_mybootclasspathfragment@current"],
}
`),
checkAllCopyRules(""))
}
// Test that boot_image works with sdk.
func TestBasicSdkWithBootImage(t *testing.T) {
// Test that bootclasspath_fragment works with sdk.
func TestBasicSdkWithBootclasspathFragment(t *testing.T) {
android.GroupFixturePreparers(
prepareForSdkTestWithApex,
prepareForSdkTestWithJava,
android.FixtureWithRootAndroidBp(`
sdk {
name: "mysdk",
boot_images: ["mybootimage"],
bootclasspath_fragments: ["mybootclasspathfragment"],
}
boot_image {
name: "mybootimage",
bootclasspath_fragment {
name: "mybootclasspathfragment",
image_name: "art",
apex_available: ["myapex"],
}
sdk_snapshot {
name: "mysdk@1",
boot_images: ["mybootimage_mysdk_1"],
bootclasspath_fragments: ["mybootclasspathfragment_mysdk_1"],
}
prebuilt_boot_image {
name: "mybootimage_mysdk_1",
sdk_member_name: "mybootimage",
prebuilt_bootclasspath_fragment {
name: "mybootclasspathfragment_mysdk_1",
sdk_member_name: "mybootclasspathfragment",
prefer: false,
visibility: ["//visibility:public"],
apex_available: [