Disable source javalib dexpreopt when using prebuilt apex
The apex_contributions in next builds use prebuilt apexes with source java_sdk_library for javac. The dexpreopt rules of the source java_sdk_library are disabled via RELEASE_DEFAULT_MODULE_BUILD_FROM_SOURCE coupled with some complicated special-casing in android/prebuilt.go This special-casing breaks if we want to use prebuilts of some modules, and sources of other modules. To enable per mainline module toggelability, explicitly disable dexpreopt of source variant of java_sdk_library if we use prebuilt of the containing apex. Test: In internal, updated trunk_staging.scl's RELEASE_APEX_CONTRIBUTIONS_ADSERVICES to use prebuilt followed by m nothing Change-Id: I32daefbd38338b396d6f07b899826b2869d8f8e1
This commit is contained in:
parent
5354483c12
commit
a8afdcb307
1 changed files with 31 additions and 0 deletions
|
@ -187,6 +187,33 @@ func forPrebuiltApex(ctx android.BaseModuleContext) bool {
|
|||
return apexInfo.ForPrebuiltApex
|
||||
}
|
||||
|
||||
// For apex variant of modules, this returns true on the source variant if the prebuilt apex
|
||||
// has been selected using apex_contributions.
|
||||
// The prebuilt apex will be responsible for generating the dexpreopt rules of the deapexed java lib.
|
||||
func disableSourceApexVariant(ctx android.BaseModuleContext) bool {
|
||||
if !isApexVariant(ctx) {
|
||||
return false // platform variant
|
||||
}
|
||||
apexInfo, _ := android.ModuleProvider(ctx, android.ApexInfoProvider)
|
||||
psi := android.PrebuiltSelectionInfoMap{}
|
||||
ctx.VisitDirectDepsWithTag(android.PrebuiltDepTag, func(am android.Module) {
|
||||
psi, _ = android.OtherModuleProvider(ctx, am, android.PrebuiltSelectionInfoProvider)
|
||||
})
|
||||
// Find the apex variant for this module
|
||||
_, apexVariantsWithoutTestApexes, _ := android.ListSetDifference(apexInfo.InApexVariants, apexInfo.TestApexes)
|
||||
disableSource := false
|
||||
// find the selected apexes
|
||||
for _, apexVariant := range apexVariantsWithoutTestApexes {
|
||||
for _, selected := range psi.GetSelectedModulesForApiDomain(apexVariant) {
|
||||
// If the apex_contribution for this api domain contains a prebuilt apex, disable the source variant
|
||||
if strings.HasPrefix(selected, "prebuilt_com.google.android") {
|
||||
disableSource = true
|
||||
}
|
||||
}
|
||||
}
|
||||
return disableSource
|
||||
}
|
||||
|
||||
// Returns whether dexpreopt is applicable to the module.
|
||||
// When it returns true, neither profile nor dexpreopt artifacts will be generated.
|
||||
func (d *dexpreopter) dexpreoptDisabled(ctx android.BaseModuleContext, libName string) bool {
|
||||
|
@ -216,6 +243,10 @@ func (d *dexpreopter) dexpreoptDisabled(ctx android.BaseModuleContext, libName s
|
|||
return true
|
||||
}
|
||||
|
||||
if disableSourceApexVariant(ctx) {
|
||||
return true
|
||||
}
|
||||
|
||||
if _, isApex := android.ModuleProvider(ctx, android.ApexBundleInfoProvider); isApex {
|
||||
// dexpreopt rules for system server jars can be generated in the ModuleCtx of prebuilt apexes
|
||||
return false
|
||||
|
|
Loading…
Reference in a new issue