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

Commit 1679192d authored by Spandan Das's avatar Spandan Das
Browse files

Skip `contents` validation of source bootclasspath fragments

... if prebuilts are selected.

This is a special case of b/361771739 where a apex starts contributing a
jar to the BCP. `disableSourceApexVariant` uses
`PrebuiltSelectionInfoProvider` and this gets populated via the
following dep chain
```
source --> prebuilt --> all_apex_contributions
```

This runs into issues if a prebuilt bootclasspath_fragment does not
exist.

This CL creates a dependency edge between the source module and
all_apex_contributions singleton module so that
`PrebuiltSelectionInfoProvider` is available for
`disableSourceApexVariant`

Bug: 361771739
Test: lunch cf_x86_64-next-userdebug
Test: m nothing with ag/28851886
Change-Id: I92d88199a27579d3c9879d40fd354653370efcce
parent c540beef
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -833,6 +833,7 @@ func TestBootclasspathFragment_HiddenAPIList(t *testing.T) {
	`)

	java.CheckModuleDependencies(t, result.TestContext, "mybootclasspathfragment", "android_common_apex10000", []string{
		"all_apex_contributions",
		"art-bootclasspath-fragment",
		"bar",
		"dex2oatd",
@@ -1003,6 +1004,7 @@ func TestBootclasspathFragment_AndroidNonUpdatable_FromSource(t *testing.T) {
	`)

	java.CheckModuleDependencies(t, result.TestContext, "mybootclasspathfragment", "android_common_apex10000", []string{
		"all_apex_contributions",
		"android-non-updatable.stubs",
		"android-non-updatable.stubs.module_lib",
		"android-non-updatable.stubs.system",
@@ -1174,6 +1176,7 @@ func TestBootclasspathFragment_AndroidNonUpdatable_FromText(t *testing.T) {
	`)

	java.CheckModuleDependencies(t, result.TestContext, "mybootclasspathfragment", "android_common_apex10000", []string{
		"all_apex_contributions",
		"android-non-updatable.stubs",
		"android-non-updatable.stubs.system",
		"android-non-updatable.stubs.test",
@@ -1326,6 +1329,7 @@ func TestBootclasspathFragment_AndroidNonUpdatable_AlwaysUsePrebuiltSdks(t *test
	`)

	java.CheckModuleDependencies(t, result.TestContext, "mybootclasspathfragment", "android_common_apex10000", []string{
		"all_apex_contributions",
		"art-bootclasspath-fragment",
		"bar",
		"dex2oatd",
+6 −0
Original line number Diff line number Diff line
@@ -463,6 +463,12 @@ func (b *BootclasspathFragmentModule) DepsMutator(ctx android.BottomUpMutatorCon
	// Add a dependency onto the dex2oat tool which is needed for creating the boot image. The
	// path is retrieved from the dependency by GetGlobalSoongConfig(ctx).
	dexpreopt.RegisterToolDeps(ctx)

	// Add a dependency to `all_apex_contributions` to determine if prebuilts are active.
	// If prebuilts are active, `contents` validation on the source bootclasspath fragment should be disabled.
	if _, isPrebuiltModule := ctx.Module().(*PrebuiltBootclasspathFragmentModule); !isPrebuiltModule {
		ctx.AddDependency(b, android.AcDepTag, "all_apex_contributions")
	}
}

func (b *BootclasspathFragmentModule) BootclasspathDepsMutator(ctx android.BottomUpMutatorContext) {