Merge changes I059e639b,I4ebe1da8,Idf4fd37a,Id90082b5 into rvc-dev am: 2743c1def6
Original change: https://googleplex-android-review.googlesource.com/c/platform/build/soong/+/11698189 Change-Id: I62157287035bee39b902421c37cdd7e3213a6222
This commit is contained in:
@@ -548,6 +548,25 @@ func (c *vendorSnapshotBinaryDecorator) AndroidMkEntries(ctx AndroidMkContext, e
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *vendorSnapshotObjectLinker) AndroidMkEntries(ctx AndroidMkContext, entries *android.AndroidMkEntries) {
|
||||||
|
entries.Class = "STATIC_LIBRARIES"
|
||||||
|
|
||||||
|
if c.androidMkVendorSuffix {
|
||||||
|
entries.SubName = vendorSuffix
|
||||||
|
} else {
|
||||||
|
entries.SubName = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
entries.ExtraFooters = append(entries.ExtraFooters,
|
||||||
|
func(w io.Writer, name, prefix, moduleDir string, entries *android.AndroidMkEntries) {
|
||||||
|
out := entries.OutputFile.Path()
|
||||||
|
varname := fmt.Sprintf("SOONG_%sOBJECT_%s%s", prefix, name, entries.SubName)
|
||||||
|
|
||||||
|
fmt.Fprintf(w, "\n%s := %s\n", varname, out.String())
|
||||||
|
fmt.Fprintln(w, ".KATI_READONLY: "+varname)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func (c *ndkPrebuiltStlLinker) AndroidMkEntries(ctx AndroidMkContext, entries *android.AndroidMkEntries) {
|
func (c *ndkPrebuiltStlLinker) AndroidMkEntries(ctx AndroidMkContext, entries *android.AndroidMkEntries) {
|
||||||
entries.Class = "SHARED_LIBRARIES"
|
entries.Class = "SHARED_LIBRARIES"
|
||||||
}
|
}
|
||||||
|
@@ -231,6 +231,10 @@ func (binary *binaryDecorator) staticBinary() bool {
|
|||||||
return binary.static()
|
return binary.static()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (binary *binaryDecorator) binary() bool {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
func (binary *binaryDecorator) linkerFlags(ctx ModuleContext, flags Flags) Flags {
|
func (binary *binaryDecorator) linkerFlags(ctx ModuleContext, flags Flags) Flags {
|
||||||
flags = binary.baseLinker.linkerFlags(ctx, flags)
|
flags = binary.baseLinker.linkerFlags(ctx, flags)
|
||||||
|
|
||||||
|
74
cc/cc.go
74
cc/cc.go
@@ -316,6 +316,8 @@ type ModuleContextIntf interface {
|
|||||||
static() bool
|
static() bool
|
||||||
staticBinary() bool
|
staticBinary() bool
|
||||||
header() bool
|
header() bool
|
||||||
|
binary() bool
|
||||||
|
object() bool
|
||||||
toolchain() config.Toolchain
|
toolchain() config.Toolchain
|
||||||
canUseSdk() bool
|
canUseSdk() bool
|
||||||
useSdk() bool
|
useSdk() bool
|
||||||
@@ -1017,14 +1019,8 @@ func (c *Module) nativeCoverage() bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *Module) isSnapshotPrebuilt() bool {
|
func (c *Module) isSnapshotPrebuilt() bool {
|
||||||
if _, ok := c.linker.(*vndkPrebuiltLibraryDecorator); ok {
|
if p, ok := c.linker.(interface{ isSnapshotPrebuilt() bool }); ok {
|
||||||
return true
|
return p.isSnapshotPrebuilt()
|
||||||
}
|
|
||||||
if _, ok := c.linker.(*vendorSnapshotLibraryDecorator); ok {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
if _, ok := c.linker.(*vendorSnapshotBinaryDecorator); ok {
|
|
||||||
return true
|
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@@ -1129,6 +1125,14 @@ func (ctx *moduleContextImpl) header() bool {
|
|||||||
return ctx.mod.header()
|
return ctx.mod.header()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ctx *moduleContextImpl) binary() bool {
|
||||||
|
return ctx.mod.binary()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ctx *moduleContextImpl) object() bool {
|
||||||
|
return ctx.mod.object()
|
||||||
|
}
|
||||||
|
|
||||||
func (ctx *moduleContextImpl) canUseSdk() bool {
|
func (ctx *moduleContextImpl) canUseSdk() bool {
|
||||||
return ctx.mod.canUseSdk()
|
return ctx.mod.canUseSdk()
|
||||||
}
|
}
|
||||||
@@ -1925,7 +1929,7 @@ func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) {
|
|||||||
if deps.StaticUnwinderIfLegacy {
|
if deps.StaticUnwinderIfLegacy {
|
||||||
actx.AddVariationDependencies([]blueprint.Variation{
|
actx.AddVariationDependencies([]blueprint.Variation{
|
||||||
{Mutator: "link", Variation: "static"},
|
{Mutator: "link", Variation: "static"},
|
||||||
}, staticUnwinderDepTag, staticUnwinder(actx))
|
}, staticUnwinderDepTag, rewriteSnapshotLibs(staticUnwinder(actx), vendorSnapshotStaticLibs))
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, lib := range deps.LateStaticLibs {
|
for _, lib := range deps.LateStaticLibs {
|
||||||
@@ -2006,11 +2010,13 @@ func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) {
|
|||||||
|
|
||||||
actx.AddVariationDependencies(nil, objDepTag, deps.ObjFiles...)
|
actx.AddVariationDependencies(nil, objDepTag, deps.ObjFiles...)
|
||||||
|
|
||||||
|
vendorSnapshotObjects := vendorSnapshotObjects(actx.Config())
|
||||||
|
|
||||||
if deps.CrtBegin != "" {
|
if deps.CrtBegin != "" {
|
||||||
actx.AddVariationDependencies(nil, CrtBeginDepTag, deps.CrtBegin)
|
actx.AddVariationDependencies(nil, CrtBeginDepTag, rewriteSnapshotLibs(deps.CrtBegin, vendorSnapshotObjects))
|
||||||
}
|
}
|
||||||
if deps.CrtEnd != "" {
|
if deps.CrtEnd != "" {
|
||||||
actx.AddVariationDependencies(nil, CrtEndDepTag, deps.CrtEnd)
|
actx.AddVariationDependencies(nil, CrtEndDepTag, rewriteSnapshotLibs(deps.CrtEnd, vendorSnapshotObjects))
|
||||||
}
|
}
|
||||||
if deps.LinkerFlagsFile != "" {
|
if deps.LinkerFlagsFile != "" {
|
||||||
actx.AddDependency(c, linkerFlagsDepTag, deps.LinkerFlagsFile)
|
actx.AddDependency(c, linkerFlagsDepTag, deps.LinkerFlagsFile)
|
||||||
@@ -2752,6 +2758,24 @@ func (c *Module) header() bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Module) binary() bool {
|
||||||
|
if b, ok := c.linker.(interface {
|
||||||
|
binary() bool
|
||||||
|
}); ok {
|
||||||
|
return b.binary()
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Module) object() bool {
|
||||||
|
if o, ok := c.linker.(interface {
|
||||||
|
object() bool
|
||||||
|
}); ok {
|
||||||
|
return o.object()
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Module) getMakeLinkType(actx android.ModuleContext) string {
|
func (c *Module) getMakeLinkType(actx android.ModuleContext) string {
|
||||||
if c.UseVndk() {
|
if c.UseVndk() {
|
||||||
if lib, ok := c.linker.(*llndkStubDecorator); ok {
|
if lib, ok := c.linker.(*llndkStubDecorator); ok {
|
||||||
@@ -3064,20 +3088,32 @@ func (m *Module) ImageMutatorBegin(mctx android.BaseModuleContext) {
|
|||||||
// This will be available in /system, /vendor and /product
|
// This will be available in /system, /vendor and /product
|
||||||
// or a /system directory that is available to vendor and product.
|
// or a /system directory that is available to vendor and product.
|
||||||
coreVariantNeeded = true
|
coreVariantNeeded = true
|
||||||
vendorVariants = append(vendorVariants, platformVndkVersion)
|
|
||||||
productVariants = append(productVariants, platformVndkVersion)
|
// We assume that modules under proprietary paths are compatible for
|
||||||
// VNDK modules must not create BOARD_VNDK_VERSION variant because its
|
// BOARD_VNDK_VERSION. The other modules are regarded as AOSP, or
|
||||||
// code is PLATFORM_VNDK_VERSION.
|
// PLATFORM_VNDK_VERSION.
|
||||||
// On the other hand, vendor_available modules which are not VNDK should
|
if isVendorProprietaryPath(mctx.ModuleDir()) {
|
||||||
// also build BOARD_VNDK_VERSION because it's installed in /vendor.
|
|
||||||
// vendor_available modules are also available to /product.
|
|
||||||
if !m.IsVndk() {
|
|
||||||
vendorVariants = append(vendorVariants, boardVndkVersion)
|
vendorVariants = append(vendorVariants, boardVndkVersion)
|
||||||
|
} else {
|
||||||
|
vendorVariants = append(vendorVariants, platformVndkVersion)
|
||||||
|
}
|
||||||
|
|
||||||
|
// vendor_available modules are also available to /product.
|
||||||
|
productVariants = append(productVariants, platformVndkVersion)
|
||||||
|
// VNDK is always PLATFORM_VNDK_VERSION
|
||||||
|
if !m.IsVndk() {
|
||||||
productVariants = append(productVariants, productVndkVersion)
|
productVariants = append(productVariants, productVndkVersion)
|
||||||
}
|
}
|
||||||
} else if vendorSpecific && String(m.Properties.Sdk_version) == "" {
|
} else if vendorSpecific && String(m.Properties.Sdk_version) == "" {
|
||||||
// This will be available in /vendor (or /odm) only
|
// This will be available in /vendor (or /odm) only
|
||||||
|
// We assume that modules under proprietary paths are compatible for
|
||||||
|
// BOARD_VNDK_VERSION. The other modules are regarded as AOSP, or
|
||||||
|
// PLATFORM_VNDK_VERSION.
|
||||||
|
if isVendorProprietaryPath(mctx.ModuleDir()) {
|
||||||
vendorVariants = append(vendorVariants, boardVndkVersion)
|
vendorVariants = append(vendorVariants, boardVndkVersion)
|
||||||
|
} else {
|
||||||
|
vendorVariants = append(vendorVariants, platformVndkVersion)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// This is either in /system (or similar: /data), or is a
|
// This is either in /system (or similar: /data), or is a
|
||||||
// modules built with the NDK. Modules built with the NDK
|
// modules built with the NDK. Modules built with the NDK
|
||||||
|
@@ -258,9 +258,7 @@ func checkVndkModule(t *testing.T, ctx *android.TestContext, name, subDir string
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkSnapshot(t *testing.T, ctx *android.TestContext, singletonName, moduleName, snapshotFilename, subDir, variant string) {
|
func checkSnapshot(t *testing.T, ctx *android.TestContext, singleton android.TestingSingleton, moduleName, snapshotFilename, subDir, variant string) {
|
||||||
snapshotSingleton := ctx.SingletonForTests(singletonName)
|
|
||||||
|
|
||||||
mod, ok := ctx.ModuleForTests(moduleName, variant).Module().(android.OutputFileProducer)
|
mod, ok := ctx.ModuleForTests(moduleName, variant).Module().(android.OutputFileProducer)
|
||||||
if !ok {
|
if !ok {
|
||||||
t.Errorf("%q must have output\n", moduleName)
|
t.Errorf("%q must have output\n", moduleName)
|
||||||
@@ -273,7 +271,7 @@ func checkSnapshot(t *testing.T, ctx *android.TestContext, singletonName, module
|
|||||||
}
|
}
|
||||||
snapshotPath := filepath.Join(subDir, snapshotFilename)
|
snapshotPath := filepath.Join(subDir, snapshotFilename)
|
||||||
|
|
||||||
out := snapshotSingleton.Output(snapshotPath)
|
out := singleton.Output(snapshotPath)
|
||||||
if out.Input.String() != outputFiles[0].String() {
|
if out.Input.String() != outputFiles[0].String() {
|
||||||
t.Errorf("The input of snapshot %q must be %q, but %q", moduleName, out.Input.String(), outputFiles[0])
|
t.Errorf("The input of snapshot %q must be %q, but %q", moduleName, out.Input.String(), outputFiles[0])
|
||||||
}
|
}
|
||||||
@@ -398,16 +396,18 @@ func TestVndk(t *testing.T) {
|
|||||||
variant := "android_vendor.VER_arm64_armv8-a_shared"
|
variant := "android_vendor.VER_arm64_armv8-a_shared"
|
||||||
variant2nd := "android_vendor.VER_arm_armv7-a-neon_shared"
|
variant2nd := "android_vendor.VER_arm_armv7-a-neon_shared"
|
||||||
|
|
||||||
checkSnapshot(t, ctx, "vndk-snapshot", "libvndk", "libvndk.so", vndkCoreLibPath, variant)
|
snapshotSingleton := ctx.SingletonForTests("vndk-snapshot")
|
||||||
checkSnapshot(t, ctx, "vndk-snapshot", "libvndk", "libvndk.so", vndkCoreLib2ndPath, variant2nd)
|
|
||||||
checkSnapshot(t, ctx, "vndk-snapshot", "libvndk_sp", "libvndk_sp-x.so", vndkSpLibPath, variant)
|
checkSnapshot(t, ctx, snapshotSingleton, "libvndk", "libvndk.so", vndkCoreLibPath, variant)
|
||||||
checkSnapshot(t, ctx, "vndk-snapshot", "libvndk_sp", "libvndk_sp-x.so", vndkSpLib2ndPath, variant2nd)
|
checkSnapshot(t, ctx, snapshotSingleton, "libvndk", "libvndk.so", vndkCoreLib2ndPath, variant2nd)
|
||||||
|
checkSnapshot(t, ctx, snapshotSingleton, "libvndk_sp", "libvndk_sp-x.so", vndkSpLibPath, variant)
|
||||||
|
checkSnapshot(t, ctx, snapshotSingleton, "libvndk_sp", "libvndk_sp-x.so", vndkSpLib2ndPath, variant2nd)
|
||||||
|
|
||||||
snapshotConfigsPath := filepath.Join(snapshotVariantPath, "configs")
|
snapshotConfigsPath := filepath.Join(snapshotVariantPath, "configs")
|
||||||
checkSnapshot(t, ctx, "vndk-snapshot", "llndk.libraries.txt", "llndk.libraries.txt", snapshotConfigsPath, "")
|
checkSnapshot(t, ctx, snapshotSingleton, "llndk.libraries.txt", "llndk.libraries.txt", snapshotConfigsPath, "")
|
||||||
checkSnapshot(t, ctx, "vndk-snapshot", "vndkcore.libraries.txt", "vndkcore.libraries.txt", snapshotConfigsPath, "")
|
checkSnapshot(t, ctx, snapshotSingleton, "vndkcore.libraries.txt", "vndkcore.libraries.txt", snapshotConfigsPath, "")
|
||||||
checkSnapshot(t, ctx, "vndk-snapshot", "vndksp.libraries.txt", "vndksp.libraries.txt", snapshotConfigsPath, "")
|
checkSnapshot(t, ctx, snapshotSingleton, "vndksp.libraries.txt", "vndksp.libraries.txt", snapshotConfigsPath, "")
|
||||||
checkSnapshot(t, ctx, "vndk-snapshot", "vndkprivate.libraries.txt", "vndkprivate.libraries.txt", snapshotConfigsPath, "")
|
checkSnapshot(t, ctx, snapshotSingleton, "vndkprivate.libraries.txt", "vndkprivate.libraries.txt", snapshotConfigsPath, "")
|
||||||
|
|
||||||
checkVndkOutput(t, ctx, "vndk/vndk.libraries.txt", []string{
|
checkVndkOutput(t, ctx, "vndk/vndk.libraries.txt", []string{
|
||||||
"LLNDK: libc.so",
|
"LLNDK: libc.so",
|
||||||
@@ -839,6 +839,17 @@ func TestVendorSnapshot(t *testing.T) {
|
|||||||
vendor_available: true,
|
vendor_available: true,
|
||||||
nocrt: true,
|
nocrt: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
toolchain_library {
|
||||||
|
name: "libb",
|
||||||
|
vendor_available: true,
|
||||||
|
src: "libb.a",
|
||||||
|
}
|
||||||
|
|
||||||
|
cc_object {
|
||||||
|
name: "obj",
|
||||||
|
vendor_available: true,
|
||||||
|
}
|
||||||
`
|
`
|
||||||
config := TestConfig(buildDir, android.Android, nil, bp, nil)
|
config := TestConfig(buildDir, android.Android, nil, bp, nil)
|
||||||
config.TestProductVariables.DeviceVndkVersion = StringPtr("current")
|
config.TestProductVariables.DeviceVndkVersion = StringPtr("current")
|
||||||
@@ -849,6 +860,9 @@ func TestVendorSnapshot(t *testing.T) {
|
|||||||
|
|
||||||
snapshotDir := "vendor-snapshot"
|
snapshotDir := "vendor-snapshot"
|
||||||
snapshotVariantPath := filepath.Join(buildDir, snapshotDir, "arm64")
|
snapshotVariantPath := filepath.Join(buildDir, snapshotDir, "arm64")
|
||||||
|
snapshotSingleton := ctx.SingletonForTests("vendor-snapshot")
|
||||||
|
|
||||||
|
var jsonFiles []string
|
||||||
|
|
||||||
for _, arch := range [][]string{
|
for _, arch := range [][]string{
|
||||||
[]string{"arm64", "armv8-a"},
|
[]string{"arm64", "armv8-a"},
|
||||||
@@ -861,22 +875,51 @@ func TestVendorSnapshot(t *testing.T) {
|
|||||||
// For shared libraries, only non-VNDK vendor_available modules are captured
|
// For shared libraries, only non-VNDK vendor_available modules are captured
|
||||||
sharedVariant := fmt.Sprintf("android_vendor.VER_%s_%s_shared", archType, archVariant)
|
sharedVariant := fmt.Sprintf("android_vendor.VER_%s_%s_shared", archType, archVariant)
|
||||||
sharedDir := filepath.Join(snapshotVariantPath, archDir, "shared")
|
sharedDir := filepath.Join(snapshotVariantPath, archDir, "shared")
|
||||||
checkSnapshot(t, ctx, "vendor-snapshot", "libvendor", "libvendor.so", sharedDir, sharedVariant)
|
checkSnapshot(t, ctx, snapshotSingleton, "libvendor", "libvendor.so", sharedDir, sharedVariant)
|
||||||
checkSnapshot(t, ctx, "vendor-snapshot", "libvendor_available", "libvendor_available.so", sharedDir, sharedVariant)
|
checkSnapshot(t, ctx, snapshotSingleton, "libvendor_available", "libvendor_available.so", sharedDir, sharedVariant)
|
||||||
|
jsonFiles = append(jsonFiles,
|
||||||
|
filepath.Join(sharedDir, "libvendor.so.json"),
|
||||||
|
filepath.Join(sharedDir, "libvendor_available.so.json"))
|
||||||
|
|
||||||
// For static libraries, all vendor:true and vendor_available modules (including VNDK) are captured.
|
// For static libraries, all vendor:true and vendor_available modules (including VNDK) are captured.
|
||||||
staticVariant := fmt.Sprintf("android_vendor.VER_%s_%s_static", archType, archVariant)
|
staticVariant := fmt.Sprintf("android_vendor.VER_%s_%s_static", archType, archVariant)
|
||||||
staticDir := filepath.Join(snapshotVariantPath, archDir, "static")
|
staticDir := filepath.Join(snapshotVariantPath, archDir, "static")
|
||||||
checkSnapshot(t, ctx, "vendor-snapshot", "libvndk", "libvndk.a", staticDir, staticVariant)
|
checkSnapshot(t, ctx, snapshotSingleton, "libb", "libb.a", staticDir, staticVariant)
|
||||||
checkSnapshot(t, ctx, "vendor-snapshot", "libvendor", "libvendor.a", staticDir, staticVariant)
|
checkSnapshot(t, ctx, snapshotSingleton, "libvndk", "libvndk.a", staticDir, staticVariant)
|
||||||
checkSnapshot(t, ctx, "vendor-snapshot", "libvendor_available", "libvendor_available.a", staticDir, staticVariant)
|
checkSnapshot(t, ctx, snapshotSingleton, "libvendor", "libvendor.a", staticDir, staticVariant)
|
||||||
|
checkSnapshot(t, ctx, snapshotSingleton, "libvendor_available", "libvendor_available.a", staticDir, staticVariant)
|
||||||
|
jsonFiles = append(jsonFiles,
|
||||||
|
filepath.Join(staticDir, "libb.a.json"),
|
||||||
|
filepath.Join(staticDir, "libvndk.a.json"),
|
||||||
|
filepath.Join(staticDir, "libvendor.a.json"),
|
||||||
|
filepath.Join(staticDir, "libvendor_available.a.json"))
|
||||||
|
|
||||||
// For binary libraries, all vendor:true and vendor_available modules are captured.
|
// For binary executables, all vendor:true and vendor_available modules are captured.
|
||||||
if archType == "arm64" {
|
if archType == "arm64" {
|
||||||
binaryVariant := fmt.Sprintf("android_vendor.VER_%s_%s", archType, archVariant)
|
binaryVariant := fmt.Sprintf("android_vendor.VER_%s_%s", archType, archVariant)
|
||||||
binaryDir := filepath.Join(snapshotVariantPath, archDir, "binary")
|
binaryDir := filepath.Join(snapshotVariantPath, archDir, "binary")
|
||||||
checkSnapshot(t, ctx, "vendor-snapshot", "vendor_bin", "vendor_bin", binaryDir, binaryVariant)
|
checkSnapshot(t, ctx, snapshotSingleton, "vendor_bin", "vendor_bin", binaryDir, binaryVariant)
|
||||||
checkSnapshot(t, ctx, "vendor-snapshot", "vendor_available_bin", "vendor_available_bin", binaryDir, binaryVariant)
|
checkSnapshot(t, ctx, snapshotSingleton, "vendor_available_bin", "vendor_available_bin", binaryDir, binaryVariant)
|
||||||
|
jsonFiles = append(jsonFiles,
|
||||||
|
filepath.Join(binaryDir, "vendor_bin.json"),
|
||||||
|
filepath.Join(binaryDir, "vendor_available_bin.json"))
|
||||||
|
}
|
||||||
|
|
||||||
|
// For header libraries, all vendor:true and vendor_available modules are captured.
|
||||||
|
headerDir := filepath.Join(snapshotVariantPath, archDir, "header")
|
||||||
|
jsonFiles = append(jsonFiles, filepath.Join(headerDir, "libvendor_headers.json"))
|
||||||
|
|
||||||
|
// For object modules, all vendor:true and vendor_available modules are captured.
|
||||||
|
objectVariant := fmt.Sprintf("android_vendor.VER_%s_%s", archType, archVariant)
|
||||||
|
objectDir := filepath.Join(snapshotVariantPath, archDir, "object")
|
||||||
|
checkSnapshot(t, ctx, snapshotSingleton, "obj", "obj.o", objectDir, objectVariant)
|
||||||
|
jsonFiles = append(jsonFiles, filepath.Join(objectDir, "obj.o.json"))
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, jsonFile := range jsonFiles {
|
||||||
|
// verify all json files exist
|
||||||
|
if snapshotSingleton.MaybeOutput(jsonFile).Rule == nil {
|
||||||
|
t.Errorf("%q expected but not found", jsonFile)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -79,8 +79,14 @@ func (g *GenruleExtraProperties) ExtraImageVariations(ctx android.BaseModuleCont
|
|||||||
|
|
||||||
var variants []string
|
var variants []string
|
||||||
if Bool(g.Vendor_available) || ctx.SocSpecific() || ctx.DeviceSpecific() {
|
if Bool(g.Vendor_available) || ctx.SocSpecific() || ctx.DeviceSpecific() {
|
||||||
|
vndkVersion := ctx.DeviceConfig().VndkVersion()
|
||||||
|
// If vndkVersion is current, we can always use PlatformVndkVersion.
|
||||||
|
// If not, we assume modules under proprietary paths are compatible for
|
||||||
|
// BOARD_VNDK_VERSION. The other modules are regarded as AOSP, that is
|
||||||
|
// PLATFORM_VNDK_VERSION.
|
||||||
|
if vndkVersion == "current" || !isVendorProprietaryPath(ctx.ModuleDir()) {
|
||||||
variants = append(variants, VendorVariationPrefix+ctx.DeviceConfig().PlatformVndkVersion())
|
variants = append(variants, VendorVariationPrefix+ctx.DeviceConfig().PlatformVndkVersion())
|
||||||
if vndkVersion := ctx.DeviceConfig().VndkVersion(); vndkVersion != "current" {
|
} else {
|
||||||
variants = append(variants, VendorVariationPrefix+vndkVersion)
|
variants = append(variants, VendorVariationPrefix+vndkVersion)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -158,3 +158,7 @@ func (object *objectLinker) nativeCoverage() bool {
|
|||||||
func (object *objectLinker) coverageOutputFilePath() android.OptionalPath {
|
func (object *objectLinker) coverageOutputFilePath() android.OptionalPath {
|
||||||
return android.OptionalPath{}
|
return android.OptionalPath{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (object *objectLinker) object() bool {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
@@ -291,6 +291,10 @@ func (p *prebuiltObjectLinker) link(ctx ModuleContext,
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *prebuiltObjectLinker) object() bool {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
func newPrebuiltObject() *Module {
|
func newPrebuiltObject() *Module {
|
||||||
module := newObject()
|
module := newObject()
|
||||||
prebuilt := &prebuiltObjectLinker{
|
prebuilt := &prebuiltObjectLinker{
|
||||||
@@ -349,6 +353,10 @@ func (p *prebuiltBinaryLinker) link(ctx ModuleContext,
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *prebuiltBinaryLinker) binary() bool {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
// cc_prebuilt_binary installs a precompiled executable in srcs property in the
|
// cc_prebuilt_binary installs a precompiled executable in srcs property in the
|
||||||
// device's directory.
|
// device's directory.
|
||||||
func prebuiltBinaryFactory() android.Module {
|
func prebuiltBinaryFactory() android.Module {
|
||||||
|
@@ -496,6 +496,7 @@ func TestConfig(buildDir string, os android.OsType, env map[string]string,
|
|||||||
"my_include": nil,
|
"my_include": nil,
|
||||||
"foo.map.txt": nil,
|
"foo.map.txt": nil,
|
||||||
"liba.so": nil,
|
"liba.so": nil,
|
||||||
|
"libb.a": nil,
|
||||||
}
|
}
|
||||||
|
|
||||||
GatherRequiredFilesForTest(mockFS)
|
GatherRequiredFilesForTest(mockFS)
|
||||||
|
@@ -30,6 +30,7 @@ const (
|
|||||||
vendorSnapshotSharedSuffix = ".vendor_shared."
|
vendorSnapshotSharedSuffix = ".vendor_shared."
|
||||||
vendorSnapshotStaticSuffix = ".vendor_static."
|
vendorSnapshotStaticSuffix = ".vendor_static."
|
||||||
vendorSnapshotBinarySuffix = ".vendor_binary."
|
vendorSnapshotBinarySuffix = ".vendor_binary."
|
||||||
|
vendorSnapshotObjectSuffix = ".vendor_object."
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -39,6 +40,7 @@ var (
|
|||||||
vendorSnapshotStaticLibsKey = android.NewOnceKey("vendorSnapshotStaticLibs")
|
vendorSnapshotStaticLibsKey = android.NewOnceKey("vendorSnapshotStaticLibs")
|
||||||
vendorSnapshotSharedLibsKey = android.NewOnceKey("vendorSnapshotSharedLibs")
|
vendorSnapshotSharedLibsKey = android.NewOnceKey("vendorSnapshotSharedLibs")
|
||||||
vendorSnapshotBinariesKey = android.NewOnceKey("vendorSnapshotBinaries")
|
vendorSnapshotBinariesKey = android.NewOnceKey("vendorSnapshotBinaries")
|
||||||
|
vendorSnapshotObjectsKey = android.NewOnceKey("vendorSnapshotObjects")
|
||||||
)
|
)
|
||||||
|
|
||||||
// vendor snapshot maps hold names of vendor snapshot modules per arch
|
// vendor snapshot maps hold names of vendor snapshot modules per arch
|
||||||
@@ -72,6 +74,12 @@ func vendorSnapshotBinaries(config android.Config) *snapshotMap {
|
|||||||
}).(*snapshotMap)
|
}).(*snapshotMap)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func vendorSnapshotObjects(config android.Config) *snapshotMap {
|
||||||
|
return config.Once(vendorSnapshotObjectsKey, func() interface{} {
|
||||||
|
return newSnapshotMap()
|
||||||
|
}).(*snapshotMap)
|
||||||
|
}
|
||||||
|
|
||||||
type vendorSnapshotLibraryProperties struct {
|
type vendorSnapshotLibraryProperties struct {
|
||||||
// snapshot version.
|
// snapshot version.
|
||||||
Version string
|
Version string
|
||||||
@@ -185,6 +193,10 @@ func (p *vendorSnapshotLibraryDecorator) nativeCoverage() bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *vendorSnapshotLibraryDecorator) isSnapshotPrebuilt() bool {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
func (p *vendorSnapshotLibraryDecorator) install(ctx ModuleContext, file android.Path) {
|
func (p *vendorSnapshotLibraryDecorator) install(ctx ModuleContext, file android.Path) {
|
||||||
if p.matchesWithDevice(ctx.DeviceConfig()) && (p.shared() || p.static()) {
|
if p.matchesWithDevice(ctx.DeviceConfig()) && (p.shared() || p.static()) {
|
||||||
p.baseInstaller.install(ctx, file)
|
p.baseInstaller.install(ctx, file)
|
||||||
@@ -337,6 +349,10 @@ func (p *vendorSnapshotBinaryDecorator) link(ctx ModuleContext,
|
|||||||
return outputFile
|
return outputFile
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *vendorSnapshotBinaryDecorator) isSnapshotPrebuilt() bool {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
func VendorSnapshotBinaryFactory() android.Module {
|
func VendorSnapshotBinaryFactory() android.Module {
|
||||||
module, binary := NewBinary(android.DeviceSupported)
|
module, binary := NewBinary(android.DeviceSupported)
|
||||||
binary.baseLinker.Properties.No_libcrt = BoolPtr(true)
|
binary.baseLinker.Properties.No_libcrt = BoolPtr(true)
|
||||||
@@ -364,12 +380,98 @@ func VendorSnapshotBinaryFactory() android.Module {
|
|||||||
return module.Init()
|
return module.Init()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type vendorSnapshotObjectProperties struct {
|
||||||
|
// snapshot version.
|
||||||
|
Version string
|
||||||
|
|
||||||
|
// Target arch name of the snapshot (e.g. 'arm64' for variant 'aosp_arm64_ab')
|
||||||
|
Target_arch string
|
||||||
|
|
||||||
|
// Prebuilt file for each arch.
|
||||||
|
Src *string `android:"arch_variant"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type vendorSnapshotObjectLinker struct {
|
||||||
|
objectLinker
|
||||||
|
properties vendorSnapshotObjectProperties
|
||||||
|
androidMkVendorSuffix bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *vendorSnapshotObjectLinker) Name(name string) string {
|
||||||
|
return name + p.NameSuffix()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *vendorSnapshotObjectLinker) NameSuffix() string {
|
||||||
|
versionSuffix := p.version()
|
||||||
|
if p.arch() != "" {
|
||||||
|
versionSuffix += "." + p.arch()
|
||||||
|
}
|
||||||
|
return vendorSnapshotObjectSuffix + versionSuffix
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *vendorSnapshotObjectLinker) version() string {
|
||||||
|
return p.properties.Version
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *vendorSnapshotObjectLinker) arch() string {
|
||||||
|
return p.properties.Target_arch
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *vendorSnapshotObjectLinker) matchesWithDevice(config android.DeviceConfig) bool {
|
||||||
|
if config.DeviceArch() != p.arch() {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if p.properties.Src == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *vendorSnapshotObjectLinker) link(ctx ModuleContext,
|
||||||
|
flags Flags, deps PathDeps, objs Objects) android.Path {
|
||||||
|
if !p.matchesWithDevice(ctx.DeviceConfig()) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
m := ctx.Module().(*Module)
|
||||||
|
p.androidMkVendorSuffix = vendorSuffixModules(ctx.Config())[m.BaseModuleName()]
|
||||||
|
|
||||||
|
return android.PathForModuleSrc(ctx, *p.properties.Src)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *vendorSnapshotObjectLinker) nativeCoverage() bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *vendorSnapshotObjectLinker) isSnapshotPrebuilt() bool {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func VendorSnapshotObjectFactory() android.Module {
|
||||||
|
module := newObject()
|
||||||
|
|
||||||
|
prebuilt := &vendorSnapshotObjectLinker{
|
||||||
|
objectLinker: objectLinker{
|
||||||
|
baseLinker: NewBaseLinker(nil),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
module.linker = prebuilt
|
||||||
|
|
||||||
|
android.AddLoadHook(module, func(ctx android.LoadHookContext) {
|
||||||
|
vendorSnapshotLoadHook(ctx, prebuilt)
|
||||||
|
})
|
||||||
|
|
||||||
|
module.AddProperties(&prebuilt.properties)
|
||||||
|
return module.Init()
|
||||||
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
android.RegisterSingletonType("vendor-snapshot", VendorSnapshotSingleton)
|
android.RegisterSingletonType("vendor-snapshot", VendorSnapshotSingleton)
|
||||||
android.RegisterModuleType("vendor_snapshot_shared", VendorSnapshotSharedFactory)
|
android.RegisterModuleType("vendor_snapshot_shared", VendorSnapshotSharedFactory)
|
||||||
android.RegisterModuleType("vendor_snapshot_static", VendorSnapshotStaticFactory)
|
android.RegisterModuleType("vendor_snapshot_static", VendorSnapshotStaticFactory)
|
||||||
android.RegisterModuleType("vendor_snapshot_header", VendorSnapshotHeaderFactory)
|
android.RegisterModuleType("vendor_snapshot_header", VendorSnapshotHeaderFactory)
|
||||||
android.RegisterModuleType("vendor_snapshot_binary", VendorSnapshotBinaryFactory)
|
android.RegisterModuleType("vendor_snapshot_binary", VendorSnapshotBinaryFactory)
|
||||||
|
android.RegisterModuleType("vendor_snapshot_object", VendorSnapshotObjectFactory)
|
||||||
}
|
}
|
||||||
|
|
||||||
func VendorSnapshotSingleton() android.Singleton {
|
func VendorSnapshotSingleton() android.Singleton {
|
||||||
@@ -429,7 +531,7 @@ func isVendorProprietaryPath(dir string) bool {
|
|||||||
// depend on newer VNDK) So they are captured as vendor snapshot To build older vendor
|
// depend on newer VNDK) So they are captured as vendor snapshot To build older vendor
|
||||||
// image and newer system image altogether.
|
// image and newer system image altogether.
|
||||||
func isVendorSnapshotModule(m *Module, moduleDir string) bool {
|
func isVendorSnapshotModule(m *Module, moduleDir string) bool {
|
||||||
if !m.Enabled() {
|
if !m.Enabled() || m.Properties.HideFromMake {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
// skip proprietary modules, but include all VNDK (static)
|
// skip proprietary modules, but include all VNDK (static)
|
||||||
@@ -443,37 +545,37 @@ func isVendorSnapshotModule(m *Module, moduleDir string) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
// the module must be installed in /vendor
|
// the module must be installed in /vendor
|
||||||
if !m.installable() || m.isSnapshotPrebuilt() || !m.inVendor() {
|
if !m.IsForPlatform() || m.isSnapshotPrebuilt() || !m.inVendor() {
|
||||||
return false
|
|
||||||
}
|
|
||||||
// exclude test modules
|
|
||||||
if _, ok := m.linker.(interface{ gtest() bool }); ok {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
// TODO(b/65377115): add full support for sanitizer
|
|
||||||
if m.sanitize != nil && !m.sanitize.isUnsanitizedVariant() {
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// Libraries
|
// Libraries
|
||||||
if l, ok := m.linker.(snapshotLibraryInterface); ok {
|
if l, ok := m.linker.(snapshotLibraryInterface); ok {
|
||||||
|
// TODO(b/65377115): add full support for sanitizer
|
||||||
|
if m.sanitize != nil {
|
||||||
|
// cfi, scs and hwasan export both sanitized and unsanitized variants for static and header
|
||||||
|
// Always use unsanitized variants of them.
|
||||||
|
for _, t := range []sanitizerType{cfi, scs, hwasan} {
|
||||||
|
if !l.shared() && m.sanitize.isSanitizerEnabled(t) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if l.static() {
|
if l.static() {
|
||||||
return proptools.BoolDefault(m.VendorProperties.Vendor_available, true)
|
return m.outputFile.Valid() && proptools.BoolDefault(m.VendorProperties.Vendor_available, true)
|
||||||
}
|
}
|
||||||
if l.shared() {
|
if l.shared() {
|
||||||
return !m.IsVndk()
|
return m.outputFile.Valid() && !m.IsVndk()
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
// Binaries
|
// Binaries and Objects
|
||||||
_, ok := m.linker.(*binaryDecorator)
|
if m.binary() || m.object() {
|
||||||
if !ok {
|
return m.outputFile.Valid() && proptools.BoolDefault(m.VendorProperties.Vendor_available, true)
|
||||||
if _, ok := m.linker.(*prebuiltBinaryLinker); !ok {
|
}
|
||||||
|
|
||||||
return false
|
return false
|
||||||
}
|
|
||||||
}
|
|
||||||
return proptools.BoolDefault(m.VendorProperties.Vendor_available, true)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *vendorSnapshotSingleton) GenerateBuildActions(ctx android.SingletonContext) {
|
func (c *vendorSnapshotSingleton) GenerateBuildActions(ctx android.SingletonContext) {
|
||||||
@@ -496,6 +598,8 @@ func (c *vendorSnapshotSingleton) GenerateBuildActions(ctx android.SingletonCont
|
|||||||
(header only libraries)
|
(header only libraries)
|
||||||
binary/
|
binary/
|
||||||
(executable binaries)
|
(executable binaries)
|
||||||
|
object/
|
||||||
|
(.o object files)
|
||||||
arch-{TARGET_2ND_ARCH}-{TARGET_2ND_ARCH_VARIANT}/
|
arch-{TARGET_2ND_ARCH}-{TARGET_2ND_ARCH_VARIANT}/
|
||||||
shared/
|
shared/
|
||||||
(.so shared libraries)
|
(.so shared libraries)
|
||||||
@@ -505,6 +609,8 @@ func (c *vendorSnapshotSingleton) GenerateBuildActions(ctx android.SingletonCont
|
|||||||
(header only libraries)
|
(header only libraries)
|
||||||
binary/
|
binary/
|
||||||
(executable binaries)
|
(executable binaries)
|
||||||
|
object/
|
||||||
|
(.o object files)
|
||||||
NOTICE_FILES/
|
NOTICE_FILES/
|
||||||
(notice files, e.g. libbase.txt)
|
(notice files, e.g. libbase.txt)
|
||||||
configs/
|
configs/
|
||||||
@@ -620,7 +726,7 @@ func (c *vendorSnapshotSingleton) GenerateBuildActions(ctx android.SingletonCont
|
|||||||
}
|
}
|
||||||
|
|
||||||
propOut = filepath.Join(snapshotArchDir, targetArch, libType, stem+".json")
|
propOut = filepath.Join(snapshotArchDir, targetArch, libType, stem+".json")
|
||||||
} else {
|
} else if m.binary() {
|
||||||
// binary flags
|
// binary flags
|
||||||
prop.Symlinks = m.Symlinks()
|
prop.Symlinks = m.Symlinks()
|
||||||
prop.SharedLibs = m.Properties.SnapshotSharedLibs
|
prop.SharedLibs = m.Properties.SnapshotSharedLibs
|
||||||
@@ -630,6 +736,17 @@ func (c *vendorSnapshotSingleton) GenerateBuildActions(ctx android.SingletonCont
|
|||||||
snapshotBinOut := filepath.Join(snapshotArchDir, targetArch, "binary", binPath.Base())
|
snapshotBinOut := filepath.Join(snapshotArchDir, targetArch, "binary", binPath.Base())
|
||||||
ret = append(ret, copyFile(ctx, binPath, snapshotBinOut))
|
ret = append(ret, copyFile(ctx, binPath, snapshotBinOut))
|
||||||
propOut = snapshotBinOut + ".json"
|
propOut = snapshotBinOut + ".json"
|
||||||
|
} else if m.object() {
|
||||||
|
// object files aren't installed to the device, so their names can conflict.
|
||||||
|
// Use module name as stem.
|
||||||
|
objPath := m.outputFile.Path()
|
||||||
|
snapshotObjOut := filepath.Join(snapshotArchDir, targetArch, "object",
|
||||||
|
ctx.ModuleName(m)+filepath.Ext(objPath.Base()))
|
||||||
|
ret = append(ret, copyFile(ctx, objPath, snapshotObjOut))
|
||||||
|
propOut = snapshotObjOut + ".json"
|
||||||
|
} else {
|
||||||
|
ctx.Errorf("unknown module %q in vendor snapshot", m.String())
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
j, err := json.Marshal(prop)
|
j, err := json.Marshal(prop)
|
||||||
@@ -716,6 +833,7 @@ type snapshotInterface interface {
|
|||||||
var _ snapshotInterface = (*vndkPrebuiltLibraryDecorator)(nil)
|
var _ snapshotInterface = (*vndkPrebuiltLibraryDecorator)(nil)
|
||||||
var _ snapshotInterface = (*vendorSnapshotLibraryDecorator)(nil)
|
var _ snapshotInterface = (*vendorSnapshotLibraryDecorator)(nil)
|
||||||
var _ snapshotInterface = (*vendorSnapshotBinaryDecorator)(nil)
|
var _ snapshotInterface = (*vendorSnapshotBinaryDecorator)(nil)
|
||||||
|
var _ snapshotInterface = (*vendorSnapshotObjectLinker)(nil)
|
||||||
|
|
||||||
// gathers all snapshot modules for vendor, and disable unnecessary snapshots
|
// gathers all snapshot modules for vendor, and disable unnecessary snapshots
|
||||||
// TODO(b/145966707): remove mutator and utilize android.Prebuilt to override source modules
|
// TODO(b/145966707): remove mutator and utilize android.Prebuilt to override source modules
|
||||||
@@ -731,12 +849,12 @@ func VendorSnapshotMutator(ctx android.BottomUpMutatorContext) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
snapshot, ok := module.linker.(snapshotInterface)
|
if !module.isSnapshotPrebuilt() {
|
||||||
if !ok {
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !snapshot.matchesWithDevice(ctx.DeviceConfig()) {
|
// isSnapshotPrebuilt ensures snapshotInterface
|
||||||
|
if !module.linker.(snapshotInterface).matchesWithDevice(ctx.DeviceConfig()) {
|
||||||
// Disable unnecessary snapshot module, but do not disable
|
// Disable unnecessary snapshot module, but do not disable
|
||||||
// vndk_prebuilt_shared because they might be packed into vndk APEX
|
// vndk_prebuilt_shared because they might be packed into vndk APEX
|
||||||
if !module.IsVndk() {
|
if !module.IsVndk() {
|
||||||
@@ -758,6 +876,8 @@ func VendorSnapshotMutator(ctx android.BottomUpMutatorContext) {
|
|||||||
}
|
}
|
||||||
} else if _, ok := module.linker.(*vendorSnapshotBinaryDecorator); ok {
|
} else if _, ok := module.linker.(*vendorSnapshotBinaryDecorator); ok {
|
||||||
snapshotMap = vendorSnapshotBinaries(ctx.Config())
|
snapshotMap = vendorSnapshotBinaries(ctx.Config())
|
||||||
|
} else if _, ok := module.linker.(*vendorSnapshotObjectLinker); ok {
|
||||||
|
snapshotMap = vendorSnapshotObjects(ctx.Config())
|
||||||
} else {
|
} else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -804,6 +924,11 @@ func VendorSnapshotSourceMutator(ctx android.BottomUpMutatorContext) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// .. and also filter out llndk library
|
||||||
|
if module.isLlndk(ctx.Config()) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
var snapshotMap *snapshotMap
|
var snapshotMap *snapshotMap
|
||||||
|
|
||||||
if lib, ok := module.linker.(libraryInterface); ok {
|
if lib, ok := module.linker.(libraryInterface); ok {
|
||||||
@@ -815,10 +940,10 @@ func VendorSnapshotSourceMutator(ctx android.BottomUpMutatorContext) {
|
|||||||
// header
|
// header
|
||||||
snapshotMap = vendorSnapshotHeaderLibs(ctx.Config())
|
snapshotMap = vendorSnapshotHeaderLibs(ctx.Config())
|
||||||
}
|
}
|
||||||
} else if _, ok := module.linker.(*binaryDecorator); ok {
|
} else if module.binary() {
|
||||||
snapshotMap = vendorSnapshotBinaries(ctx.Config())
|
|
||||||
} else if _, ok := module.linker.(*prebuiltBinaryLinker); ok {
|
|
||||||
snapshotMap = vendorSnapshotBinaries(ctx.Config())
|
snapshotMap = vendorSnapshotBinaries(ctx.Config())
|
||||||
|
} else if module.object() {
|
||||||
|
snapshotMap = vendorSnapshotObjects(ctx.Config())
|
||||||
} else {
|
} else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@@ -186,6 +186,10 @@ func (p *vndkPrebuiltLibraryDecorator) nativeCoverage() bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *vndkPrebuiltLibraryDecorator) isSnapshotPrebuilt() bool {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
func (p *vndkPrebuiltLibraryDecorator) install(ctx ModuleContext, file android.Path) {
|
func (p *vndkPrebuiltLibraryDecorator) install(ctx ModuleContext, file android.Path) {
|
||||||
arches := ctx.DeviceConfig().Arches()
|
arches := ctx.DeviceConfig().Arches()
|
||||||
if len(arches) == 0 || arches[0].ArchType.String() != p.arch() {
|
if len(arches) == 0 || arches[0].ArchType.String() != p.arch() {
|
||||||
|
Reference in New Issue
Block a user