diff options
author | 2024-03-11 21:37:25 +0000 | |
---|---|---|
committer | 2024-03-12 18:04:55 +0000 | |
commit | a747d2ec486415f80c7b0724fad62f5575d08853 (patch) | |
tree | 4d6d7d2955180e7d4479cb15d6a3d2b20e1efe80 /apex/apex_singleton.go | |
parent | b952c848417ee458682d3e3f6589cb31e221a9cb (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.go | 42 |
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) +} |