diff options
author | Artur Satayev <satayev@google.com> | 2020-04-27 19:05:28 +0100 |
---|---|---|
committer | Artur Satayev <satayev@google.com> | 2020-05-11 18:03:07 +0100 |
commit | d9b503aa8562ae85ecab7dc855d1afa34af6cd5b (patch) | |
tree | 362f5d81e210b502db16d69e1f305bbec40430e4 /java/app.go | |
parent | b476a1eb50b5d9fdb2676db2728d20fa1faf26c0 (diff) | |
download | build_soong-d9b503aa8562ae85ecab7dc855d1afa34af6cd5b.tar.gz build_soong-d9b503aa8562ae85ecab7dc855d1afa34af6cd5b.tar.bz2 build_soong-d9b503aa8562ae85ecab7dc855d1afa34af6cd5b.zip |
Introduce app -deps-info.
Similar to APEX-deps-info, app deps info produces two lists with
transitive dependencies.
Bug: 149622332
Test: m NetworkStack-deps-info
Change-Id: Ic6d94df3b7b4be5afe328a0abe768beee1a58362
Merged-In: Ic6d94df3b7b4be5afe328a0abe768beee1a58362
Exempt-From-Owner-Approval: cp from aosp
(cherry picked from commit 1111b84822fb4958a5332bfb5ce53e82880bea6f)
Diffstat (limited to 'java/app.go')
-rwxr-xr-x | java/app.go | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/java/app.go b/java/app.go index d9f97696..156deb8f 100755 --- a/java/app.go +++ b/java/app.go @@ -178,6 +178,8 @@ type AndroidApp struct { noticeOutputs android.NoticeOutputs overriddenManifestPackageName string + + android.ApexBundleDepsInfo } func (a *AndroidApp) IsInstallable() bool { @@ -633,6 +635,8 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) { ctx.InstallFile(a.installDir, extra.Base(), extra) } } + + a.buildAppDependencyInfo(ctx) } func collectAppDeps(ctx android.ModuleContext, shouldCollectRecursiveNativeDeps bool, @@ -701,6 +705,49 @@ func collectAppDeps(ctx android.ModuleContext, shouldCollectRecursiveNativeDeps return jniLibs, certificates } +func (a *AndroidApp) walkPayloadDeps(ctx android.ModuleContext, + do func(ctx android.ModuleContext, from blueprint.Module, to android.ApexModule, externalDep bool)) { + + ctx.WalkDeps(func(child, parent android.Module) bool { + isExternal := !a.DepIsInSameApex(ctx, child) + if am, ok := child.(android.ApexModule); ok { + do(ctx, parent, am, isExternal) + } + return !isExternal + }) +} + +func (a *AndroidApp) buildAppDependencyInfo(ctx android.ModuleContext) { + if ctx.Host() { + return + } + + depsInfo := android.DepNameToDepInfoMap{} + a.walkPayloadDeps(ctx, func(ctx android.ModuleContext, from blueprint.Module, to android.ApexModule, externalDep bool) { + depName := to.Name() + if info, exist := depsInfo[depName]; exist { + info.From = append(info.From, from.Name()) + info.IsExternal = info.IsExternal && externalDep + depsInfo[depName] = info + } else { + toMinSdkVersion := "(no version)" + if m, ok := to.(interface{ MinSdkVersion() string }); ok { + if v := m.MinSdkVersion(); v != "" { + toMinSdkVersion = v + } + } + depsInfo[depName] = android.ApexModuleDepInfo{ + To: depName, + From: []string{from.Name()}, + IsExternal: externalDep, + MinSdkVersion: toMinSdkVersion, + } + } + }) + + a.ApexBundleDepsInfo.BuildDepsInfoLists(ctx, a.MinSdkVersion(), depsInfo) +} + func (a *AndroidApp) getCertString(ctx android.BaseModuleContext) string { certificate, overridden := ctx.DeviceConfig().OverrideCertificateFor(ctx.ModuleName()) if overridden { |