From bffd7fbabae6155350766303fe27b78aa94f3de4 Mon Sep 17 00:00:00 2001 From: Spandan Das Date: Mon, 26 Feb 2024 09:39:37 +0000 Subject: [PATCH] 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 --- android/apex_contributions.go | 11 +++++++++ android/prebuilt_test.go | 42 +++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/android/apex_contributions.go b/android/apex_contributions.go index 89e27b97b..c388afff9 100644 --- a/android/apex_contributions.go +++ b/android/apex_contributions.go @@ -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()) } diff --git a/android/prebuilt_test.go b/android/prebuilt_test.go index 4a696283b..2241b0815 100644 --- a/android/prebuilt_test.go +++ b/android/prebuilt_test.go @@ -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()) +}