Special-case java_sdk_library in source vs prebuilt selection
If a java_sdk_library is listed in `contents`, then restrict the source vs prebuilt selection superseding to only the internal stub libraries. Defer the source vs prebuilt selection mechanism of the top-level library to the existing mechanisms for now. This is necessary because this top-level library acts as a hook for - hiddenapi: boot jars are deapxed from the prebuilt apex - dexpreopt: system server jars are deapexed from the prebuilt apex and installed via required If `next` uses `framework-foo` and `service-foo` as the top-level library instead of the prebuilt equivalents, then the bootjars installed in out/soong/dexpreopt_x86_64/apex_bootjars will come from source. And the *.odex files of the system server jars will come from source. Bug: 308174768 Test: Added a java_sdk_library unit test to assert that the new mechanism supersedes the `prefer` flag Change-Id: Ib43198a3b547c58b54f1f0966e95584215096d32
This commit is contained in:
@@ -510,6 +510,42 @@ func PrebuiltPostDepsMutator(ctx BottomUpMutatorContext) {
|
||||
}
|
||||
}
|
||||
|
||||
// A wrapper around PrebuiltSelectionInfoMap.IsSelected with special handling for java_sdk_library
|
||||
// java_sdk_library is a macro that creates
|
||||
// 1. top-level impl library
|
||||
// 2. stub libraries (suffixed with .stubs...)
|
||||
//
|
||||
// java_sdk_library_import is a macro that creates
|
||||
// 1. top-level "impl" library
|
||||
// 2. stub libraries (suffixed with .stubs...)
|
||||
//
|
||||
// the impl of java_sdk_library_import is a "hook" for hiddenapi and dexpreopt processing. It does not have an impl jar, but acts as a shim
|
||||
// to provide the jar deapxed from the prebuilt apex
|
||||
//
|
||||
// isSelected uses `all_apex_contributions` to supersede source vs prebuilts selection of the stub libraries. It does not supersede the
|
||||
// selection of the top-level "impl" library so that this hook can work
|
||||
//
|
||||
// TODO (b/308174306) - Fix this when we need to support multiple prebuilts in main
|
||||
func isSelected(psi PrebuiltSelectionInfoMap, m Module) bool {
|
||||
if sdkLibrary, ok := m.(interface{ SdkLibraryName() *string }); ok && sdkLibrary.SdkLibraryName() != nil {
|
||||
sln := proptools.String(sdkLibrary.SdkLibraryName())
|
||||
// This is the top-level library
|
||||
// Do not supersede the existing prebuilts vs source selection mechanisms
|
||||
if sln == m.base().BaseModuleName() {
|
||||
return false
|
||||
}
|
||||
|
||||
// Stub library created by java_sdk_library_import
|
||||
if p := GetEmbeddedPrebuilt(m); p != nil {
|
||||
return psi.IsSelected(sln, PrebuiltNameFromSource(sln))
|
||||
}
|
||||
|
||||
// Stub library created by java_sdk_library
|
||||
return psi.IsSelected(sln, sln)
|
||||
}
|
||||
return psi.IsSelected(m.base().BaseModuleName(), m.Name())
|
||||
}
|
||||
|
||||
// usePrebuilt returns true if a prebuilt should be used instead of the source module. The prebuilt
|
||||
// will be used if it is marked "prefer" or if the source module is disabled.
|
||||
func (p *Prebuilt) usePrebuilt(ctx BaseMutatorContext, source Module, prebuilt Module) bool {
|
||||
@@ -520,14 +556,16 @@ func (p *Prebuilt) usePrebuilt(ctx BaseMutatorContext, source Module, prebuilt M
|
||||
psi = ctx.OtherModuleProvider(am, PrebuiltSelectionInfoProvider).(PrebuiltSelectionInfoMap)
|
||||
}
|
||||
})
|
||||
|
||||
// If the source module is explicitly listed in the metadata module, use that
|
||||
if source != nil && psi.IsSelected(source.base().BaseModuleName(), source.Name()) {
|
||||
if source != nil && isSelected(psi, source) {
|
||||
return false
|
||||
}
|
||||
// If the prebuilt module is explicitly listed in the metadata module, use that
|
||||
if psi.IsSelected(prebuilt.base().BaseModuleName(), prebuilt.Name()) {
|
||||
if isSelected(psi, prebuilt) {
|
||||
return true
|
||||
}
|
||||
|
||||
// If the baseModuleName could not be found in the metadata module,
|
||||
// fall back to the existing source vs prebuilt selection.
|
||||
// TODO: Drop the fallback mechanisms
|
||||
|
Reference in New Issue
Block a user