From 61c4154ca6ff4fb4b3a6f74a10af20d2eabd87c8 Mon Sep 17 00:00:00 2001 From: Jooyung Han Date: Sat, 7 Mar 2020 03:45:53 +0900 Subject: [PATCH] Add __ANDROID_SDK_VERSION__= macro sdk_version is passed for relevant variants. If not specified or "current", it maps to "10000" for platform variants, and "min_sdk_version" of the apex for apex variants. Bug: 150860940 Test: m (soong test) manually check build.ninja Merged-In: I5102ab0c5086b5ad29d16ac45af55d32062167b4 Change-Id: I5102ab0c5086b5ad29d16ac45af55d32062167b4 (cherry picked from commit ccce2f2c239ac7c7532a36ccf6a2be9fa126538e) Exempt-From-Owner-Approval: cp from aosp --- apex/apex_test.go | 8 ++++++-- cc/cc.go | 12 +++++++++++- cc/compiler.go | 12 ++++++++++++ 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/apex/apex_test.go b/apex/apex_test.go index 9ef6aedfa..77d3bee30 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -1679,6 +1679,7 @@ func TestMacro(t *testing.T) { name: "otherapex", key: "myapex.key", native_shared_libs: ["mylib", "mylib2"], + min_sdk_version: "29", } apex_key { @@ -1713,15 +1714,18 @@ func TestMacro(t *testing.T) { // non-APEX variant does not have __ANDROID_APEX__ defined mylibCFlags := ctx.ModuleForTests("mylib", "android_arm64_armv8-a_static").Rule("cc").Args["cFlags"] ensureNotContains(t, mylibCFlags, "-D__ANDROID_APEX__") + ensureContains(t, mylibCFlags, "-D__ANDROID_SDK_VERSION__=10000") - // APEX variant has __ANDROID_APEX__ defined + // APEX variant has __ANDROID_APEX__ and __ANDROID_APEX_SDK__ defined mylibCFlags = ctx.ModuleForTests("mylib", "android_arm64_armv8-a_static_myapex").Rule("cc").Args["cFlags"] ensureContains(t, mylibCFlags, "-D__ANDROID_APEX__") + ensureContains(t, mylibCFlags, "-D__ANDROID_SDK_VERSION__=10000") ensureNotContains(t, mylibCFlags, "-D__ANDROID_APEX_MYAPEX__") - // APEX variant has __ANDROID_APEX__ defined + // APEX variant has __ANDROID_APEX__ and __ANDROID_APEX_SDK__ defined mylibCFlags = ctx.ModuleForTests("mylib", "android_arm64_armv8-a_static_otherapex").Rule("cc").Args["cFlags"] ensureContains(t, mylibCFlags, "-D__ANDROID_APEX__") + ensureContains(t, mylibCFlags, "-D__ANDROID_SDK_VERSION__=29") ensureNotContains(t, mylibCFlags, "-D__ANDROID_APEX_OTHERAPEX__") // When cc_library sets use_apex_name_macro: true diff --git a/cc/cc.go b/cc/cc.go index 8b3c77202..04d30f184 100644 --- a/cc/cc.go +++ b/cc/cc.go @@ -290,6 +290,7 @@ type ModuleContextIntf interface { staticBinary() bool header() bool toolchain() config.Toolchain + canUseSdk() bool useSdk() bool sdkVersion() string useVndk() bool @@ -313,6 +314,7 @@ type ModuleContextIntf interface { useClangLld(actx ModuleContext) bool isForPlatform() bool apexName() string + apexSdkVersion() int hasStubsVariants() bool isStubs() bool bootstrap() bool @@ -1045,8 +1047,12 @@ func (ctx *moduleContextImpl) header() bool { return ctx.mod.header() } +func (ctx *moduleContextImpl) canUseSdk() bool { + return ctx.ctx.Device() && !ctx.useVndk() && !ctx.inRamdisk() && !ctx.inRecovery() && !ctx.ctx.Fuchsia() +} + func (ctx *moduleContextImpl) useSdk() bool { - if ctx.ctx.Device() && !ctx.useVndk() && !ctx.inRamdisk() && !ctx.inRecovery() && !ctx.ctx.Fuchsia() { + if ctx.canUseSdk() { return String(ctx.mod.Properties.Sdk_version) != "" } return false @@ -1179,6 +1185,10 @@ func (ctx *moduleContextImpl) apexName() string { return ctx.mod.ApexName() } +func (ctx *moduleContextImpl) apexSdkVersion() int { + return ctx.mod.ApexProperties.Info.MinSdkVersion +} + func (ctx *moduleContextImpl) hasStubsVariants() bool { return ctx.mod.HasStubsVariants() } diff --git a/cc/compiler.go b/cc/compiler.go index 3a87b6980..fe81bd0a4 100644 --- a/cc/compiler.go +++ b/cc/compiler.go @@ -315,6 +315,18 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags, deps "-isystem "+getCurrentIncludePath(ctx).Join(ctx, config.NDKTriple(tc)).String()) } + if ctx.canUseSdk() { + sdkVersion := ctx.sdkVersion() + if sdkVersion == "" || sdkVersion == "current" { + if ctx.isForPlatform() { + sdkVersion = strconv.Itoa(android.FutureApiLevel) + } else { + sdkVersion = strconv.Itoa(ctx.apexSdkVersion()) + } + } + flags.Global.CommonFlags = append(flags.Global.CommonFlags, "-D__ANDROID_SDK_VERSION__="+sdkVersion) + } + if ctx.useVndk() { flags.Global.CommonFlags = append(flags.Global.CommonFlags, "-D__ANDROID_VNDK__") }