Merge changes Ie6568cb8,Ibd521c96 am: 292e7c0721

Change-Id: Id5f6fc01db73bc8a64db98a8bef5c8edc7813568
This commit is contained in:
satayev
2020-05-05 13:00:26 +00:00
committed by Automerger Merge Worker
5 changed files with 88 additions and 21 deletions

View File

@@ -413,34 +413,57 @@ type ApexModuleDepInfo struct {
From []string From []string
// Whether the dependency belongs to the final compiled APEX. // Whether the dependency belongs to the final compiled APEX.
IsExternal bool IsExternal bool
// min_sdk_version of the ApexModule
MinSdkVersion string
} }
// A map of a dependency name to its ApexModuleDepInfo // A map of a dependency name to its ApexModuleDepInfo
type DepNameToDepInfoMap map[string]ApexModuleDepInfo type DepNameToDepInfoMap map[string]ApexModuleDepInfo
type ApexBundleDepsInfo struct { type ApexBundleDepsInfo struct {
fullListPath OutputPath minSdkVersion string
flatListPath OutputPath
fullListPath OutputPath
} }
type ApexDepsInfoIntf interface { type ApexDepsInfoIntf interface {
MinSdkVersion() string
FlatListPath() Path
FullListPath() Path FullListPath() Path
} }
func (d *ApexBundleDepsInfo) MinSdkVersion() string {
return d.minSdkVersion
}
func (d *ApexBundleDepsInfo) FlatListPath() Path {
return d.flatListPath
}
func (d *ApexBundleDepsInfo) FullListPath() Path { func (d *ApexBundleDepsInfo) FullListPath() Path {
return d.fullListPath return d.fullListPath
} }
var _ ApexDepsInfoIntf = (*ApexBundleDepsInfo)(nil) var _ ApexDepsInfoIntf = (*ApexBundleDepsInfo)(nil)
func (d *ApexBundleDepsInfo) BuildDepsInfoLists(ctx ModuleContext, depInfos DepNameToDepInfoMap) { // Generate two module out files:
var content strings.Builder // 1. FullList with transitive deps and their parents in the dep graph
// 2. FlatList with a flat list of transitive deps
func (d *ApexBundleDepsInfo) BuildDepsInfoLists(ctx ModuleContext, minSdkVersion string, depInfos DepNameToDepInfoMap) {
d.minSdkVersion = minSdkVersion
var fullContent strings.Builder
var flatContent strings.Builder
fmt.Fprintf(&flatContent, "%s(minSdkVersion:%s):\\n", ctx.ModuleName(), minSdkVersion)
for _, key := range FirstUniqueStrings(SortedStringKeys(depInfos)) { for _, key := range FirstUniqueStrings(SortedStringKeys(depInfos)) {
info := depInfos[key] info := depInfos[key]
toName := info.To toName := fmt.Sprintf("%s(minSdkVersion:%s)", info.To, info.MinSdkVersion)
if info.IsExternal { if info.IsExternal {
toName = toName + " (external)" toName = toName + " (external)"
} }
fmt.Fprintf(&content, "%s <- %s\\n", toName, strings.Join(SortedUniqueStrings(info.From), ", ")) fmt.Fprintf(&fullContent, "%s <- %s\\n", toName, strings.Join(SortedUniqueStrings(info.From), ", "))
fmt.Fprintf(&flatContent, " %s\\n", toName)
} }
d.fullListPath = PathForModuleOut(ctx, "depsinfo", "fulllist.txt").OutputPath d.fullListPath = PathForModuleOut(ctx, "depsinfo", "fulllist.txt").OutputPath
@@ -449,7 +472,17 @@ func (d *ApexBundleDepsInfo) BuildDepsInfoLists(ctx ModuleContext, depInfos DepN
Description: "Full Dependency Info", Description: "Full Dependency Info",
Output: d.fullListPath, Output: d.fullListPath,
Args: map[string]string{ Args: map[string]string{
"content": content.String(), "content": fullContent.String(),
},
})
d.flatListPath = PathForModuleOut(ctx, "depsinfo", "flatlist.txt").OutputPath
ctx.Build(pctx, BuildParams{
Rule: WriteFile,
Description: "Flat Dependency Info",
Output: d.flatListPath,
Args: map[string]string{
"content": flatContent.String(),
}, },
}) })
} }

View File

@@ -504,12 +504,19 @@ func TestBasicApex(t *testing.T) {
ensureListContains(t, noticeInputs, "custom_notice") ensureListContains(t, noticeInputs, "custom_notice")
ensureListContains(t, noticeInputs, "custom_notice_for_static_lib") ensureListContains(t, noticeInputs, "custom_notice_for_static_lib")
depsInfo := strings.Split(ctx.ModuleForTests("myapex", "android_common_myapex_image").Output("depsinfo/fulllist.txt").Args["content"], "\\n") fullDepsInfo := strings.Split(ctx.ModuleForTests("myapex", "android_common_myapex_image").Output("depsinfo/fulllist.txt").Args["content"], "\\n")
ensureListContains(t, depsInfo, "myjar <- myapex") ensureListContains(t, fullDepsInfo, "myjar(minSdkVersion:(no version)) <- myapex")
ensureListContains(t, depsInfo, "mylib <- myapex") ensureListContains(t, fullDepsInfo, "mylib(minSdkVersion:(no version)) <- myapex")
ensureListContains(t, depsInfo, "mylib2 <- mylib") ensureListContains(t, fullDepsInfo, "mylib2(minSdkVersion:(no version)) <- mylib")
ensureListContains(t, depsInfo, "myotherjar <- myjar") ensureListContains(t, fullDepsInfo, "myotherjar(minSdkVersion:(no version)) <- myjar")
ensureListContains(t, depsInfo, "mysharedjar (external) <- myjar") ensureListContains(t, fullDepsInfo, "mysharedjar(minSdkVersion:(no version)) (external) <- myjar")
flatDepsInfo := strings.Split(ctx.ModuleForTests("myapex", "android_common_myapex_image").Output("depsinfo/flatlist.txt").Args["content"], "\\n")
ensureListContains(t, flatDepsInfo, " myjar(minSdkVersion:(no version))")
ensureListContains(t, flatDepsInfo, " mylib(minSdkVersion:(no version))")
ensureListContains(t, flatDepsInfo, " mylib2(minSdkVersion:(no version))")
ensureListContains(t, flatDepsInfo, " myotherjar(minSdkVersion:(no version))")
ensureListContains(t, flatDepsInfo, " mysharedjar(minSdkVersion:(no version)) (external)")
} }
func TestDefaults(t *testing.T) { func TestDefaults(t *testing.T) {
@@ -818,11 +825,15 @@ func TestApexWithExplicitStubsDependency(t *testing.T) {
// Ensure that libfoo stubs is not linking to libbar (since it is a stubs) // Ensure that libfoo stubs is not linking to libbar (since it is a stubs)
ensureNotContains(t, libFooStubsLdFlags, "libbar.so") ensureNotContains(t, libFooStubsLdFlags, "libbar.so")
depsInfo := strings.Split(ctx.ModuleForTests("myapex2", "android_common_myapex2_image").Output("depsinfo/fulllist.txt").Args["content"], "\\n") fullDepsInfo := strings.Split(ctx.ModuleForTests("myapex2", "android_common_myapex2_image").Output("depsinfo/fulllist.txt").Args["content"], "\\n")
ensureListContains(t, fullDepsInfo, "mylib(minSdkVersion:(no version)) <- myapex2")
ensureListContains(t, fullDepsInfo, "libbaz(minSdkVersion:(no version)) <- mylib")
ensureListContains(t, fullDepsInfo, "libfoo(minSdkVersion:(no version)) (external) <- mylib")
ensureListContains(t, depsInfo, "mylib <- myapex2") flatDepsInfo := strings.Split(ctx.ModuleForTests("myapex2", "android_common_myapex2_image").Output("depsinfo/flatlist.txt").Args["content"], "\\n")
ensureListContains(t, depsInfo, "libbaz <- mylib") ensureListContains(t, flatDepsInfo, " mylib(minSdkVersion:(no version))")
ensureListContains(t, depsInfo, "libfoo (external) <- mylib") ensureListContains(t, flatDepsInfo, " libbaz(minSdkVersion:(no version))")
ensureListContains(t, flatDepsInfo, " libfoo(minSdkVersion:(no version)) (external)")
} }
func TestApexWithRuntimeLibsDependency(t *testing.T) { func TestApexWithRuntimeLibsDependency(t *testing.T) {

View File

@@ -703,10 +703,18 @@ func (a *apexBundle) buildApexDependencyInfo(ctx android.ModuleContext) {
info.IsExternal = info.IsExternal && externalDep info.IsExternal = info.IsExternal && externalDep
depInfos[to.Name()] = info depInfos[to.Name()] = info
} else { } else {
toMinSdkVersion := "(no version)"
if m, ok := to.(interface{ MinSdkVersion() string }); ok {
if v := m.MinSdkVersion(); v != "" {
toMinSdkVersion = v
}
}
depInfos[to.Name()] = android.ApexModuleDepInfo{ depInfos[to.Name()] = android.ApexModuleDepInfo{
To: to.Name(), To: to.Name(),
From: []string{from.Name()}, From: []string{from.Name()},
IsExternal: externalDep, IsExternal: externalDep,
MinSdkVersion: toMinSdkVersion,
} }
} }
@@ -714,11 +722,14 @@ func (a *apexBundle) buildApexDependencyInfo(ctx android.ModuleContext) {
return !externalDep return !externalDep
}) })
a.ApexBundleDepsInfo.BuildDepsInfoLists(ctx, depInfos) a.ApexBundleDepsInfo.BuildDepsInfoLists(ctx, proptools.String(a.properties.Min_sdk_version), depInfos)
ctx.Build(pctx, android.BuildParams{ ctx.Build(pctx, android.BuildParams{
Rule: android.Phony, Rule: android.Phony,
Output: android.PathForPhony(ctx, a.Name()+"-deps-info"), Output: android.PathForPhony(ctx, a.Name()+"-deps-info"),
Inputs: []android.Path{a.ApexBundleDepsInfo.FullListPath()}, Inputs: []android.Path{
a.ApexBundleDepsInfo.FullListPath(),
a.ApexBundleDepsInfo.FlatListPath(),
},
}) })
} }

View File

@@ -581,6 +581,10 @@ func (c *Module) SdkVersion() string {
return String(c.Properties.Sdk_version) return String(c.Properties.Sdk_version)
} }
func (c *Module) MinSdkVersion() string {
return String(c.Properties.Min_sdk_version)
}
func (c *Module) AlwaysSdk() bool { func (c *Module) AlwaysSdk() bool {
return c.Properties.AlwaysSdk || Bool(c.Properties.Sdk_variant_only) return c.Properties.AlwaysSdk || Bool(c.Properties.Sdk_variant_only)
} }

View File

@@ -600,6 +600,10 @@ func (j *Module) targetSdkVersion() sdkSpec {
return j.sdkVersion() return j.sdkVersion()
} }
func (j *Module) MinSdkVersion() string {
return j.minSdkVersion().version.String()
}
func (j *Module) AvailableFor(what string) bool { func (j *Module) AvailableFor(what string) bool {
if what == android.AvailableToPlatform && Bool(j.deviceProperties.Hostdex) { if what == android.AvailableToPlatform && Bool(j.deviceProperties.Hostdex) {
// Exception: for hostdex: true libraries, the platform variant is created // Exception: for hostdex: true libraries, the platform variant is created
@@ -2398,6 +2402,10 @@ func (j *Import) minSdkVersion() sdkSpec {
return j.sdkVersion() return j.sdkVersion()
} }
func (j *Import) MinSdkVersion() string {
return j.minSdkVersion().version.String()
}
func (j *Import) Prebuilt() *android.Prebuilt { func (j *Import) Prebuilt() *android.Prebuilt {
return &j.prebuilt return &j.prebuilt
} }