Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3490dfd2 authored by Spandan Das's avatar Spandan Das
Browse files

Generate info about the selected app variant in platform builds

This is a followup to aosp/2999198 and adds information about apps.

Each app will have an entry in this file with the following properties
- Name, mandatory
- Is_prebuilt, mandatory
- Prebuilt_info_file_path, optional

Implementation details
- Move prebuiltInfoProvider out of build/soong/apex to
  build/soong/android. This allows build/soong/java to use it.
- Introduce a new `prebuilt_info` prop to `android_app_set` and
  `android_app_import`
- All app module types will set a prebuiltInfoProvider in
  GenerateAndroidBuildActions, including the source app module types

Test: m nothing --no-skip-soong-tests
Test: m out/soong/prebuilt_info.json
Test: ls -l out/soong/prebuilt_info.json --human-readable
-rw------- 1 spandandas primarygroup 317K Mar 11 23:46 out/soong/prebuilt_info.json

Test: #modified trunk_staging.locally to select prebuilts of some
mainline apps. Spot-checked that `is_prebuilt` and
`prebuilt_info_file_path` get populated appropriately

Bug: 327480225
Change-Id: I5078e0ec26c9568194550909962b90111a5223f7
parent ee379145
Loading
Loading
Loading
Loading
+15 −0
Original line number Original line Diff line number Diff line
@@ -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"`
}
+2 −17
Original line number Original line Diff line number Diff line
@@ -2428,29 +2428,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
+2 −2
Original line number Original line Diff line number Diff line
@@ -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() {
+3 −3
Original line number Original line Diff line number Diff line
@@ -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) {
+7 −0
Original line number Original line Diff line number Diff line
@@ -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 {
Loading