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

Commit 33ce5d6c authored by Martin Stjernholm's avatar Martin Stjernholm Committed by Gerrit Code Review
Browse files

Merge "Remove fallback code path for missing BCP fragments that is no longer necessary."

parents a66a9f1a b1e61cb8
Loading
Loading
Loading
Loading
+31 −24
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import (

	"android/soong/android"
	"android/soong/java"

	"github.com/google/blueprint"
	"github.com/google/blueprint/proptools"
)
@@ -325,31 +326,15 @@ func TestPlatformBootclasspathDependencies(t *testing.T) {
}

// TestPlatformBootclasspath_AlwaysUsePrebuiltSdks verifies that the build does not fail when
// AlwaysUsePrebuiltSdk() returns true. The structure of the modules in this test matches what
// currently exists in some places in the Android build but it is not the intended structure. It is
// in fact an invalid structure that should cause build failures. However, fixing that structure
// will take too long so in the meantime this tests the workarounds to avoid build breakages.
//
// The main issues with this structure are:
// 1. There is no prebuilt_bootclasspath_fragment referencing the "foo" java_sdk_library_import.
// 2. There is no prebuilt_apex/apex_set which makes the dex implementation jar available to the
//    prebuilt_bootclasspath_fragment and the "foo" java_sdk_library_import.
//
// Together these cause the following symptoms:
// 1. The "foo" java_sdk_library_import does not have a dex implementation jar.
// 2. The "foo" java_sdk_library_import does not have a myapex variant.
//
// TODO(b/179354495): Fix the structure in this test once the main Android build has been fixed.
// AlwaysUsePrebuiltSdk() returns true.
func TestPlatformBootclasspath_AlwaysUsePrebuiltSdks(t *testing.T) {
	result := android.GroupFixturePreparers(
		prepareForTestWithPlatformBootclasspath,
		prepareForTestWithMyapex,
		// Configure two libraries, the first is a java_sdk_library whose prebuilt will be used because
		// of AlwaysUsePrebuiltsSdk() but does not have an appropriate apex variant and does not provide
		// a boot dex jar. The second is a normal library that is unaffected. The order matters because
		// if the dependency on myapex:foo is filtered out because of either of those conditions then
		// the dependencies resolved by the platform_bootclasspath will not match the configured list
		// and so will fail the test.
		// of AlwaysUsePrebuiltsSdk(). The second is a normal library that is unaffected. The order
		// matters, so that the dependencies resolved by the platform_bootclasspath matches the
		// configured list.
		java.FixtureConfigureApexBootJars("myapex:foo", "myapex:bar"),
		java.PrepareForTestWithJavaSdkLibraryFiles,
		android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
@@ -394,6 +379,12 @@ func TestPlatformBootclasspath_AlwaysUsePrebuiltSdks(t *testing.T) {
			permitted_packages: ["foo"],
		}

		prebuilt_apex {
			name: "myapex",
			src: "myapex.apex",
			exported_bootclasspath_fragments: ["mybootclasspath-fragment"],
		}

		// A prebuilt java_sdk_library_import that is not preferred by default but will be preferred
		// because AlwaysUsePrebuiltSdks() is true.
		java_sdk_library_import {
@@ -423,6 +414,23 @@ func TestPlatformBootclasspath_AlwaysUsePrebuiltSdks(t *testing.T) {
			],
		}

		prebuilt_bootclasspath_fragment {
			name: "mybootclasspath-fragment",
			apex_available: [
				"myapex",
			],
			contents: [
				"foo",
			],
			hidden_api: {
				stub_flags: "",
				annotation_flags: "",
				metadata: "",
				index: "",
				all_flags: "",
			},
		}

		platform_bootclasspath {
			name: "myplatform-bootclasspath",
			fragments: [
@@ -437,7 +445,7 @@ func TestPlatformBootclasspath_AlwaysUsePrebuiltSdks(t *testing.T) {

	java.CheckPlatformBootclasspathModules(t, result, "myplatform-bootclasspath", []string{
		// The configured contents of BootJars.
		"platform:prebuilt_foo", // Note: This is the platform not myapex variant.
		"myapex:prebuilt_foo",
		"myapex:bar",
	})

@@ -456,16 +464,15 @@ func TestPlatformBootclasspath_AlwaysUsePrebuiltSdks(t *testing.T) {

		// The platform_bootclasspath intentionally adds dependencies on both source and prebuilt
		// modules when available as it does not know which one will be preferred.
		//
		// The source module has an APEX variant but the prebuilt does not.
		"myapex:foo",
		"platform:prebuilt_foo",
		"myapex:prebuilt_foo",

		// Only a source module exists.
		"myapex:bar",

		// The fragments.
		"myapex:mybootclasspath-fragment",
		"myapex:prebuilt_mybootclasspath-fragment",
	})
}

+0 −9
Original line number Diff line number Diff line
@@ -95,15 +95,6 @@ func addDependencyOntoApexModulePair(ctx android.BottomUpMutatorContext, apex st
	if ctx.OtherModuleDependencyVariantExists(variations, prebuiltName) {
		ctx.AddVariationDependencies(variations, tag, prebuiltName)
		addedDep = true
	} else if ctx.Config().AlwaysUsePrebuiltSdks() && len(variations) > 0 {
		// TODO(b/179354495): Remove this code path once the Android build has been fully migrated to
		//  use bootclasspath_fragment properly.
		// Some prebuilt java_sdk_library modules do not yet have an APEX variations so try and add a
		// dependency on the non-APEX variant.
		if ctx.OtherModuleDependencyVariantExists(nil, prebuiltName) {
			ctx.AddVariationDependencies(nil, tag, prebuiltName)
			addedDep = true
		}
	}

	// If no appropriate variant existing for this, so no dependency could be added, then it is an