diff --git a/apex/apex_test.go b/apex/apex_test.go index 3fde14458..5e9ab45bd 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -2678,6 +2678,40 @@ func TestVendorApex_use_vndk_as_stable(t *testing.T) { ensureListContains(t, requireNativeLibs, ":vndk") } +func TestProductVariant(t *testing.T) { + ctx := testApex(t, ` + apex { + name: "myapex", + key: "myapex.key", + updatable: false, + product_specific: true, + binaries: ["foo"], + } + + apex_key { + name: "myapex.key", + public_key: "testkey.avbpubkey", + private_key: "testkey.pem", + } + + cc_binary { + name: "foo", + product_available: true, + apex_available: ["myapex"], + srcs: ["foo.cpp"], + } + `, func(fs map[string][]byte, config android.Config) { + config.TestProductVariables.ProductVndkVersion = proptools.StringPtr("current") + }) + + cflags := strings.Fields( + ctx.ModuleForTests("foo", "android_product.VER_arm64_armv8-a_apex10000").Rule("cc").Args["cFlags"]) + ensureListContains(t, cflags, "-D__ANDROID_VNDK__") + ensureListContains(t, cflags, "-D__ANDROID_APEX__") + ensureListContains(t, cflags, "-D__ANDROID_PRODUCT__") + ensureListNotContains(t, cflags, "-D__ANDROID_VENDOR__") +} + func TestApex_withPrebuiltFirmware(t *testing.T) { testCases := []struct { name string diff --git a/cc/cc_test.go b/cc/cc_test.go index 16ae7ee30..719661598 100644 --- a/cc/cc_test.go +++ b/cc/cc_test.go @@ -2065,6 +2065,7 @@ func TestEnforceProductVndkVersion(t *testing.T) { vendor_available: true, product_available: true, nocrt: true, + srcs: ["foo.c"], target: { vendor: { suffix: "-vendor", @@ -2108,12 +2109,7 @@ func TestEnforceProductVndkVersion(t *testing.T) { } ` - config := TestConfig(buildDir, android.Android, nil, bp, nil) - config.TestProductVariables.DeviceVndkVersion = StringPtr("current") - config.TestProductVariables.ProductVndkVersion = StringPtr("current") - config.TestProductVariables.Platform_vndk_version = StringPtr("VER") - - ctx := testCcWithConfig(t, config) + ctx := ccFixtureFactory.RunTestWithBp(t, bp).TestContext checkVndkModule(t, ctx, "libvndk", "", false, "", productVariant) checkVndkModule(t, ctx, "libvndk_sp", "", true, "", productVariant) @@ -2123,6 +2119,33 @@ func TestEnforceProductVndkVersion(t *testing.T) { mod_product := ctx.ModuleForTests("libboth_available", productVariant).Module().(*Module) assertString(t, mod_product.outputFile.Path().Base(), "libboth_available-product.so") + + ensureStringContains := func(t *testing.T, str string, substr string) { + t.Helper() + if !strings.Contains(str, substr) { + t.Errorf("%q is not found in %v", substr, str) + } + } + ensureStringNotContains := func(t *testing.T, str string, substr string) { + t.Helper() + if strings.Contains(str, substr) { + t.Errorf("%q is found in %v", substr, str) + } + } + + // _static variant is used since _shared reuses *.o from the static variant + vendor_static := ctx.ModuleForTests("libboth_available", strings.Replace(vendorVariant, "_shared", "_static", 1)) + product_static := ctx.ModuleForTests("libboth_available", strings.Replace(productVariant, "_shared", "_static", 1)) + + vendor_cflags := vendor_static.Rule("cc").Args["cFlags"] + ensureStringContains(t, vendor_cflags, "-D__ANDROID_VNDK__") + ensureStringContains(t, vendor_cflags, "-D__ANDROID_VENDOR__") + ensureStringNotContains(t, vendor_cflags, "-D__ANDROID_PRODUCT__") + + 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__") } func TestEnforceProductVndkVersionErrors(t *testing.T) { diff --git a/cc/compiler.go b/cc/compiler.go index 2e71922e1..bcad1ad2e 100644 --- a/cc/compiler.go +++ b/cc/compiler.go @@ -357,6 +357,11 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags, deps if ctx.useVndk() { flags.Global.CommonFlags = append(flags.Global.CommonFlags, "-D__ANDROID_VNDK__") + if ctx.inVendor() { + flags.Global.CommonFlags = append(flags.Global.CommonFlags, "-D__ANDROID_VENDOR__") + } else if ctx.inProduct() { + flags.Global.CommonFlags = append(flags.Global.CommonFlags, "-D__ANDROID_PRODUCT__") + } } if ctx.inRecovery() {