Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7cbdf81e authored by Paul Duffin's avatar Paul Duffin Committed by Gerrit Code Review
Browse files

Merge changes I67589bcc,Ibcfae390

* changes:
  Replace boot image with bootclasspath fragment in sdk package
  bootclasspath_fragment must only depend on source contents
parents 24eac476 0b28a8d3
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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:
+16 −0
Original line number Diff line number Diff line
@@ -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",
+32 −8
Original line number Diff line number Diff line
@@ -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
+1 −1
Original line number Diff line number Diff line
@@ -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",
+19 −19
Original line number Diff line number Diff line
@@ -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: [