From 41cbb5e9b598bc94092e9896fbce97b313cfa670 Mon Sep 17 00:00:00 2001 From: Justin Yun Date: Wed, 29 Nov 2023 17:58:16 +0900 Subject: [PATCH] Define __ANDROID_VENDOR_API__ cc modules can use __ANDROID_VENDOR_API__ to read BOARD_API_LEVEL that is the API level of the vendor surface. Bug: 313822931 Test: check ninja commands to have -D__ANDROID_VENDOR_API__= Change-Id: Iceb5918cbfce0f24929d02d7e3caf1e9942b88e8 --- android/config.go | 4 ++++ android/variable.go | 2 ++ cc/cc_test.go | 3 +++ cc/compiler.go | 9 +++++++++ rust/bindgen.go | 9 +++++++++ 5 files changed, 27 insertions(+) diff --git a/android/config.go b/android/config.go index a69adc354..3d341da96 100644 --- a/android/config.go +++ b/android/config.go @@ -1425,6 +1425,10 @@ func (c *config) IsVndkDeprecated() bool { return !Bool(c.productVariables.KeepVndk) } +func (c *config) VendorApiLevel() string { + return String(c.productVariables.VendorApiLevel) +} + func (c *deviceConfig) Arches() []Arch { var arches []Arch for _, target := range c.config.Targets[Android] { diff --git a/android/variable.go b/android/variable.go index 307deaf32..0e7a173d8 100644 --- a/android/variable.go +++ b/android/variable.go @@ -226,6 +226,8 @@ type ProductVariables struct { DeviceMaxPageSizeSupported *string `json:",omitempty"` DevicePageSizeAgnostic *bool `json:",omitempty"` + VendorApiLevel *string `json:",omitempty"` + RecoverySnapshotVersion *string `json:",omitempty"` DeviceSecondaryArch *string `json:",omitempty"` diff --git a/cc/cc_test.go b/cc/cc_test.go index e2dba9043..cc5254773 100644 --- a/cc/cc_test.go +++ b/cc/cc_test.go @@ -40,6 +40,7 @@ func TestMain(m *testing.M) { var prepareForCcTest = android.GroupFixturePreparers( PrepareForTestWithCcIncludeVndk, android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) { + variables.VendorApiLevel = StringPtr("202404") variables.DeviceVndkVersion = StringPtr("current") variables.Platform_vndk_version = StringPtr("29") }), @@ -2131,11 +2132,13 @@ func TestEnforceProductVndkVersion(t *testing.T) { ensureStringContains(t, vendor_cflags, "-D__ANDROID_VNDK__") ensureStringContains(t, vendor_cflags, "-D__ANDROID_VENDOR__") ensureStringNotContains(t, vendor_cflags, "-D__ANDROID_PRODUCT__") + ensureStringContains(t, vendor_cflags, "-D__ANDROID_VENDOR_API__=202404") product_cflags := product_static.Rule("cc").Args["cFlags"] ensureStringContains(t, product_cflags, "-D__ANDROID_VNDK__") ensureStringContains(t, product_cflags, "-D__ANDROID_PRODUCT__") ensureStringNotContains(t, product_cflags, "-D__ANDROID_VENDOR__") + ensureStringNotContains(t, product_cflags, "-D__ANDROID_VENDOR_API__=202404") } func TestEnforceProductVndkVersionErrors(t *testing.T) { diff --git a/cc/compiler.go b/cc/compiler.go index 490d3cc3d..bb7885bc7 100644 --- a/cc/compiler.go +++ b/cc/compiler.go @@ -406,6 +406,15 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags, deps flags.Global.CommonFlags = append(flags.Global.CommonFlags, "-D__ANDROID_VNDK__") if ctx.inVendor() { flags.Global.CommonFlags = append(flags.Global.CommonFlags, "-D__ANDROID_VENDOR__") + + vendorApiLevel := ctx.Config().VendorApiLevel() + if vendorApiLevel == "" { + // TODO(b/314036847): This is a fallback for UDC targets. + // This must be a build failure when UDC is no longer built + // from this source tree. + vendorApiLevel = ctx.Config().PlatformSdkVersion().String() + } + flags.Global.CommonFlags = append(flags.Global.CommonFlags, "-D__ANDROID_VENDOR_API__="+vendorApiLevel) } else if ctx.inProduct() { flags.Global.CommonFlags = append(flags.Global.CommonFlags, "-D__ANDROID_PRODUCT__") } diff --git a/rust/bindgen.go b/rust/bindgen.go index ffe532fcb..1cc1574ac 100644 --- a/rust/bindgen.go +++ b/rust/bindgen.go @@ -174,6 +174,15 @@ func (b *bindgenDecorator) GenerateSource(ctx ModuleContext, deps PathDeps) andr cflags = append(cflags, "-D__ANDROID_VNDK__") if ctx.RustModule().InVendor() { cflags = append(cflags, "-D__ANDROID_VENDOR__") + + vendorApiLevel := ctx.Config().VendorApiLevel() + if vendorApiLevel == "" { + // TODO(b/314036847): This is a fallback for UDC targets. + // This must be a build failure when UDC is no longer built + // from this source tree. + vendorApiLevel = ctx.Config().PlatformSdkVersion().String() + } + cflags = append(cflags, "-D__ANDROID_VENDOR_API__="+vendorApiLevel) } else if ctx.RustModule().InProduct() { cflags = append(cflags, "-D__ANDROID_PRODUCT__") }