From af1fde43f96196a191db326048cf04d64346877e Mon Sep 17 00:00:00 2001 From: Justin Yun Date: Wed, 27 Sep 2023 16:22:10 +0900 Subject: [PATCH] Generate product variants by default PRODUCT_PRODUCT_VNDK_VERSION is set to 'current' by default. Now, we can generate product variants without checking the PRODUCT_PRODUCT_VNDK_VERSION build variable. Remove reading the PRODUCT_PRODUCT_VNDK_VERSION variable from soong and generate product variants by default. Bug: 302255959 Test: m Change-Id: I9a9b2076f4367c5ce9a393bbb206f8dee3884bd8 --- android/config.go | 4 - android/variable.go | 2 - apex/apex.go | 2 +- apex/apex_test.go | 6 +- apex/vndk_test.go | 7 +- cc/cc.go | 3 +- cc/cc_test.go | 176 ++-------------------------------------- cc/genrule.go | 9 +- cc/image.go | 29 +------ rust/rust_test.go | 3 - sysprop/sysprop_test.go | 26 ++++-- 11 files changed, 32 insertions(+), 235 deletions(-) diff --git a/android/config.go b/android/config.go index b3ff86b49..f5b75b7c2 100644 --- a/android/config.go +++ b/android/config.go @@ -1434,10 +1434,6 @@ func (c *deviceConfig) PlatformVndkVersion() string { return String(c.config.productVariables.Platform_vndk_version) } -func (c *deviceConfig) ProductVndkVersion() string { - return String(c.config.productVariables.ProductVndkVersion) -} - func (c *deviceConfig) ExtraVndkVersions() []string { return c.config.productVariables.ExtraVndkVersions } diff --git a/android/variable.go b/android/variable.go index 44a8fd7f3..003f45cf8 100644 --- a/android/variable.go +++ b/android/variable.go @@ -418,8 +418,6 @@ type ProductVariables struct { ProductPublicSepolicyDirs []string `json:",omitempty"` ProductPrivateSepolicyDirs []string `json:",omitempty"` - ProductVndkVersion *string `json:",omitempty"` - TargetFSConfigGen []string `json:",omitempty"` EnforceProductPartitionInterface *bool `json:",omitempty"` diff --git a/apex/apex.go b/apex/apex.go index 090d9c4fe..f90337301 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -736,7 +736,7 @@ func (a *apexBundle) getImageVariationPair(deviceConfig android.DeviceConfig) (s vndkVersion = deviceConfig.VndkVersion() } else if a.ProductSpecific() { prefix = cc.ProductVariationPrefix - vndkVersion = deviceConfig.ProductVndkVersion() + vndkVersion = deviceConfig.PlatformVndkVersion() } } if vndkVersion == "current" { diff --git a/apex/apex_test.go b/apex/apex_test.go index 9475f5da3..8069c51fa 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -3088,10 +3088,7 @@ func TestProductVariant(t *testing.T) { apex_available: ["myapex"], srcs: ["foo.cpp"], } - `, android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) { - variables.ProductVndkVersion = proptools.StringPtr("current") - }), - ) + `) cflags := strings.Fields( ctx.ModuleForTests("foo", "android_product.29_arm64_armv8-a_myapex").Rule("cc").Args["cFlags"]) @@ -10521,6 +10518,7 @@ func TestTrimmedApex(t *testing.T) { min_sdk_version: "29", recovery_available: true, vendor_available: true, + product_available: true, } api_imports { name: "api_imports", diff --git a/apex/vndk_test.go b/apex/vndk_test.go index 2b86e5347..e2aee96e7 100644 --- a/apex/vndk_test.go +++ b/apex/vndk_test.go @@ -115,12 +115,7 @@ func TestVndkApexUsesVendorVariant(t *testing.T) { }) t.Run("VNDK APEX gathers only vendor variants even if product variants are available", func(t *testing.T) { - ctx := testApex(t, bp, - android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) { - // Now product variant is available - variables.ProductVndkVersion = proptools.StringPtr("current") - }), - ) + ctx := testApex(t, bp) files := getFiles(t, ctx, "com.android.vndk.current", "android_common") ensureFileSrc(t, files, "lib/libfoo.so", "libfoo/android_vendor.29_arm_armv7-a-neon_shared/libfoo.so") diff --git a/cc/cc.go b/cc/cc.go index 189676661..8c248f934 100644 --- a/cc/cc.go +++ b/cc/cc.go @@ -1895,8 +1895,7 @@ func getNameSuffixWithVndkVersion(ctx android.ModuleContext, c LinkableInterface // do not add a name suffix because it is a base module. return "" } - vndkVersion = ctx.DeviceConfig().ProductVndkVersion() - nameSuffix = ProductSuffix + return ProductSuffix } else { vndkVersion = ctx.DeviceConfig().VndkVersion() nameSuffix = VendorSuffix diff --git a/cc/cc_test.go b/cc/cc_test.go index 7ce0f3715..f7eb8d270 100644 --- a/cc/cc_test.go +++ b/cc/cc_test.go @@ -41,7 +41,6 @@ var prepareForCcTest = android.GroupFixturePreparers( PrepareForTestWithCcIncludeVndk, android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) { variables.DeviceVndkVersion = StringPtr("current") - variables.ProductVndkVersion = StringPtr("current") variables.Platform_vndk_version = StringPtr("29") }), ) @@ -104,33 +103,6 @@ func testCc(t *testing.T, bp string) *android.TestContext { return result.TestContext } -// testCcNoVndk runs tests using the prepareForCcTest -// -// See testCc for an explanation as to how to stop using this deprecated method. -// -// deprecated -func testCcNoVndk(t *testing.T, bp string) *android.TestContext { - t.Helper() - config := TestConfig(t.TempDir(), android.Android, nil, bp, nil) - config.TestProductVariables.Platform_vndk_version = StringPtr("29") - - return testCcWithConfig(t, config) -} - -// testCcNoProductVndk runs tests using the prepareForCcTest -// -// See testCc for an explanation as to how to stop using this deprecated method. -// -// deprecated -func testCcNoProductVndk(t *testing.T, bp string) *android.TestContext { - t.Helper() - config := TestConfig(t.TempDir(), android.Android, nil, bp, nil) - config.TestProductVariables.DeviceVndkVersion = StringPtr("current") - config.TestProductVariables.Platform_vndk_version = StringPtr("29") - - return testCcWithConfig(t, config) -} - // testCcErrorWithConfig runs tests using the prepareForCcTest // // See testCc for an explanation as to how to stop using this deprecated method. @@ -167,7 +139,6 @@ func testCcErrorProductVndk(t *testing.T, pattern string, bp string) { t.Helper() config := TestConfig(t.TempDir(), android.Android, nil, bp, nil) config.TestProductVariables.DeviceVndkVersion = StringPtr("current") - config.TestProductVariables.ProductVndkVersion = StringPtr("current") config.TestProductVariables.Platform_vndk_version = StringPtr("29") testCcErrorWithConfig(t, pattern, config) return @@ -523,7 +494,6 @@ func TestVndk(t *testing.T) { config := TestConfig(t.TempDir(), android.Android, nil, bp, nil) config.TestProductVariables.DeviceVndkVersion = StringPtr("current") - config.TestProductVariables.ProductVndkVersion = StringPtr("current") config.TestProductVariables.Platform_vndk_version = StringPtr("29") ctx := testCcWithConfig(t, config) @@ -889,63 +859,6 @@ func TestTestLibraryTestSuites(t *testing.T) { } } -func TestVndkWhenVndkVersionIsNotSet(t *testing.T) { - t.Parallel() - ctx := testCcNoVndk(t, ` - cc_library { - name: "libvndk", - vendor_available: true, - product_available: true, - vndk: { - enabled: true, - }, - nocrt: true, - } - cc_library { - name: "libvndk-private", - vendor_available: true, - product_available: true, - vndk: { - enabled: true, - private: true, - }, - nocrt: true, - } - - cc_library { - name: "libllndk", - llndk: { - symbol_file: "libllndk.map.txt", - export_llndk_headers: ["libllndk_headers"], - } - } - - cc_library_headers { - name: "libllndk_headers", - llndk: { - symbol_file: "libllndk.map.txt", - }, - export_include_dirs: ["include"], - } - `) - - checkVndkOutput(t, ctx, "vndk/vndk.libraries.txt", []string{ - "LLNDK: libc.so", - "LLNDK: libdl.so", - "LLNDK: libft2.so", - "LLNDK: libllndk.so", - "LLNDK: libm.so", - "VNDK-SP: libc++.so", - "VNDK-core: libvndk-private.so", - "VNDK-core: libvndk.so", - "VNDK-private: libft2.so", - "VNDK-private: libvndk-private.so", - "VNDK-product: libc++.so", - "VNDK-product: libvndk-private.so", - "VNDK-product: libvndk.so", - }) -} - func TestVndkModuleError(t *testing.T) { t.Parallel() // Check the error message for vendor_available and product_available properties. @@ -1111,6 +1024,7 @@ func TestVndkDepError(t *testing.T) { cc_library { name: "libnonvndk", vendor_available: true, + product_available: true, nocrt: true, } `) @@ -1132,6 +1046,7 @@ func TestVndkDepError(t *testing.T) { cc_library { name: "libnonvndk", vendor_available: true, + product_available: true, nocrt: true, } `) @@ -1153,6 +1068,7 @@ func TestVndkDepError(t *testing.T) { cc_library { name: "libnonvndk", vendor_available: true, + product_available: true, nocrt: true, } `) @@ -1175,6 +1091,7 @@ func TestVndkDepError(t *testing.T) { cc_library { name: "libnonvndk", vendor_available: true, + product_available: true, nocrt: true, } `) @@ -1390,6 +1307,7 @@ func TestCheckVndkMembershipBeforeDoubleLoadable(t *testing.T) { cc_library { name: "libanothervndksp", vendor_available: true, + product_available: true, } `) } @@ -1467,7 +1385,6 @@ func TestVndkExt(t *testing.T) { ` config := TestConfig(t.TempDir(), android.Android, nil, bp, nil) config.TestProductVariables.DeviceVndkVersion = StringPtr("current") - config.TestProductVariables.ProductVndkVersion = StringPtr("current") config.TestProductVariables.Platform_vndk_version = StringPtr("29") ctx := testCcWithConfig(t, config) @@ -1482,70 +1399,6 @@ func TestVndkExt(t *testing.T) { assertString(t, mod_product.outputFile.Path().Base(), "libvndk2-suffix.so") } -func TestVndkExtWithoutBoardVndkVersion(t *testing.T) { - t.Parallel() - // This test checks the VNDK-Ext properties when BOARD_VNDK_VERSION is not set. - ctx := testCcNoVndk(t, ` - cc_library { - name: "libvndk", - vendor_available: true, - product_available: true, - vndk: { - enabled: true, - }, - nocrt: true, - } - - cc_library { - name: "libvndk_ext", - vendor: true, - vndk: { - enabled: true, - extends: "libvndk", - }, - nocrt: true, - } - `) - - // Ensures that the core variant of "libvndk_ext" can be found. - mod := ctx.ModuleForTests("libvndk_ext", coreVariant).Module().(*Module) - if extends := mod.getVndkExtendsModuleName(); extends != "libvndk" { - t.Errorf("\"libvndk_ext\" must extend from \"libvndk\" but get %q", extends) - } -} - -func TestVndkExtWithoutProductVndkVersion(t *testing.T) { - t.Parallel() - // This test checks the VNDK-Ext properties when PRODUCT_PRODUCT_VNDK_VERSION is not set. - ctx := testCcNoProductVndk(t, ` - cc_library { - name: "libvndk", - vendor_available: true, - product_available: true, - vndk: { - enabled: true, - }, - nocrt: true, - } - - cc_library { - name: "libvndk_ext_product", - product_specific: true, - vndk: { - enabled: true, - extends: "libvndk", - }, - nocrt: true, - } - `) - - // Ensures that the core variant of "libvndk_ext_product" can be found. - mod := ctx.ModuleForTests("libvndk_ext_product", coreVariant).Module().(*Module) - if extends := mod.getVndkExtendsModuleName(); extends != "libvndk" { - t.Errorf("\"libvndk_ext_product\" must extend from \"libvndk\" but get %q", extends) - } -} - func TestVndkExtError(t *testing.T) { t.Parallel() // This test ensures an error is emitted in ill-formed vndk-ext definition. @@ -1920,7 +1773,6 @@ func TestProductVndkExtDependency(t *testing.T) { ` config := TestConfig(t.TempDir(), android.Android, nil, bp, nil) config.TestProductVariables.DeviceVndkVersion = StringPtr("current") - config.TestProductVariables.ProductVndkVersion = StringPtr("current") config.TestProductVariables.Platform_vndk_version = StringPtr("29") testCcWithConfig(t, config) @@ -3034,24 +2886,6 @@ func TestExcludeRuntimeLibs(t *testing.T) { checkRuntimeLibs(t, nil, module) } -func TestRuntimeLibsNoVndk(t *testing.T) { - t.Parallel() - ctx := testCcNoVndk(t, runtimeLibAndroidBp) - - // If DeviceVndkVersion is not defined, then runtime_libs are copied as-is. - - variant := "android_arm64_armv8-a_shared" - - module := ctx.ModuleForTests("libvendor_available1", variant).Module().(*Module) - checkRuntimeLibs(t, []string{"liball_available"}, module) - - module = ctx.ModuleForTests("libvendor2", variant).Module().(*Module) - checkRuntimeLibs(t, []string{"liball_available", "libvendor1", "libproduct_vendor"}, module) - - module = ctx.ModuleForTests("libproduct2", variant).Module().(*Module) - checkRuntimeLibs(t, []string{"liball_available", "libproduct1", "libproduct_vendor"}, module) -} - func checkStaticLibs(t *testing.T, expected []string, module *Module) { t.Helper() actual := module.Properties.AndroidMkStaticLibs diff --git a/cc/genrule.go b/cc/genrule.go index d1c4c2a2f..63c728cb6 100644 --- a/cc/genrule.go +++ b/cc/genrule.go @@ -84,7 +84,7 @@ func (g *GenruleExtraProperties) CoreVariantNeeded(ctx android.BaseModuleContext return true } - if ctx.DeviceConfig().ProductVndkVersion() != "" && ctx.ProductSpecific() { + if ctx.ProductSpecific() { return false } @@ -134,15 +134,8 @@ func (g *GenruleExtraProperties) ExtraImageVariations(ctx android.BaseModuleCont } } - if ctx.DeviceConfig().ProductVndkVersion() == "" { - return variants - } - if Bool(g.Product_available) || ctx.ProductSpecific() { variants = append(variants, ProductVariationPrefix+ctx.DeviceConfig().PlatformVndkVersion()) - if vndkVersion := ctx.DeviceConfig().ProductVndkVersion(); vndkVersion != "current" { - variants = append(variants, ProductVariationPrefix+vndkVersion) - } } return variants diff --git a/cc/image.go b/cc/image.go index f91762adc..239f1db37 100644 --- a/cc/image.go +++ b/cc/image.go @@ -427,7 +427,6 @@ func MutateImage(mctx android.BaseModuleContext, m ImageMutatableModule) { platformVndkVersion := mctx.DeviceConfig().PlatformVndkVersion() boardVndkVersion := mctx.DeviceConfig().VndkVersion() - productVndkVersion := mctx.DeviceConfig().ProductVndkVersion() recoverySnapshotVersion := mctx.DeviceConfig().RecoverySnapshotVersion() usingRecoverySnapshot := recoverySnapshotVersion != "current" && recoverySnapshotVersion != "" @@ -444,9 +443,6 @@ func MutateImage(mctx android.BaseModuleContext, m ImageMutatableModule) { if boardVndkVersion == "current" { boardVndkVersion = platformVndkVersion } - if productVndkVersion == "current" { - productVndkVersion = platformVndkVersion - } if m.NeedsLlndkVariants() { // This is an LLNDK library. The implementation of the library will be on /system, @@ -462,9 +458,6 @@ func MutateImage(mctx android.BaseModuleContext, m ImageMutatableModule) { if needVndkVersionVendorVariantForLlndk { vendorVariants = append(vendorVariants, boardVndkVersion) } - if productVndkVersion != "" { - productVariants = append(productVariants, productVndkVersion) - } } else if m.NeedsVendorPublicLibraryVariants() { // A vendor public library has the implementation on /vendor, with stub variants // for system and product. @@ -473,9 +466,6 @@ func MutateImage(mctx android.BaseModuleContext, m ImageMutatableModule) { if platformVndkVersion != "" { productVariants = append(productVariants, platformVndkVersion) } - if productVndkVersion != "" { - productVariants = append(productVariants, productVndkVersion) - } } else if boardVndkVersion == "" { // If the device isn't compiling against the VNDK, we always // use the core mode. @@ -507,10 +497,6 @@ func MutateImage(mctx android.BaseModuleContext, m ImageMutatableModule) { // product_available modules are available to /product. if m.HasProductVariant() { productVariants = append(productVariants, platformVndkVersion) - // VNDK is always PLATFORM_VNDK_VERSION - if !m.IsVndk() { - productVariants = append(productVariants, productVndkVersion) - } } } else if vendorSpecific && m.SdkVersion() == "" { // This will be available in /vendor (or /odm) only @@ -538,17 +524,10 @@ func MutateImage(mctx android.BaseModuleContext, m ImageMutatableModule) { coreVariantNeeded = true } - if boardVndkVersion != "" && productVndkVersion != "" { - if coreVariantNeeded && productSpecific && m.SdkVersion() == "" { - // The module has "product_specific: true" that does not create core variant. - coreVariantNeeded = false - productVariants = append(productVariants, productVndkVersion) - } - } else { - // Unless PRODUCT_PRODUCT_VNDK_VERSION is set, product partition has no - // restriction to use system libs. - // No product variants defined in this case. - productVariants = []string{} + if coreVariantNeeded && productSpecific && m.SdkVersion() == "" { + // The module has "product_specific: true" that does not create core variant. + coreVariantNeeded = false + productVariants = append(productVariants, platformVndkVersion) } if m.RamdiskAvailable() { diff --git a/rust/rust_test.go b/rust/rust_test.go index 835114c13..ea2a3e64a 100644 --- a/rust/rust_test.go +++ b/rust/rust_test.go @@ -40,7 +40,6 @@ var prepareForRustTest = android.GroupFixturePreparers( PrepareForTestWithRustIncludeVndk, android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) { variables.DeviceVndkVersion = StringPtr("current") - variables.ProductVndkVersion = StringPtr("current") variables.Platform_vndk_version = StringPtr("29") }), ) @@ -105,7 +104,6 @@ func testRustVndkFsVersions(t *testing.T, bp string, fs android.MockFS, device_v android.FixtureModifyProductVariables( func(variables android.FixtureProductVariables) { variables.DeviceVndkVersion = StringPtr(device_version) - variables.ProductVndkVersion = StringPtr(product_version) variables.Platform_vndk_version = StringPtr(vndk_version) }, ), @@ -173,7 +171,6 @@ func testRustVndkFsError(t *testing.T, pattern string, bp string, fs android.Moc android.FixtureModifyProductVariables( func(variables android.FixtureProductVariables) { variables.DeviceVndkVersion = StringPtr("current") - variables.ProductVndkVersion = StringPtr("current") variables.Platform_vndk_version = StringPtr("VER") }, ), diff --git a/sysprop/sysprop_test.go b/sysprop/sysprop_test.go index 80b86e059..e51fe39c9 100644 --- a/sysprop/sysprop_test.go +++ b/sysprop/sysprop_test.go @@ -42,6 +42,7 @@ func test(t *testing.T, bp string) *android.TestResult { cc_library_headers { name: "libbase_headers", vendor_available: true, + product_available: true, recovery_available: true, } @@ -250,6 +251,16 @@ func TestSyspropLibrary(t *testing.T) { result.ModuleForTests("libsysprop-odm", variant) } + // product variant of vendor-owned sysprop_library + for _, variant := range []string{ + "android_product.29_arm_armv7-a-neon_shared", + "android_product.29_arm_armv7-a-neon_static", + "android_product.29_arm64_armv8-a_shared", + "android_product.29_arm64_armv8-a_static", + } { + result.ModuleForTests("libsysprop-vendor-on-product", variant) + } + for _, variant := range []string{ "android_arm_armv7-a-neon_shared", "android_arm_armv7-a-neon_static", @@ -259,9 +270,6 @@ func TestSyspropLibrary(t *testing.T) { library := result.ModuleForTests("libsysprop-platform", variant).Module().(*cc.Module) expectedApexAvailableOnLibrary := []string{"//apex_available:platform"} android.AssertDeepEquals(t, "apex available property on libsysprop-platform", expectedApexAvailableOnLibrary, library.ApexProperties.Apex_available) - - // product variant of vendor-owned sysprop_library - result.ModuleForTests("libsysprop-vendor-on-product", variant) } result.ModuleForTests("sysprop-platform", "android_common") @@ -272,15 +280,15 @@ func TestSyspropLibrary(t *testing.T) { // Check for exported includes coreVariant := "android_arm64_armv8-a_static" vendorVariant := "android_vendor.29_arm64_armv8-a_static" + productVariant := "android_product.29_arm64_armv8-a_static" platformInternalPath := "libsysprop-platform/android_arm64_armv8-a_static/gen/sysprop/include" - platformPublicCorePath := "libsysprop-platform/android_arm64_armv8-a_static/gen/sysprop/public/include" platformPublicVendorPath := "libsysprop-platform/android_vendor.29_arm64_armv8-a_static/gen/sysprop/public/include" - platformOnProductPath := "libsysprop-platform-on-product/android_arm64_armv8-a_static/gen/sysprop/public/include" + platformOnProductPath := "libsysprop-platform-on-product/android_product.29_arm64_armv8-a_static/gen/sysprop/public/include" vendorInternalPath := "libsysprop-vendor/android_vendor.29_arm64_armv8-a_static/gen/sysprop/include" - vendorPublicPath := "libsysprop-vendor-on-product/android_arm64_armv8-a_static/gen/sysprop/public/include" + vendorOnProductPath := "libsysprop-vendor-on-product/android_product.29_arm64_armv8-a_static/gen/sysprop/public/include" platformClient := result.ModuleForTests("cc-client-platform", coreVariant) platformFlags := platformClient.Rule("cc").Args["cFlags"] @@ -294,14 +302,14 @@ func TestSyspropLibrary(t *testing.T) { // platform-static should use platform's internal header android.AssertStringDoesContain(t, "flags for platform-static", platformStaticFlags, platformInternalPath) - productClient := result.ModuleForTests("cc-client-product", coreVariant) + productClient := result.ModuleForTests("cc-client-product", productVariant) productFlags := productClient.Rule("cc").Args["cFlags"] // Product should use platform's and vendor's public headers if !strings.Contains(productFlags, platformOnProductPath) || - !strings.Contains(productFlags, vendorPublicPath) { + !strings.Contains(productFlags, vendorOnProductPath) { t.Errorf("flags for product must contain %#v and %#v, but was %#v.", - platformPublicCorePath, vendorPublicPath, productFlags) + platformOnProductPath, vendorOnProductPath, productFlags) } vendorClient := result.ModuleForTests("cc-client-vendor", vendorVariant)