Add min_sdk_version to Rust modules.
Add the min_sdk_version property to Rust modules so they can declare
a minimum SDK version they support for use with APEX modules.
Test: New Soong test passes.
Bug: 174862583
Change-Id: I2829053a320f50c218783dee5adbeff9cef81e8e
diff --git a/apex/apex_test.go b/apex/apex_test.go
index 0b67ef5..277fa1c 100644
--- a/apex/apex_test.go
+++ b/apex/apex_test.go
@@ -1782,6 +1782,31 @@
min_sdk_version: "30",
}
`)
+
+ testApexError(t, `module "libfoo.ffi".*: should support min_sdk_version\(29\)`, `
+ apex {
+ name: "myapex",
+ key: "myapex.key",
+ native_shared_libs: ["libfoo.ffi"],
+ min_sdk_version: "29",
+ }
+
+ apex_key {
+ name: "myapex.key",
+ public_key: "testkey.avbpubkey",
+ private_key: "testkey.pem",
+ }
+
+ rust_ffi_shared {
+ name: "libfoo.ffi",
+ srcs: ["foo.rs"],
+ crate_name: "foo",
+ apex_available: [
+ "myapex",
+ ],
+ min_sdk_version: "30",
+ }
+ `)
}
func TestApexMinSdkVersion_Okay(t *testing.T) {
diff --git a/cc/testing.go b/cc/testing.go
index 95a93a0..3764fad 100644
--- a/cc/testing.go
+++ b/cc/testing.go
@@ -334,7 +334,7 @@
},
apex_available: [
"//apex_available:platform",
- "myapex"
+ "//apex_available:anyapex",
],
}
cc_library {
diff --git a/rust/rust.go b/rust/rust.go
index 38caad3..1ceedf3 100644
--- a/rust/rust.go
+++ b/rust/rust.go
@@ -67,6 +67,9 @@
SubName string `blueprint:"mutated"`
+ // Minimum sdk version that the artifact should support when it runs as part of mainline modules(APEX).
+ Min_sdk_version *string
+
PreventInstall bool
HideFromMake bool
}
@@ -1076,7 +1079,29 @@
var _ android.ApexModule = (*Module)(nil)
+func (mod *Module) minSdkVersion() string {
+ return String(mod.Properties.Min_sdk_version)
+}
+
func (mod *Module) ShouldSupportSdkVersion(ctx android.BaseModuleContext, sdkVersion android.ApiLevel) error {
+ minSdkVersion := mod.minSdkVersion()
+ if minSdkVersion == "apex_inherit" {
+ return nil
+ }
+ if minSdkVersion == "" {
+ return fmt.Errorf("min_sdk_version is not specificed")
+ }
+
+ // Not using nativeApiLevelFromUser because the context here is not
+ // necessarily a native context.
+ ver, err := android.ApiLevelFromUser(ctx, minSdkVersion)
+ if err != nil {
+ return err
+ }
+
+ if ver.GreaterThan(sdkVersion) {
+ return fmt.Errorf("newer SDK(%v)", ver)
+ }
return nil
}
diff --git a/rust/testing.go b/rust/testing.go
index a8496d9..8648dc3 100644
--- a/rust/testing.go
+++ b/rust/testing.go
@@ -78,6 +78,7 @@
nocrt: true,
system_shared_libs: [],
apex_available: ["//apex_available:platform", "//apex_available:anyapex"],
+ min_sdk_version: "29",
}
cc_library {
name: "libprotobuf-cpp-full",
@@ -95,6 +96,7 @@
native_coverage: false,
sysroot: true,
apex_available: ["//apex_available:platform", "//apex_available:anyapex"],
+ min_sdk_version: "29",
}
rust_library {
name: "libtest",
@@ -105,6 +107,7 @@
native_coverage: false,
sysroot: true,
apex_available: ["//apex_available:platform", "//apex_available:anyapex"],
+ min_sdk_version: "29",
}
rust_library {
name: "libprotobuf",