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

Commit bffd7fba authored by Spandan Das's avatar Spandan Das
Browse files

Ignore prebuilt apex_contributions in coverage builds

This CL unsets the prebuilt contents of a selected apex_contribution
in coverage builds. The effect of this will be that mainline modules
will be built from source with the following in coverage builds
1. Instrumentation turned on
2. RELEASE_ACONFIG_VALUE_SETS for that release config

Test: Added a unit test
Test: lunch cf_x86_64_phone-next-userdebug && EMMA_INSTRUMENT=true m nothing (with ag/26298763)
Bug: 325666427
Change-Id: Ic4e1f0612072377261602842dfd303c064095035
parent 50bfc348
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -15,6 +15,8 @@
package android

import (
	"strings"

	"github.com/google/blueprint"
	"github.com/google/blueprint/proptools"
)
@@ -102,6 +104,15 @@ func (a *allApexContributions) SetPrebuiltSelectionInfoProvider(ctx BaseModuleCo
			if InList(content, ctx.Config().BuildIgnoreApexContributionContents()) {
				continue
			}
			// Coverage builds for TARGET_RELEASE=foo should always build from source,
			// even if TARGET_RELEASE=foo uses prebuilt mainline modules.
			// This is necessary because the checked-in prebuilts were generated with
			// instrumentation turned off.
			//
			// Skip any prebuilt contents in coverage builds
			if strings.HasPrefix(content, "prebuilt_") && (ctx.Config().JavaCoverageEnabled() || ctx.DeviceConfig().NativeCoverageEnabled()) {
				continue
			}
			if !ctx.OtherModuleExists(content) && !ctx.Config().AllowMissingDependencies() {
				ctx.ModuleErrorf("%s listed in apex_contributions %s does not exist\n", content, m.Name())
			}
+42 −0
Original line number Diff line number Diff line
@@ -762,3 +762,45 @@ func TestPrebuiltErrorCannotListBothSourceAndPrebuiltInContributions(t *testing.
		}
		`, selectMainlineModuleContritbutions)
}

// Test that apex_contributions of prebuilt modules are ignored in coverage builds
func TestSourceIsSelectedInCoverageBuilds(t *testing.T) {
	prebuiltMainlineContributions := GroupFixturePreparers(
		FixtureModifyProductVariables(func(variables FixtureProductVariables) {
			variables.BuildFlags = map[string]string{
				"RELEASE_APEX_CONTRIBUTIONS_ADSERVICES": "my_prebuilt_apex_contributions",
			}
		}),
		FixtureMergeEnv(map[string]string{
			"EMMA_INSTRUMENT_FRAMEWORK": "true",
		}),
	)
	bp := `
		source {
			name: "foo",
		}
		prebuilt {
			name: "foo",
			srcs: ["prebuilt_file"],
		}
		apex_contributions {
			name: "my_prebuilt_apex_contributions",
			api_domain: "my_mainline_module",
			contents: [
			  "prebuilt_foo",
			],
		}
		all_apex_contributions {
			name: "all_apex_contributions",
		}
		`
	ctx := GroupFixturePreparers(
		PrepareForTestWithArchMutator,
		PrepareForTestWithPrebuilts,
		FixtureRegisterWithContext(registerTestPrebuiltModules),
		prebuiltMainlineContributions).RunTestWithBp(t, bp)
	source := ctx.ModuleForTests("foo", "android_common").Module()
	AssertBoolEquals(t, "Source should be preferred in coverage builds", true, !source.IsHideFromMake())
	prebuilt := ctx.ModuleForTests("prebuilt_foo", "android_common").Module()
	AssertBoolEquals(t, "Prebuilt should not be preferred in coverage builds", false, !prebuilt.IsHideFromMake())
}