summaryrefslogtreecommitdiff
path: root/apex/apex_singleton.go
diff options
context:
space:
mode:
author Spandan Das <spandandas@google.com> 2024-03-11 21:37:25 +0000
committer Spandan Das <spandandas@google.com> 2024-03-12 18:04:55 +0000
commita747d2ec486415f80c7b0724fad62f5575d08853 (patch)
tree4d6d7d2955180e7d4479cb15d6a3d2b20e1efe80 /apex/apex_singleton.go
parentb952c848417ee458682d3e3f6589cb31e221a9cb (diff)
Generate info about the selected apex variant in platform builds
out/soong/prebuilt_info.json will contain information about whether source or prebuilt of an apex was used. If prebuilt is used, it will print the path to its prebuilt_info file. This file will be used to pick a matching set of MTS test prebuilts. Each apex will have an entry in this file with the following properties - Name, mandatory - Is_prebuilt, mandatory - Prebuilt_info_file_path, optional Implementation details - Introduce a new `prebuilt_info` prop to `apex_set` and `prebuilt_apex` - All apex module types will set a prebuiltInfoProvider in GenerateAndroidBuildActions, including the source apex module types - Create a `apex_prebuiltinfo_singleton` that visits all apex modules. It uses `IsHideFromMake` to filter out the unselected variants of a specific apex. This new singleton will create prebuilt_info.json - Dist prebuilt_info.json for droidcore 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 25K Mar 11 23:46 out/soong/prebuilt_info.json Test: #modified trunk_staging.locally to select prebuilts of some mainline modules. Spot-checked that `is_prebuilt` and `prebuilt_info_file_path` get populated appropriately Bug: 327480225 Change-Id: I65c73010142b034ad1d2b3d05ef493be034e8d74
Diffstat (limited to 'apex/apex_singleton.go')
-rw-r--r--apex/apex_singleton.go42
1 files changed, 42 insertions, 0 deletions
diff --git a/apex/apex_singleton.go b/apex/apex_singleton.go
index 25c0cc444..8aaddbe25 100644
--- a/apex/apex_singleton.go
+++ b/apex/apex_singleton.go
@@ -17,6 +17,8 @@
package apex
import (
+ "encoding/json"
+
"github.com/google/blueprint"
"android/soong/android"
@@ -129,3 +131,43 @@ func (s *apexDepsInfoSingleton) MakeVars(ctx android.MakeVarsContext) {
// Export check result to Make. The path is added to droidcore.
ctx.Strict("APEX_ALLOWED_DEPS_CHECK", s.allowedApexDepsInfoCheckResult.String())
}
+
+func init() {
+ registerApexPrebuiltInfoComponents(android.InitRegistrationContext)
+}
+
+func registerApexPrebuiltInfoComponents(ctx android.RegistrationContext) {
+ ctx.RegisterParallelSingletonType("apex_prebuiltinfo_singleton", apexPrebuiltInfoFactory)
+}
+
+func apexPrebuiltInfoFactory() android.Singleton {
+ return &apexPrebuiltInfo{}
+}
+
+type apexPrebuiltInfo struct {
+ out android.WritablePath
+}
+
+func (a *apexPrebuiltInfo) GenerateBuildActions(ctx android.SingletonContext) {
+ prebuiltInfos := []prebuiltInfo{}
+
+ ctx.VisitAllModules(func(m android.Module) {
+ prebuiltInfo, exists := android.SingletonModuleProvider(ctx, m, prebuiltInfoProvider)
+ // Use prebuiltInfoProvider to filter out non apex soong modules.
+ // Use HideFromMake to filter out the unselected variants of a specific apex.
+ if exists && !m.IsHideFromMake() {
+ prebuiltInfos = append(prebuiltInfos, prebuiltInfo)
+ }
+ })
+
+ j, err := json.Marshal(prebuiltInfos)
+ if err != nil {
+ ctx.Errorf("Could not convert prebuilt info of apexes to json due to error: %v", err)
+ }
+ a.out = android.PathForOutput(ctx, "prebuilt_info.json")
+ android.WriteFileRule(ctx, a.out, string(j))
+}
+
+func (a *apexPrebuiltInfo) MakeVars(ctx android.MakeVarsContext) {
+ ctx.DistForGoal("droidcore", a.out)
+}