From f5e03f1c1a524a7d9e49417b846f5e2c8d4027a0 Mon Sep 17 00:00:00 2001 From: Spandan Das Date: Thu, 25 Jan 2024 19:25:42 +0000 Subject: [PATCH] Move ApexBundleInfoProvider from apex/ to android/ This provider contains information about the contents of an apex and is set during the post deps phase of top-level source and prebuilt apexes. java.dexpreoptDisabled needs to distinguish between platform and apex variants of a library to prevent creating duplicate ninja rules. It does so by looking at ApexInfoProvider. This provider gets set on the ctx of the java_library being dexpreopted. In case of prebuilts, these rules are being moved to the top-level prebuilt apexes. Move ApexInfoBundleProvider from apex to android so that java.dexpreoptDisabled can consume this provider without running into a golang circular dependency. (java.dexpreoptDisabled will use this provider in the next CL of this stack). Test: go build ./android ./apex Change-Id: I665abd9d0591eeb17b273cc822beb20690e6af09 --- android/apex.go | 7 +++++++ apex/apex.go | 14 ++++---------- apex/prebuilt.go | 2 +- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/android/apex.go b/android/apex.go index c1e7a5cd0..4d36a9396 100644 --- a/android/apex.go +++ b/android/apex.go @@ -147,6 +147,13 @@ type ApexTestForInfo struct { var ApexTestForInfoProvider = blueprint.NewMutatorProvider[ApexTestForInfo]("apex_test_for") +// ApexBundleInfo contains information about the dependencies of an apex +type ApexBundleInfo struct { + Contents *ApexContents +} + +var ApexBundleInfoProvider = blueprint.NewMutatorProvider[ApexBundleInfo]("apex_info") + // DepIsInSameApex defines an interface that should be used to determine whether a given dependency // should be considered as part of the same APEX as the current module or not. Note: this was // extracted from ApexModule to make it easier to define custom subsets of the ApexModule interface diff --git a/apex/apex.go b/apex/apex.go index 5b0def0d8..b069efd84 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -929,12 +929,6 @@ type DCLAInfo struct { var DCLAInfoProvider = blueprint.NewMutatorProvider[DCLAInfo]("apex_info") -type ApexBundleInfo struct { - Contents *android.ApexContents -} - -var ApexBundleInfoProvider = blueprint.NewMutatorProvider[ApexBundleInfo]("apex_info") - var _ ApexInfoMutator = (*apexBundle)(nil) func (a *apexBundle) ApexVariationName() string { @@ -1035,7 +1029,7 @@ func (a *apexBundle) ApexInfoMutator(mctx android.TopDownMutatorContext) { // The membership information is saved for later access apexContents := android.NewApexContents(contents) - android.SetProvider(mctx, ApexBundleInfoProvider, ApexBundleInfo{ + android.SetProvider(mctx, android.ApexBundleInfoProvider, android.ApexBundleInfo{ Contents: apexContents, }) @@ -1243,7 +1237,7 @@ func apexTestForMutator(mctx android.BottomUpMutatorContext) { if _, ok := mctx.Module().(android.ApexModule); ok { var contents []*android.ApexContents for _, testFor := range mctx.GetDirectDepsWithTag(testForTag) { - abInfo, _ := android.OtherModuleProvider(mctx, testFor, ApexBundleInfoProvider) + abInfo, _ := android.OtherModuleProvider(mctx, testFor, android.ApexBundleInfoProvider) contents = append(contents, abInfo.Contents) } android.SetProvider(mctx, android.ApexTestForInfoProvider, android.ApexTestForInfo{ @@ -2192,7 +2186,7 @@ func (a *apexBundle) depVisitor(vctx *visitorContext, ctx android.ModuleContext, af := apexFileForNativeLibrary(ctx, ch, vctx.handleSpecialLibs) af.transitiveDep = true - abInfo, _ := android.ModuleProvider(ctx, ApexBundleInfoProvider) + abInfo, _ := android.ModuleProvider(ctx, android.ApexBundleInfoProvider) if !abInfo.Contents.DirectlyInApex(depName) && (ch.IsStubs() || ch.HasStubsVariants()) { // If the dependency is a stubs lib, don't include it in this APEX, // but make sure that the lib is installed on the device. @@ -2658,7 +2652,7 @@ func (a *apexBundle) checkStaticLinkingToStubLibraries(ctx android.ModuleContext return } - abInfo, _ := android.ModuleProvider(ctx, ApexBundleInfoProvider) + abInfo, _ := android.ModuleProvider(ctx, android.ApexBundleInfoProvider) a.WalkPayloadDeps(ctx, func(ctx android.ModuleContext, from blueprint.Module, to android.ApexModule, externalDep bool) bool { if ccm, ok := to.(*cc.Module); ok { diff --git a/apex/prebuilt.go b/apex/prebuilt.go index 1ec38eb94..7dd0a98b6 100644 --- a/apex/prebuilt.go +++ b/apex/prebuilt.go @@ -438,7 +438,7 @@ func (p *prebuiltCommon) apexInfoMutator(mctx android.TopDownMutatorContext) { // Create contents for the prebuilt_apex and store it away for later use. apexContents := android.NewApexContents(contents) - android.SetProvider(mctx, ApexBundleInfoProvider, ApexBundleInfo{ + android.SetProvider(mctx, android.ApexBundleInfoProvider, android.ApexBundleInfo{ Contents: apexContents, })