Browse Source

Disable VNDK apexes for unsupported API levels

Disable VNDK apexes when their version is below the minimum
supported API level for the primary architecture.

Test: TestVndkApexCurrent
Change-Id: Ie72a5beb9da432660d3fec5c520402224326f961
Colin Cross 1 year ago
parent
commit
bb137a3956
3 changed files with 21 additions and 4 deletions
  1. 15 0
      apex/vndk.go
  2. 4 2
      cc/api_level.go
  3. 2 2
      cc/cc.go

+ 15 - 0
apex/vndk.go

@@ -65,8 +65,23 @@ func apexVndkMutator(mctx android.TopDownMutatorContext) {
 		}
 
 		vndkVersion := ab.vndkVersion(mctx.DeviceConfig())
+
 		// Ensure VNDK APEX mount point is formatted as com.android.vndk.v###
 		ab.properties.Apex_name = proptools.StringPtr(vndkApexNamePrefix + vndkVersion)
+
+		apiLevel, err := android.ApiLevelFromUser(mctx, vndkVersion)
+		if err != nil {
+			mctx.PropertyErrorf("vndk_version", "%s", err.Error())
+			return
+		}
+
+		targets := mctx.MultiTargets()
+		if len(targets) > 0 && apiLevel.LessThan(cc.MinApiForArch(mctx, targets[0].Arch.ArchType)) {
+			// Disable VNDK apexes for VNDK versions less than the minimum supported API level for the primary
+			// architecture.
+			ab.Disable()
+		}
+
 	}
 }
 

+ 4 - 2
cc/api_level.go

@@ -20,7 +20,9 @@ import (
 	"android/soong/android"
 )
 
-func minApiForArch(ctx android.EarlyModuleContext,
+// MinApiLevelForArch returns the ApiLevel for the Android version that
+// first supported the architecture.
+func MinApiForArch(ctx android.EarlyModuleContext,
 	arch android.ArchType) android.ApiLevel {
 
 	switch arch {
@@ -38,7 +40,7 @@ func minApiForArch(ctx android.EarlyModuleContext,
 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
 	}

+ 2 - 2
cc/cc.go

@@ -2214,7 +2214,7 @@ func GetCrtVariations(ctx android.BottomUpMutatorContext,
 		}
 
 		// Raise the minSdkVersion to the minimum supported for the architecture.
-		minApiForArch := minApiForArch(ctx, m.Target().Arch.ArchType)
+		minApiForArch := MinApiForArch(ctx, m.Target().Arch.ArchType)
 		if apiLevel.LessThan(minApiForArch) {
 			apiLevel = minApiForArch
 		}
@@ -3700,7 +3700,7 @@ func (c *Module) ShouldSupportSdkVersion(ctx android.BaseModuleContext,
 	// This allows introducing new architectures in the platform that
 	// need to be included in apexes that normally require an older
 	// min_sdk_version.
-	minApiForArch := minApiForArch(ctx, c.Target().Arch.ArchType)
+	minApiForArch := MinApiForArch(ctx, c.Target().Arch.ArchType)
 	if sdkVersion.LessThan(minApiForArch) {
 		sdkVersion = minApiForArch
 	}