Merge "Generate image variation without version" into main am: 6284e0a935
am: b562b4a727
am: a073285ee6
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/2894623 Change-Id: Idf03fc8ac2d339814abd8f2cd2b17c5e1137a826 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -148,6 +148,7 @@ func TestAndroidMkCcLibrary(t *testing.T) {
|
||||
cc_library {
|
||||
name: "server_configurable_flags",
|
||||
srcs: ["server_configurable_flags.cc"],
|
||||
vendor_available: true,
|
||||
}
|
||||
`
|
||||
result := android.GroupFixturePreparers(
|
||||
@@ -155,7 +156,7 @@ func TestAndroidMkCcLibrary(t *testing.T) {
|
||||
cc.PrepareForTestWithCcDefaultModules).
|
||||
ExtendWithErrorHandler(android.FixtureExpectsNoErrors).RunTestWithBp(t, bp)
|
||||
|
||||
module := result.ModuleForTests("my_cc_library", "android_arm64_armv8-a_shared").Module()
|
||||
module := result.ModuleForTests("my_cc_library", "android_vendor_arm64_armv8-a_shared").Module()
|
||||
|
||||
entry := android.AndroidMkEntriesForTest(t, result.TestContext, module)[0]
|
||||
|
||||
|
17
apex/apex.go
17
apex/apex.go
@@ -719,7 +719,7 @@ func (a *apexBundle) combineProperties(ctx android.BottomUpMutatorContext) {
|
||||
|
||||
// getImageVariationPair returns a pair for the image variation name as its
|
||||
// prefix and suffix. The prefix indicates whether it's core/vendor/product and the
|
||||
// suffix indicates the vndk version when it's vendor or product.
|
||||
// suffix indicates the vndk version for vendor/product if vndk is enabled.
|
||||
// getImageVariation can simply join the result of this function to get the
|
||||
// image variation name.
|
||||
func (a *apexBundle) getImageVariationPair(deviceConfig android.DeviceConfig) (string, string) {
|
||||
@@ -727,8 +727,8 @@ func (a *apexBundle) getImageVariationPair(deviceConfig android.DeviceConfig) (s
|
||||
return cc.VendorVariationPrefix, a.vndkVersion(deviceConfig)
|
||||
}
|
||||
|
||||
var prefix string
|
||||
var vndkVersion string
|
||||
prefix := android.CoreVariation
|
||||
vndkVersion := ""
|
||||
if deviceConfig.VndkVersion() != "" {
|
||||
if a.SocSpecific() || a.DeviceSpecific() {
|
||||
prefix = cc.VendorVariationPrefix
|
||||
@@ -737,15 +737,18 @@ func (a *apexBundle) getImageVariationPair(deviceConfig android.DeviceConfig) (s
|
||||
prefix = cc.ProductVariationPrefix
|
||||
vndkVersion = deviceConfig.PlatformVndkVersion()
|
||||
}
|
||||
} else {
|
||||
if a.SocSpecific() || a.DeviceSpecific() {
|
||||
prefix = cc.VendorVariation
|
||||
} else if a.ProductSpecific() {
|
||||
prefix = cc.ProductVariation
|
||||
}
|
||||
}
|
||||
if vndkVersion == "current" {
|
||||
vndkVersion = deviceConfig.PlatformVndkVersion()
|
||||
}
|
||||
if vndkVersion != "" {
|
||||
return prefix, vndkVersion
|
||||
}
|
||||
|
||||
return android.CoreVariation, "" // The usual case
|
||||
return prefix, vndkVersion
|
||||
}
|
||||
|
||||
// getImageVariation returns the image variant name for this apexBundle. In most cases, it's simply
|
||||
|
9
cc/cc.go
9
cc/cc.go
@@ -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.
|
||||
@@ -2427,9 +2428,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 {
|
||||
|
@@ -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")
|
||||
}
|
||||
|
55
cc/image.go
55
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)
|
||||
}
|
||||
|
||||
|
@@ -2109,7 +2109,7 @@ func TestJNISDK(t *testing.T) {
|
||||
Output("libjni.so").Output.String()
|
||||
sdkJNI := ctx.ModuleForTests("libjni", "android_arm64_armv8-a_sdk_shared").
|
||||
Output("libjni.so").Output.String()
|
||||
vendorJNI := ctx.ModuleForTests("libvendorjni", "android_arm64_armv8-a_shared").
|
||||
vendorJNI := ctx.ModuleForTests("libvendorjni", "android_vendor_arm64_armv8-a_shared").
|
||||
Output("libvendorjni.so").Output.String()
|
||||
|
||||
for _, test := range testCases {
|
||||
|
@@ -184,12 +184,12 @@ func (mod *Module) HasNonSystemVariants() bool {
|
||||
}
|
||||
|
||||
func (mod *Module) InProduct() bool {
|
||||
return mod.Properties.ImageVariationPrefix == cc.ProductVariationPrefix
|
||||
return mod.Properties.ImageVariation == cc.ProductVariation
|
||||
}
|
||||
|
||||
// Returns true if the module is "vendor" variant. Usually these modules are installed in /vendor
|
||||
func (mod *Module) InVendor() bool {
|
||||
return mod.Properties.ImageVariationPrefix == cc.VendorVariationPrefix
|
||||
return mod.Properties.ImageVariation == cc.VendorVariation
|
||||
}
|
||||
|
||||
func (mod *Module) SetImageVariation(ctx android.BaseModuleContext, variant string, module android.Module) {
|
||||
@@ -198,9 +198,11 @@ func (mod *Module) SetImageVariation(ctx android.BaseModuleContext, variant stri
|
||||
m.MakeAsPlatform()
|
||||
} else if variant == android.RecoveryVariation {
|
||||
m.MakeAsPlatform()
|
||||
} else if strings.HasPrefix(variant, cc.VendorVariationPrefix) {
|
||||
m.Properties.ImageVariationPrefix = cc.VendorVariationPrefix
|
||||
m.Properties.VndkVersion = strings.TrimPrefix(variant, cc.VendorVariationPrefix)
|
||||
} else if strings.HasPrefix(variant, cc.VendorVariation) {
|
||||
m.Properties.ImageVariation = cc.VendorVariation
|
||||
if strings.HasPrefix(variant, cc.VendorVariationPrefix) {
|
||||
m.Properties.VndkVersion = strings.TrimPrefix(variant, cc.VendorVariationPrefix)
|
||||
}
|
||||
|
||||
// Makefile shouldn't know vendor modules other than BOARD_VNDK_VERSION.
|
||||
// Hide other vendor variants to avoid collision.
|
||||
@@ -209,9 +211,11 @@ func (mod *Module) SetImageVariation(ctx android.BaseModuleContext, variant stri
|
||||
m.Properties.HideFromMake = true
|
||||
m.HideFromMake()
|
||||
}
|
||||
} else if strings.HasPrefix(variant, cc.ProductVariationPrefix) {
|
||||
m.Properties.ImageVariationPrefix = cc.ProductVariationPrefix
|
||||
m.Properties.VndkVersion = strings.TrimPrefix(variant, cc.ProductVariationPrefix)
|
||||
} else if strings.HasPrefix(variant, cc.ProductVariation) {
|
||||
m.Properties.ImageVariation = cc.ProductVariation
|
||||
if strings.HasPrefix(variant, cc.ProductVariationPrefix) {
|
||||
m.Properties.VndkVersion = strings.TrimPrefix(variant, cc.ProductVariationPrefix)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -20,6 +20,7 @@ import (
|
||||
|
||||
"android/soong/bloaty"
|
||||
"android/soong/testing"
|
||||
|
||||
"github.com/google/blueprint"
|
||||
"github.com/google/blueprint/proptools"
|
||||
|
||||
@@ -69,9 +70,9 @@ type BaseProperties struct {
|
||||
AndroidMkProcMacroLibs []string `blueprint:"mutated"`
|
||||
AndroidMkStaticLibs []string `blueprint:"mutated"`
|
||||
|
||||
ImageVariationPrefix string `blueprint:"mutated"`
|
||||
VndkVersion string `blueprint:"mutated"`
|
||||
SubName string `blueprint:"mutated"`
|
||||
ImageVariation string `blueprint:"mutated"`
|
||||
VndkVersion string `blueprint:"mutated"`
|
||||
SubName string `blueprint:"mutated"`
|
||||
|
||||
// SubName is used by CC for tracking image variants / SDK versions. RustSubName is used for Rust-specific
|
||||
// subnaming which shouldn't be visible to CC modules (such as the rlib stdlinkage subname). This should be
|
||||
|
Reference in New Issue
Block a user