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

Commit 480e25b7 authored by Artur Satayev's avatar Artur Satayev
Browse files

Introduce min_sdk_version to deps info.

Bug: 149622332
Test: m
Change-Id: Ie6568cb8a82d5cca9a3dc91b5a068abf4b0632dc
parent a8bd113a
Loading
Loading
Loading
Loading
+15 −5
Original line number Diff line number Diff line
@@ -413,21 +413,29 @@ type ApexModuleDepInfo struct {
	From []string
	// Whether the dependency belongs to the final compiled APEX.
	IsExternal bool
	// min_sdk_version of the ApexModule
	MinSdkVersion string
}

// A map of a dependency name to its ApexModuleDepInfo
type DepNameToDepInfoMap map[string]ApexModuleDepInfo

type ApexBundleDepsInfo struct {
	minSdkVersion string
	flatListPath  OutputPath
	fullListPath  OutputPath
}

type ApexDepsInfoIntf interface {
	MinSdkVersion() string
	FlatListPath() Path
	FullListPath() Path
}

func (d *ApexBundleDepsInfo) MinSdkVersion() string {
	return d.minSdkVersion
}

func (d *ApexBundleDepsInfo) FlatListPath() Path {
	return d.flatListPath
}
@@ -441,14 +449,16 @@ var _ ApexDepsInfoIntf = (*ApexBundleDepsInfo)(nil)
// Generate two module out files:
// 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, depInfos DepNameToDepInfoMap) {
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:\\n", ctx.ModuleName())
	fmt.Fprintf(&flatContent, "%s(minSdkVersion:%s):\\n", ctx.ModuleName(), minSdkVersion)
	for _, key := range FirstUniqueStrings(SortedStringKeys(depInfos)) {
		info := depInfos[key]
		toName := info.To
		toName := fmt.Sprintf("%s(minSdkVersion:%s)", info.To, info.MinSdkVersion)
		if info.IsExternal {
			toName = toName + " (external)"
		}
+16 −16
Original line number Diff line number Diff line
@@ -505,18 +505,18 @@ func TestBasicApex(t *testing.T) {
	ensureListContains(t, noticeInputs, "custom_notice_for_static_lib")

	fullDepsInfo := strings.Split(ctx.ModuleForTests("myapex", "android_common_myapex_image").Output("depsinfo/fulllist.txt").Args["content"], "\\n")
	ensureListContains(t, fullDepsInfo, "myjar <- myapex")
	ensureListContains(t, fullDepsInfo, "mylib <- myapex")
	ensureListContains(t, fullDepsInfo, "mylib2 <- mylib")
	ensureListContains(t, fullDepsInfo, "myotherjar <- myjar")
	ensureListContains(t, fullDepsInfo, "mysharedjar (external) <- myjar")
	ensureListContains(t, fullDepsInfo, "myjar(minSdkVersion:(no version)) <- myapex")
	ensureListContains(t, fullDepsInfo, "mylib(minSdkVersion:(no version)) <- myapex")
	ensureListContains(t, fullDepsInfo, "mylib2(minSdkVersion:(no version)) <- mylib")
	ensureListContains(t, fullDepsInfo, "myotherjar(minSdkVersion:(no version)) <- 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")
	ensureListContains(t, flatDepsInfo, "  mylib")
	ensureListContains(t, flatDepsInfo, "  mylib2")
	ensureListContains(t, flatDepsInfo, "  myotherjar")
	ensureListContains(t, flatDepsInfo, "  mysharedjar (external)")
	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) {
@@ -826,14 +826,14 @@ func TestApexWithExplicitStubsDependency(t *testing.T) {
	ensureNotContains(t, libFooStubsLdFlags, "libbar.so")

	fullDepsInfo := strings.Split(ctx.ModuleForTests("myapex2", "android_common_myapex2_image").Output("depsinfo/fulllist.txt").Args["content"], "\\n")
	ensureListContains(t, fullDepsInfo, "mylib <- myapex2")
	ensureListContains(t, fullDepsInfo, "libbaz <- mylib")
	ensureListContains(t, fullDepsInfo, "libfoo (external) <- mylib")
	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")

	flatDepsInfo := strings.Split(ctx.ModuleForTests("myapex2", "android_common_myapex2_image").Output("depsinfo/flatlist.txt").Args["content"], "\\n")
	ensureListContains(t, flatDepsInfo, "  mylib")
	ensureListContains(t, flatDepsInfo, "  libbaz")
	ensureListContains(t, flatDepsInfo, "  libfoo (external)")
	ensureListContains(t, flatDepsInfo, "  mylib(minSdkVersion:(no version))")
	ensureListContains(t, flatDepsInfo, "  libbaz(minSdkVersion:(no version))")
	ensureListContains(t, flatDepsInfo, "  libfoo(minSdkVersion:(no version)) (external)")
}

func TestApexWithRuntimeLibsDependency(t *testing.T) {
+12 −4
Original line number Diff line number Diff line
@@ -703,10 +703,18 @@ func (a *apexBundle) buildApexDependencyInfo(ctx android.ModuleContext) {
			info.IsExternal = info.IsExternal && externalDep
			depInfos[to.Name()] = info
		} else {
			toMinSdkVersion := "(no version)"
			if m, ok := to.(interface{ MinSdkVersion() string }); ok {
				if v := m.MinSdkVersion(); v != "" {
					toMinSdkVersion = v
				}
			}

			depInfos[to.Name()] = android.ApexModuleDepInfo{
				To:            to.Name(),
				From:          []string{from.Name()},
				IsExternal:    externalDep,
				MinSdkVersion: toMinSdkVersion,
			}
		}

@@ -714,7 +722,7 @@ func (a *apexBundle) buildApexDependencyInfo(ctx android.ModuleContext) {
		return !externalDep
	})

	a.ApexBundleDepsInfo.BuildDepsInfoLists(ctx, depInfos)
	a.ApexBundleDepsInfo.BuildDepsInfoLists(ctx, proptools.String(a.properties.Min_sdk_version), depInfos)

	ctx.Build(pctx, android.BuildParams{
		Rule:   android.Phony,
+4 −0
Original line number Diff line number Diff line
@@ -581,6 +581,10 @@ func (c *Module) SdkVersion() string {
	return String(c.Properties.Sdk_version)
}

func (c *Module) MinSdkVersion() string {
	return String(c.Properties.Min_sdk_version)
}

func (c *Module) AlwaysSdk() bool {
	return c.Properties.AlwaysSdk || Bool(c.Properties.Sdk_variant_only)
}
+8 −0
Original line number Diff line number Diff line
@@ -600,6 +600,10 @@ func (j *Module) targetSdkVersion() sdkSpec {
	return j.sdkVersion()
}

func (j *Module) MinSdkVersion() string {
	return j.minSdkVersion().version.String()
}

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

func (j *Import) MinSdkVersion() string {
	return j.minSdkVersion().version.String()
}

func (j *Import) Prebuilt() *android.Prebuilt {
	return &j.prebuilt
}