From 56534df14f6e81bba903d6a6fe8fc0a29db14099 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Tue, 4 Oct 2022 09:58:58 -0700 Subject: [PATCH] Use MinApiForArch to set minSdkVersion for apexes Apexes for new architectures have to increase their minSdkVersion to the minimum supported version for the architecture. Bug: 250918230 Test: lunch aosp_riscv64-userdebug && m ALLOW_MISSING_DEPENDENCIES=true nothing Change-Id: I49220cbec628f1508709741dc56b62aaac7786d9 --- apex/apex.go | 23 +++++++++++++++-------- cc/api_level.go | 4 ++-- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/apex/apex.go b/apex/apex.go index 01d74ae8c..b5057bdd3 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -2731,16 +2731,23 @@ func (a *apexBundle) minSdkVersionValue(ctx android.EarlyModuleContext) string { // Only override the minSdkVersion value on Apexes which already specify // a min_sdk_version (it's optional for non-updatable apexes), and that its // min_sdk_version value is lower than the one to override with. - overrideMinSdkValue := ctx.DeviceConfig().ApexGlobalMinSdkVersionOverride() - overrideApiLevel := minSdkVersionFromValue(ctx, overrideMinSdkValue) - originalMinApiLevel := minSdkVersionFromValue(ctx, proptools.String(a.properties.Min_sdk_version)) - isMinSdkSet := a.properties.Min_sdk_version != nil - isOverrideValueHigher := overrideApiLevel.CompareTo(originalMinApiLevel) > 0 - if overrideMinSdkValue != "" && isMinSdkSet && isOverrideValueHigher { - return overrideMinSdkValue + minApiLevel := minSdkVersionFromValue(ctx, proptools.String(a.properties.Min_sdk_version)) + if minApiLevel.IsNone() { + return "" } - return proptools.String(a.properties.Min_sdk_version) + archMinApiLevel := cc.MinApiForArch(ctx, a.MultiTargets()[0].Arch.ArchType) + if !archMinApiLevel.IsNone() && archMinApiLevel.CompareTo(minApiLevel) > 0 { + minApiLevel = archMinApiLevel + } + + overrideMinSdkValue := ctx.DeviceConfig().ApexGlobalMinSdkVersionOverride() + overrideApiLevel := minSdkVersionFromValue(ctx, overrideMinSdkValue) + if !overrideApiLevel.IsNone() && overrideApiLevel.CompareTo(minApiLevel) > 0 { + minApiLevel = overrideApiLevel + } + + return minApiLevel.String() } // Returns apex's min_sdk_version SdkSpec, honoring overrides diff --git a/cc/api_level.go b/cc/api_level.go index 8c2b2c2ac..8f9e1f6bc 100644 --- a/cc/api_level.go +++ b/cc/api_level.go @@ -20,7 +20,7 @@ import ( "android/soong/android" ) -func minApiForArch(ctx android.BaseModuleContext, +func MinApiForArch(ctx android.EarlyModuleContext, arch android.ArchType) android.ApiLevel { switch arch { @@ -38,7 +38,7 @@ func minApiForArch(ctx android.BaseModuleContext, func nativeApiLevelFromUser(ctx android.BaseModuleContext, raw string) (android.ApiLevel, error) { - min := minApiForArch(ctx, ctx.Arch().ArchType) + min := MinApiForArch(ctx, ctx.Arch().ArchType) if raw == "minimum" { return min, nil }