diff options
Diffstat (limited to 'cc')
-rw-r--r-- | cc/cc.go | 9 | ||||
-rw-r--r-- | cc/cc_test.go | 59 | ||||
-rw-r--r-- | cc/image.go | 55 |
3 files changed, 98 insertions, 25 deletions
@@ -25,6 +25,7 @@ import ( "strings" "android/soong/testing" + "github.com/google/blueprint" "github.com/google/blueprint/proptools" @@ -300,8 +301,8 @@ type BaseProperties struct { // Set by DepsMutator. AndroidMkSystemSharedLibs []string `blueprint:"mutated"` - // The name of the image this module is built for, suffixed with a '.' - ImageVariationPrefix string `blueprint:"mutated"` + // The name of the image this module is built for + ImageVariation string `blueprint:"mutated"` // The VNDK version this module is built against. If empty, the module is not // build against the VNDK. @@ -2386,9 +2387,9 @@ func GetSnapshot(c LinkableInterface, snapshotInfo **SnapshotInfo, actx android. // Only retrieve the snapshot on demand in order to avoid circular dependencies // between the modules in the snapshot and the snapshot itself. var snapshotModule []blueprint.Module - if c.InVendor() && c.VndkVersion() == actx.DeviceConfig().VndkVersion() { + if c.InVendor() && c.VndkVersion() == actx.DeviceConfig().VndkVersion() && actx.OtherModuleExists("vendor_snapshot") { snapshotModule = actx.AddVariationDependencies(nil, nil, "vendor_snapshot") - } else if recoverySnapshotVersion := actx.DeviceConfig().RecoverySnapshotVersion(); recoverySnapshotVersion != "current" && recoverySnapshotVersion != "" && c.InRecovery() { + } else if recoverySnapshotVersion := actx.DeviceConfig().RecoverySnapshotVersion(); recoverySnapshotVersion != "current" && recoverySnapshotVersion != "" && c.InRecovery() && actx.OtherModuleExists("recovery_snapshot") { snapshotModule = actx.AddVariationDependencies(nil, nil, "recovery_snapshot") } if len(snapshotModule) > 0 && snapshotModule[0] != nil { diff --git a/cc/cc_test.go b/cc/cc_test.go index 5c5275ede..321bd380b 100644 --- a/cc/cc_test.go +++ b/cc/cc_test.go @@ -26,6 +26,8 @@ import ( "android/soong/aidl_library" "android/soong/android" + + "github.com/google/blueprint" ) func init() { @@ -45,6 +47,14 @@ var prepareForCcTest = android.GroupFixturePreparers( }), ) +// TODO(b/316829758) Update prepareForCcTest with this configuration and remove prepareForCcTestWithoutVndk +var prepareForCcTestWithoutVndk = android.GroupFixturePreparers( + PrepareForIntegrationTestWithCc, + android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) { + variables.VendorApiLevel = StringPtr("202404") + }), +) + var apexVariationName = "apex28" var apexVersion = "28" @@ -2640,6 +2650,7 @@ func TestLlndkLibrary(t *testing.T) { name: "libexternal_headers", export_include_dirs: ["include"], vendor_available: true, + product_available: true, } cc_library_headers { name: "libexternal_llndk_headers", @@ -4784,3 +4795,51 @@ func TestStrippedAllOutputFile(t *testing.T) { return } } + +// TODO(b/316829758) Remove this test and do not set VNDK version from other tests +func TestImageVariantsWithoutVndk(t *testing.T) { + t.Parallel() + + bp := ` + cc_binary { + name: "binfoo", + srcs: ["binfoo.cc"], + vendor_available: true, + product_available: true, + shared_libs: ["libbar"] + } + cc_library { + name: "libbar", + srcs: ["libbar.cc"], + vendor_available: true, + product_available: true, + } + ` + + ctx := prepareForCcTestWithoutVndk.RunTestWithBp(t, bp) + + hasDep := func(m android.Module, wantDep android.Module) bool { + t.Helper() + var found bool + ctx.VisitDirectDeps(m, func(dep blueprint.Module) { + if dep == wantDep { + found = true + } + }) + return found + } + + testDepWithVariant := func(imageVariant string) { + imageVariantStr := "" + if imageVariant != "core" { + imageVariantStr = "_" + imageVariant + } + binFooModule := ctx.ModuleForTests("binfoo", "android"+imageVariantStr+"_arm64_armv8-a").Module() + libBarModule := ctx.ModuleForTests("libbar", "android"+imageVariantStr+"_arm64_armv8-a_shared").Module() + android.AssertBoolEquals(t, "binfoo should have dependency on libbar with image variant "+imageVariant, true, hasDep(binFooModule, libBarModule)) + } + + testDepWithVariant("core") + testDepWithVariant("vendor") + testDepWithVariant("product") +} diff --git a/cc/image.go b/cc/image.go index 4c0c72280..9eec25588 100644 --- a/cc/image.go +++ b/cc/image.go @@ -42,10 +42,18 @@ const ( ) const ( + // VendorVariation is the variant name used for /vendor code that does not + // compile against the VNDK. + VendorVariation = "vendor" + // VendorVariationPrefix is the variant prefix used for /vendor code that compiles // against the VNDK. VendorVariationPrefix = "vendor." + // ProductVariation is the variant name used for /product code that does not + // compile against the VNDK. + ProductVariation = "product" + // ProductVariationPrefix is the variant prefix used for /product code that compiles // against the VNDK. ProductVariationPrefix = "product." @@ -112,12 +120,12 @@ func (c *Module) HasNonSystemVariants() bool { // Returns true if the module is "product" variant. Usually these modules are installed in /product func (c *Module) InProduct() bool { - return c.Properties.ImageVariationPrefix == ProductVariationPrefix + return c.Properties.ImageVariation == ProductVariation } // Returns true if the module is "vendor" variant. Usually these modules are installed in /vendor func (c *Module) InVendor() bool { - return c.Properties.ImageVariationPrefix == VendorVariationPrefix + return c.Properties.ImageVariation == VendorVariation } func (c *Module) InRamdisk() bool { @@ -439,10 +447,8 @@ func MutateImage(mctx android.BaseModuleContext, m ImageMutatableModule) { // and vendor and product variants will be created with LLNDK stubs. // The LLNDK libraries need vendor variants even if there is no VNDK. coreVariantNeeded = true - if platformVndkVersion != "" { - vendorVariants = append(vendorVariants, platformVndkVersion) - productVariants = append(productVariants, platformVndkVersion) - } + vendorVariants = append(vendorVariants, platformVndkVersion) + productVariants = append(productVariants, platformVndkVersion) // Generate vendor variants for boardVndkVersion only if the VNDK snapshot does not // provide the LLNDK stub libraries. if needVndkVersionVendorVariantForLlndk { @@ -453,13 +459,7 @@ func MutateImage(mctx android.BaseModuleContext, m ImageMutatableModule) { // for system and product. coreVariantNeeded = true vendorVariants = append(vendorVariants, boardVndkVersion) - if platformVndkVersion != "" { - productVariants = append(productVariants, platformVndkVersion) - } - } else if boardVndkVersion == "" { - // If the device isn't compiling against the VNDK, we always - // use the core mode. - coreVariantNeeded = true + productVariants = append(productVariants, platformVndkVersion) } else if m.IsSnapshotPrebuilt() { // Make vendor variants only for the versions in BOARD_VNDK_VERSION and // PRODUCT_EXTRA_VNDK_VERSIONS. @@ -557,11 +557,19 @@ func MutateImage(mctx android.BaseModuleContext, m ImageMutatableModule) { } for _, variant := range android.FirstUniqueStrings(vendorVariants) { - m.AppendExtraVariant(VendorVariationPrefix + variant) + if variant == "" { + m.AppendExtraVariant(VendorVariation) + } else { + m.AppendExtraVariant(VendorVariationPrefix + variant) + } } for _, variant := range android.FirstUniqueStrings(productVariants) { - m.AppendExtraVariant(ProductVariationPrefix + variant) + if variant == "" { + m.AppendExtraVariant(ProductVariation) + } else { + m.AppendExtraVariant(ProductVariationPrefix + variant) + } } m.SetRamdiskVariantNeeded(ramdiskVariantNeeded) @@ -672,9 +680,12 @@ func (c *Module) SetImageVariation(ctx android.BaseModuleContext, variant string } else if variant == android.RecoveryVariation { m.MakeAsPlatform() squashRecoverySrcs(m) - } else if strings.HasPrefix(variant, VendorVariationPrefix) { - m.Properties.ImageVariationPrefix = VendorVariationPrefix - m.Properties.VndkVersion = strings.TrimPrefix(variant, VendorVariationPrefix) + } else if strings.HasPrefix(variant, VendorVariation) { + m.Properties.ImageVariation = VendorVariation + + if strings.HasPrefix(variant, VendorVariationPrefix) { + m.Properties.VndkVersion = strings.TrimPrefix(variant, VendorVariationPrefix) + } squashVendorSrcs(m) // Makefile shouldn't know vendor modules other than BOARD_VNDK_VERSION. @@ -684,9 +695,11 @@ func (c *Module) SetImageVariation(ctx android.BaseModuleContext, variant string m.Properties.HideFromMake = true m.HideFromMake() } - } else if strings.HasPrefix(variant, ProductVariationPrefix) { - m.Properties.ImageVariationPrefix = ProductVariationPrefix - m.Properties.VndkVersion = strings.TrimPrefix(variant, ProductVariationPrefix) + } else if strings.HasPrefix(variant, ProductVariation) { + m.Properties.ImageVariation = ProductVariation + if strings.HasPrefix(variant, ProductVariationPrefix) { + m.Properties.VndkVersion = strings.TrimPrefix(variant, ProductVariationPrefix) + } squashProductSrcs(m) } |