Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ccce2f2c authored by Jooyung Han's avatar Jooyung Han
Browse files

Add __ANDROID_SDK_VERSION__=<ver> 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
Change-Id: I5102ab0c5086b5ad29d16ac45af55d32062167b4
parent c6453295
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -1687,6 +1687,7 @@ func TestMacro(t *testing.T) {
			name: "otherapex",
			key: "myapex.key",
			native_shared_libs: ["mylib", "mylib2"],
			min_sdk_version: "29",
		}

		apex_key {
@@ -1721,15 +1722,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
+11 −1
Original line number Diff line number Diff line
@@ -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()
}
+12 −0
Original line number Diff line number Diff line
@@ -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__")
	}