Merge "Generate info about the selected app variant in platform builds" into main
This commit is contained in:
@@ -976,3 +976,18 @@ type ApexExportsInfo struct {
|
|||||||
// Map from the apex library name (without prebuilt_ prefix) to the dex file path on host
|
// Map from the apex library name (without prebuilt_ prefix) to the dex file path on host
|
||||||
LibraryNameToDexJarPathOnHost map[string]Path
|
LibraryNameToDexJarPathOnHost map[string]Path
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var PrebuiltInfoProvider = blueprint.NewProvider[PrebuiltInfo]()
|
||||||
|
|
||||||
|
// contents of prebuilt_info.json
|
||||||
|
type PrebuiltInfo struct {
|
||||||
|
// Name of the apex, without the prebuilt_ prefix
|
||||||
|
Name string
|
||||||
|
|
||||||
|
Is_prebuilt bool
|
||||||
|
|
||||||
|
// This is relative to root of the workspace.
|
||||||
|
// In case of mainline modules, this file contains the build_id that was used
|
||||||
|
// to generate the mainline module prebuilt.
|
||||||
|
Prebuilt_info_file_path string `json:",omitempty"`
|
||||||
|
}
|
||||||
|
19
apex/apex.go
19
apex/apex.go
@@ -2434,29 +2434,14 @@ func (a *apexBundle) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
|||||||
a.providePrebuiltInfo(ctx)
|
a.providePrebuiltInfo(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
var prebuiltInfoProvider = blueprint.NewProvider[prebuiltInfo]()
|
|
||||||
|
|
||||||
// contents of prebuilt_info.json
|
|
||||||
type prebuiltInfo struct {
|
|
||||||
// Name of the apex, without the prebuilt_ prefix
|
|
||||||
Name string
|
|
||||||
|
|
||||||
Is_prebuilt bool
|
|
||||||
|
|
||||||
// This is relative to root of the workspace.
|
|
||||||
// In case of mainline modules, this file contains the build_id that was used
|
|
||||||
// to generate the mainline module prebuilt.
|
|
||||||
Prebuilt_info_file_path string `json:",omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set prebuiltInfoProvider. This will be used by `apex_prebuiltinfo_singleton` to print out a metadata file
|
// Set prebuiltInfoProvider. This will be used by `apex_prebuiltinfo_singleton` to print out a metadata file
|
||||||
// with information about whether source or prebuilt of an apex was used during the build.
|
// with information about whether source or prebuilt of an apex was used during the build.
|
||||||
func (a *apexBundle) providePrebuiltInfo(ctx android.ModuleContext) {
|
func (a *apexBundle) providePrebuiltInfo(ctx android.ModuleContext) {
|
||||||
info := prebuiltInfo{
|
info := android.PrebuiltInfo{
|
||||||
Name: a.Name(),
|
Name: a.Name(),
|
||||||
Is_prebuilt: false,
|
Is_prebuilt: false,
|
||||||
}
|
}
|
||||||
android.SetProvider(ctx, prebuiltInfoProvider, info)
|
android.SetProvider(ctx, android.PrebuiltInfoProvider, info)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set a provider containing information about the jars and .prof provided by the apex
|
// Set a provider containing information about the jars and .prof provided by the apex
|
||||||
|
@@ -149,10 +149,10 @@ type apexPrebuiltInfo struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *apexPrebuiltInfo) GenerateBuildActions(ctx android.SingletonContext) {
|
func (a *apexPrebuiltInfo) GenerateBuildActions(ctx android.SingletonContext) {
|
||||||
prebuiltInfos := []prebuiltInfo{}
|
prebuiltInfos := []android.PrebuiltInfo{}
|
||||||
|
|
||||||
ctx.VisitAllModules(func(m android.Module) {
|
ctx.VisitAllModules(func(m android.Module) {
|
||||||
prebuiltInfo, exists := android.SingletonModuleProvider(ctx, m, prebuiltInfoProvider)
|
prebuiltInfo, exists := android.SingletonModuleProvider(ctx, m, android.PrebuiltInfoProvider)
|
||||||
// Use prebuiltInfoProvider to filter out non apex soong modules.
|
// Use prebuiltInfoProvider to filter out non apex soong modules.
|
||||||
// Use HideFromMake to filter out the unselected variants of a specific apex.
|
// Use HideFromMake to filter out the unselected variants of a specific apex.
|
||||||
if exists && !m.IsHideFromMake() {
|
if exists && !m.IsHideFromMake() {
|
||||||
|
@@ -827,15 +827,15 @@ func (p *prebuiltCommon) provideApexExportsInfo(ctx android.ModuleContext) {
|
|||||||
// Set prebuiltInfoProvider. This will be used by `apex_prebuiltinfo_singleton` to print out a metadata file
|
// Set prebuiltInfoProvider. This will be used by `apex_prebuiltinfo_singleton` to print out a metadata file
|
||||||
// with information about whether source or prebuilt of an apex was used during the build.
|
// with information about whether source or prebuilt of an apex was used during the build.
|
||||||
func (p *prebuiltCommon) providePrebuiltInfo(ctx android.ModuleContext) {
|
func (p *prebuiltCommon) providePrebuiltInfo(ctx android.ModuleContext) {
|
||||||
info := prebuiltInfo{
|
info := android.PrebuiltInfo{
|
||||||
Name: p.BaseModuleName(), // BaseModuleName ensures that this will not contain the prebuilt_ prefix.
|
Name: p.BaseModuleName(),
|
||||||
Is_prebuilt: true,
|
Is_prebuilt: true,
|
||||||
}
|
}
|
||||||
// If Prebuilt_info information is available in the soong module definition, add it to prebuilt_info.json.
|
// If Prebuilt_info information is available in the soong module definition, add it to prebuilt_info.json.
|
||||||
if p.prebuiltCommonProperties.Prebuilt_info != nil {
|
if p.prebuiltCommonProperties.Prebuilt_info != nil {
|
||||||
info.Prebuilt_info_file_path = android.PathForModuleSrc(ctx, *p.prebuiltCommonProperties.Prebuilt_info).String()
|
info.Prebuilt_info_file_path = android.PathForModuleSrc(ctx, *p.prebuiltCommonProperties.Prebuilt_info).String()
|
||||||
}
|
}
|
||||||
android.SetProvider(ctx, prebuiltInfoProvider, info)
|
android.SetProvider(ctx, android.PrebuiltInfoProvider, info)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Prebuilt) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
func (p *Prebuilt) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||||
|
@@ -912,6 +912,13 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
a.buildAppDependencyInfo(ctx)
|
a.buildAppDependencyInfo(ctx)
|
||||||
|
|
||||||
|
providePrebuiltInfo(ctx,
|
||||||
|
prebuiltInfoProps{
|
||||||
|
baseModuleName: a.BaseModuleName(),
|
||||||
|
isPrebuilt: false,
|
||||||
|
},
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
type appDepsInterface interface {
|
type appDepsInterface interface {
|
||||||
|
@@ -150,6 +150,11 @@ type AndroidAppImportProperties struct {
|
|||||||
// If unspecified, follows the naming convention that the source module of
|
// If unspecified, follows the naming convention that the source module of
|
||||||
// the prebuilt is Name() without "prebuilt_" prefix
|
// the prebuilt is Name() without "prebuilt_" prefix
|
||||||
Source_module_name *string
|
Source_module_name *string
|
||||||
|
|
||||||
|
// Path to the .prebuilt_info file of the prebuilt app.
|
||||||
|
// In case of mainline modules, the .prebuilt_info file contains the build_id that was used
|
||||||
|
// to generate the prebuilt.
|
||||||
|
Prebuilt_info *string `android:"path"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *AndroidAppImport) IsInstallable() bool {
|
func (a *AndroidAppImport) IsInstallable() bool {
|
||||||
@@ -413,6 +418,14 @@ func (a *AndroidAppImport) generateAndroidBuildActions(ctx android.ModuleContext
|
|||||||
}
|
}
|
||||||
android.CollectDependencyAconfigFiles(ctx, &a.mergedAconfigFiles)
|
android.CollectDependencyAconfigFiles(ctx, &a.mergedAconfigFiles)
|
||||||
|
|
||||||
|
providePrebuiltInfo(ctx,
|
||||||
|
prebuiltInfoProps{
|
||||||
|
baseModuleName: a.BaseModuleName(),
|
||||||
|
isPrebuilt: true,
|
||||||
|
prebuiltInfo: a.properties.Prebuilt_info,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
// TODO: androidmk converter jni libs
|
// TODO: androidmk converter jni libs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -48,6 +48,11 @@ type AndroidAppSetProperties struct {
|
|||||||
// Names of modules to be overridden. Listed modules can only be other apps
|
// Names of modules to be overridden. Listed modules can only be other apps
|
||||||
// (in Make or Soong).
|
// (in Make or Soong).
|
||||||
Overrides []string
|
Overrides []string
|
||||||
|
|
||||||
|
// Path to the .prebuilt_info file of the prebuilt app.
|
||||||
|
// In case of mainline modules, the .prebuilt_info file contains the build_id that was used
|
||||||
|
// to generate the prebuilt.
|
||||||
|
Prebuilt_info *string `android:"path"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type AndroidAppSet struct {
|
type AndroidAppSet struct {
|
||||||
@@ -117,6 +122,27 @@ func SupportedAbis(ctx android.ModuleContext, excludeNativeBridgeAbis bool) []st
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type prebuiltInfoProps struct {
|
||||||
|
baseModuleName string
|
||||||
|
isPrebuilt bool
|
||||||
|
prebuiltInfo *string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set prebuiltInfoProvider. This will be used by `apex_prebuiltinfo_singleton` to print out a metadata file
|
||||||
|
// with information about whether source or prebuilt of an apex was used during the build.
|
||||||
|
func providePrebuiltInfo(ctx android.ModuleContext, p prebuiltInfoProps) {
|
||||||
|
info := android.PrebuiltInfo{
|
||||||
|
Name: p.baseModuleName,
|
||||||
|
Is_prebuilt: p.isPrebuilt,
|
||||||
|
}
|
||||||
|
// If Prebuilt_info information is available in the soong module definition, add it to prebuilt_info.json.
|
||||||
|
if p.prebuiltInfo != nil {
|
||||||
|
prebuiltInfoFile := android.PathForModuleSrc(ctx, *p.prebuiltInfo)
|
||||||
|
info.Prebuilt_info_file_path = prebuiltInfoFile.String()
|
||||||
|
}
|
||||||
|
android.SetProvider(ctx, android.PrebuiltInfoProvider, info)
|
||||||
|
}
|
||||||
|
|
||||||
func (as *AndroidAppSet) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
func (as *AndroidAppSet) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||||
as.packedOutput = android.PathForModuleOut(ctx, ctx.ModuleName()+".zip")
|
as.packedOutput = android.PathForModuleOut(ctx, ctx.ModuleName()+".zip")
|
||||||
as.primaryOutput = android.PathForModuleOut(ctx, as.BaseModuleName()+".apk")
|
as.primaryOutput = android.PathForModuleOut(ctx, as.BaseModuleName()+".apk")
|
||||||
@@ -157,6 +183,15 @@ func (as *AndroidAppSet) GenerateAndroidBuildActions(ctx android.ModuleContext)
|
|||||||
installDir = android.PathForModuleInstall(ctx, "app", as.BaseModuleName())
|
installDir = android.PathForModuleInstall(ctx, "app", as.BaseModuleName())
|
||||||
}
|
}
|
||||||
ctx.InstallFileWithExtraFilesZip(installDir, as.BaseModuleName()+".apk", as.primaryOutput, as.packedOutput)
|
ctx.InstallFileWithExtraFilesZip(installDir, as.BaseModuleName()+".apk", as.primaryOutput, as.packedOutput)
|
||||||
|
|
||||||
|
providePrebuiltInfo(ctx,
|
||||||
|
prebuiltInfoProps{
|
||||||
|
baseModuleName: as.BaseModuleName(),
|
||||||
|
isPrebuilt: true,
|
||||||
|
prebuiltInfo: as.properties.Prebuilt_info,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (as *AndroidAppSet) InstallBypassMake() bool { return true }
|
func (as *AndroidAppSet) InstallBypassMake() bool { return true }
|
||||||
|
Reference in New Issue
Block a user