Loading apex/apex.go +1 −1 Original line number Diff line number Diff line Loading @@ -773,7 +773,7 @@ func (a *apexBundle) installable() bool { func (a *apexBundle) getImageVariation(config android.DeviceConfig) string { if config.VndkVersion() != "" && proptools.Bool(a.properties.Use_vendor) { return "vendor" return "vendor." + config.PlatformVndkVersion() } else { return "core" } Loading apex/apex_test.go +2 −3 Original line number Diff line number Diff line Loading @@ -92,7 +92,6 @@ func testApexContext(t *testing.T, bp string, handlers ...testCustomizer) (*andr config.TestProductVariables.CertificateOverrides = []string{"myapex_keytest:myapex.certificate.override"} config.TestProductVariables.Platform_sdk_codename = proptools.StringPtr("Q") config.TestProductVariables.Platform_sdk_final = proptools.BoolPtr(false) config.TestProductVariables.DeviceVndkVersion = proptools.StringPtr("current") config.TestProductVariables.Platform_vndk_version = proptools.StringPtr("VER") ctx := android.NewTestArchContext() Loading Loading @@ -1050,8 +1049,8 @@ func TestUseVendor(t *testing.T) { inputsString := strings.Join(inputsList, " ") // ensure that the apex includes vendor variants of the direct and indirect deps ensureContains(t, inputsString, "android_arm64_armv8-a_vendor_shared_myapex/mylib.so") ensureContains(t, inputsString, "android_arm64_armv8-a_vendor_shared_myapex/mylib2.so") ensureContains(t, inputsString, "android_arm64_armv8-a_vendor.VER_shared_myapex/mylib.so") ensureContains(t, inputsString, "android_arm64_armv8-a_vendor.VER_shared_myapex/mylib2.so") // ensure that the apex does not include core variants ensureNotContains(t, inputsString, "android_arm64_armv8-a_core_shared_myapex/mylib.so") Loading cc/androidmk.go +2 −12 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ type AndroidMkContext interface { Os() android.OsType Host() bool useVndk() bool vndkVersion() string static() bool inRecovery() bool } Loading Loading @@ -109,17 +110,7 @@ func (c *Module) AndroidMk() android.AndroidMkData { } c.subAndroidMk(&ret, c.installer) if c.Target().NativeBridge == android.NativeBridgeEnabled { ret.SubName += nativeBridgeSuffix } if c.useVndk() && c.hasVendorVariant() { // .vendor suffix is added only when we will have two variants: core and vendor. // The suffix is not added for vendor-only module. ret.SubName += vendorSuffix } else if c.inRecovery() && !c.onlyInRecovery() { ret.SubName += recoverySuffix } ret.SubName += c.Properties.SubName return ret } Loading Loading @@ -357,7 +348,6 @@ func (c *stubDecorator) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkDa func (c *llndkStubDecorator) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) { ret.Class = "SHARED_LIBRARIES" ret.SubName = vendorSuffix ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) { c.libraryDecorator.androidMkWriteExportedFlags(w) Loading cc/cc.go +78 −27 Original line number Diff line number Diff line Loading @@ -36,9 +36,9 @@ func init() { android.RegisterModuleType("cc_defaults", defaultsFactory) android.PreDepsMutators(func(ctx android.RegisterMutatorsContext) { ctx.BottomUp("vndk", VndkMutator).Parallel() ctx.BottomUp("image", ImageMutator).Parallel() ctx.BottomUp("link", LinkageMutator).Parallel() ctx.BottomUp("vndk", VndkMutator).Parallel() ctx.BottomUp("ndk_api", ndkApiMutator).Parallel() ctx.BottomUp("test_per_src", TestPerSrcMutator).Parallel() ctx.BottomUp("version", VersionMutator).Parallel() Loading Loading @@ -200,7 +200,8 @@ type BaseProperties struct { PreventInstall bool `blueprint:"mutated"` ApexesProvidingSharedLibs []string `blueprint:"mutated"` UseVndk bool `blueprint:"mutated"` VndkVersion string `blueprint:"mutated"` SubName string `blueprint:"mutated"` // *.logtags files, to combine together in order to generate the /system/etc/event-log-tags // file Loading Loading @@ -562,7 +563,7 @@ func (c *Module) isDependencyRoot() bool { } func (c *Module) useVndk() bool { return c.Properties.UseVndk return c.Properties.VndkVersion != "" } func (c *Module) isCoverageVariant() bool { Loading Loading @@ -596,10 +597,7 @@ func (c *Module) isVndk() bool { } func (c *Module) vndkVersion() string { if vndkdep := c.vndkdep; vndkdep != nil { return vndkdep.Properties.Vndk.Version } return "" return c.Properties.VndkVersion } func (c *Module) isPgoCompile() bool { Loading Loading @@ -1009,6 +1007,31 @@ func (c *Module) GenerateAndroidBuildActions(actx android.ModuleContext) { c.makeLinkType = c.getMakeLinkType(actx) c.Properties.SubName = "" if c.Target().NativeBridge == android.NativeBridgeEnabled { c.Properties.SubName += nativeBridgeSuffix } if _, ok := c.linker.(*vndkPrebuiltLibraryDecorator); ok { // .vendor suffix is added for backward compatibility with VNDK snapshot whose names with // such suffixes are already hard-coded in prebuilts/vndk/.../Android.bp. c.Properties.SubName += vendorSuffix } else if _, ok := c.linker.(*llndkStubDecorator); ok || (c.useVndk() && c.hasVendorVariant()) { // .vendor.{version} suffix is added only when we will have two variants: core and vendor. // The suffix is not added for vendor-only module. c.Properties.SubName += vendorSuffix vendorVersion := actx.DeviceConfig().VndkVersion() if vendorVersion == "current" { vendorVersion = actx.DeviceConfig().PlatformVndkVersion() } if c.Properties.VndkVersion != vendorVersion { c.Properties.SubName += "." + c.Properties.VndkVersion } } else if c.inRecovery() && !c.onlyInRecovery() { c.Properties.SubName += recoverySuffix } ctx := &moduleContext{ ModuleContext: actx, moduleContextImpl: moduleContextImpl{ Loading Loading @@ -1496,9 +1519,11 @@ func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) { if vndkdep := c.vndkdep; vndkdep != nil { if vndkdep.isVndkExt() { baseModuleMode := vendorMode var baseModuleMode string if actx.DeviceConfig().VndkVersion() == "" { baseModuleMode = coreMode } else { baseModuleMode = c.imageVariation() } actx.AddVariationDependencies([]blueprint.Variation{ {Mutator: "image", Variation: baseModuleMode}, Loading @@ -1521,7 +1546,7 @@ func checkLinkType(ctx android.ModuleContext, from *Module, to *Module, tag depe // Host code is not restricted return } if from.Properties.UseVndk { if from.useVndk() { // Though vendor code is limited by the vendor mutator, // each vendor-available module needs to check // link-type for VNDK. Loading Loading @@ -1928,7 +1953,15 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps { } else if c.useVndk() && bothVendorAndCoreVariantsExist { // The vendor module in Make will have been renamed to not conflict with the core // module, so update the dependency name here accordingly. return libName + vendorSuffix ret := libName + vendorSuffix vendorVersion := ctx.DeviceConfig().VndkVersion() if vendorVersion == "current" { vendorVersion = ctx.DeviceConfig().PlatformVndkVersion() } if c.Properties.VndkVersion != vendorVersion { ret += "." + c.Properties.VndkVersion } return ret } else if (ctx.Platform() || ctx.ProductSpecific()) && isVendorPublicLib { return libName + vendorPublicLibrarySuffix } else if ccDep.inRecovery() && !ccDep.onlyInRecovery() { Loading Loading @@ -2114,13 +2147,12 @@ func (c *Module) installable() bool { } func (c *Module) imageVariation() string { variation := "core" if c.useVndk() { variation = "vendor" return vendorMode + "." + c.Properties.VndkVersion } else if c.inRecovery() { variation = "recovery" return recoveryMode } return variation return coreMode } func (c *Module) IDEInfo(dpInfo *android.IdeInfo) { Loading Loading @@ -2197,7 +2229,7 @@ const ( // SDK libraries. (which framework-private libraries can use) coreMode = "core" // vendorMode is the variant used for /vendor code that compiles // vendorMode is the variant prefix used for /vendor code that compiles // against the VNDK. vendorMode = "vendor" Loading Loading @@ -2261,7 +2293,10 @@ func ImageMutator(mctx android.BottomUpMutatorContext) { variants = append(variants, coreMode) } if vendorVariantNeeded { variants = append(variants, vendorMode) variants = append(variants, vendorMode+"."+mctx.DeviceConfig().PlatformVndkVersion()) if vndkVersion := mctx.DeviceConfig().VndkVersion(); vndkVersion != "current" { variants = append(variants, vendorMode+"."+vndkVersion) } } if recoveryVariantNeeded { variants = append(variants, recoveryMode) Loading Loading @@ -2333,9 +2368,16 @@ func ImageMutator(mctx android.BottomUpMutatorContext) { } var coreVariantNeeded bool = false var vendorVariantNeeded bool = false var recoveryVariantNeeded bool = false var vendorVariants []string platformVndkVersion := mctx.DeviceConfig().PlatformVndkVersion() deviceVndkVersion := mctx.DeviceConfig().VndkVersion() if deviceVndkVersion == "current" { deviceVndkVersion = platformVndkVersion } if mctx.DeviceConfig().VndkVersion() == "" { // If the device isn't compiling against the VNDK, we always // use the core mode. Loading @@ -2346,22 +2388,31 @@ func ImageMutator(mctx android.BottomUpMutatorContext) { } else if _, ok := m.linker.(*llndkStubDecorator); ok { // LL-NDK stubs only exist in the vendor variant, since the // real libraries will be used in the core variant. vendorVariantNeeded = true vendorVariants = append(vendorVariants, platformVndkVersion, deviceVndkVersion, ) } else if _, ok := m.linker.(*llndkHeadersDecorator); ok { // ... and LL-NDK headers as well vendorVariantNeeded = true } else if _, ok := m.linker.(*vndkPrebuiltLibraryDecorator); ok { vendorVariants = append(vendorVariants, platformVndkVersion, deviceVndkVersion, ) } else if lib, ok := m.linker.(*vndkPrebuiltLibraryDecorator); ok { // Make vendor variants only for the versions in BOARD_VNDK_VERSION and // PRODUCT_EXTRA_VNDK_VERSIONS. vendorVariantNeeded = true vendorVariants = append(vendorVariants, lib.version()) } else if m.hasVendorVariant() && !vendorSpecific { // This will be available in both /system and /vendor // or a /system directory that is available to vendor. coreVariantNeeded = true vendorVariantNeeded = true vendorVariants = append(vendorVariants, platformVndkVersion) if m.isVndk() { vendorVariants = append(vendorVariants, deviceVndkVersion) } } else if vendorSpecific && String(m.Properties.Sdk_version) == "" { // This will be available in /vendor (or /odm) only vendorVariantNeeded = true vendorVariants = append(vendorVariants, deviceVndkVersion) } else { // This is either in /system (or similar: /data), or is a // modules built with the NDK. Modules built with the NDK Loading Loading @@ -2390,17 +2441,17 @@ func ImageMutator(mctx android.BottomUpMutatorContext) { if coreVariantNeeded { variants = append(variants, coreMode) } if vendorVariantNeeded { variants = append(variants, vendorMode) for _, variant := range android.FirstUniqueStrings(vendorVariants) { variants = append(variants, vendorMode+"."+variant) } if recoveryVariantNeeded { variants = append(variants, recoveryMode) } mod := mctx.CreateVariations(variants...) for i, v := range variants { if v == vendorMode { if strings.HasPrefix(v, vendorMode+".") { m := mod[i].(*Module) m.Properties.UseVndk = true m.Properties.VndkVersion = strings.TrimPrefix(v, vendorMode+".") squashVendorSrcs(m) } else if v == recoveryMode { m := mod[i].(*Module) Loading cc/cc_test.go +11 −9 Original line number Diff line number Diff line Loading @@ -112,7 +112,7 @@ func testCcError(t *testing.T, pattern string, bp string) { const ( coreVariant = "android_arm64_armv8-a_core_shared" vendorVariant = "android_arm64_armv8-a_vendor_shared" vendorVariant = "android_arm64_armv8-a_vendor.VER_shared" recoveryVariant = "android_arm64_armv8-a_recovery_shared" ) Loading Loading @@ -328,8 +328,8 @@ func TestVndk(t *testing.T) { vndkCoreLib2ndPath := filepath.Join(vndkLib2ndPath, "shared", "vndk-core") vndkSpLib2ndPath := filepath.Join(vndkLib2ndPath, "shared", "vndk-sp") variant := "android_arm64_armv8-a_vendor_shared" variant2nd := "android_arm_armv7-a-neon_vendor_shared" variant := "android_arm64_armv8-a_vendor.VER_shared" variant2nd := "android_arm_armv7-a-neon_vendor.VER_shared" checkVndkSnapshot(t, ctx, "libvndk", vndkCoreLibPath, variant) checkVndkSnapshot(t, ctx, "libvndk", vndkCoreLib2ndPath, variant2nd) Loading Loading @@ -1343,6 +1343,8 @@ func TestMakeLinkType(t *testing.T) { assertArrayString(t, *vndkPrivateLibraries(config), []string{"libllndkprivate", "libvndkprivate"}) vendorVariant27 := "android_arm64_armv8-a_vendor.27_shared" tests := []struct { variant string name string Loading @@ -1353,8 +1355,8 @@ func TestMakeLinkType(t *testing.T) { {vendorVariant, "libvndkprivate", "native:vndk_private"}, {vendorVariant, "libvendor", "native:vendor"}, {vendorVariant, "libvndkext", "native:vendor"}, {vendorVariant, "prevndk.vndk.27.arm.binder32", "native:vndk"}, {vendorVariant, "libllndk.llndk", "native:vndk"}, {vendorVariant27, "prevndk.vndk.27.arm.binder32", "native:vndk"}, {coreVariant, "libvndk", "native:platform"}, {coreVariant, "libvndkprivate", "native:platform"}, {coreVariant, "libllndk", "native:platform"}, Loading Loading @@ -1792,7 +1794,7 @@ func TestLlndkHeaders(t *testing.T) { `) // _static variant is used since _shared reuses *.o from the static variant cc := ctx.ModuleForTests("libvendor", "android_arm_armv7-a-neon_vendor_static").Rule("cc") cc := ctx.ModuleForTests("libvendor", "android_arm_armv7-a-neon_vendor.VER_static").Rule("cc") cflags := cc.Args["cFlags"] if !strings.Contains(cflags, "-Imy_include") { t.Errorf("cflags for libvendor must contain -Imy_include, but was %#v.", cflags) Loading Loading @@ -1878,7 +1880,7 @@ func TestRuntimeLibs(t *testing.T) { // runtime_libs for vendor variants have '.vendor' suffixes if the modules have both core // and vendor variants. variant = "android_arm64_armv8-a_vendor_shared" variant = "android_arm64_armv8-a_vendor.VER_shared" module = ctx.ModuleForTests("libvendor_available2", variant).Module().(*Module) checkRuntimeLibs(t, []string{"libvendor_available1.vendor"}, module) Loading @@ -1894,7 +1896,7 @@ func TestExcludeRuntimeLibs(t *testing.T) { module := ctx.ModuleForTests("libvendor_available3", variant).Module().(*Module) checkRuntimeLibs(t, []string{"libvendor_available1"}, module) variant = "android_arm64_armv8-a_vendor_shared" variant = "android_arm64_armv8-a_vendor.VER_shared" module = ctx.ModuleForTests("libvendor_available3", variant).Module().(*Module) checkRuntimeLibs(t, nil, module) } Loading Loading @@ -2091,9 +2093,9 @@ func TestVendorPublicLibraries(t *testing.T) { } // test if libvendor is linked to the real shared lib ld = ctx.ModuleForTests("libvendor", strings.Replace(variant, "_core", "_vendor", 1)).Rule("ld") ld = ctx.ModuleForTests("libvendor", strings.Replace(variant, "_core", "_vendor.VER", 1)).Rule("ld") libflags = ld.Args["libFlags"] stubPaths = getOutputPaths(ctx, strings.Replace(variant, "_core", "_vendor", 1), []string{"libvendorpublic"}) stubPaths = getOutputPaths(ctx, strings.Replace(variant, "_core", "_vendor.VER", 1), []string{"libvendorpublic"}) if !strings.Contains(libflags, stubPaths[0].String()) { t.Errorf("libflags for libvendor must contain %#v, but was %#v", stubPaths[0], libflags) } Loading Loading
apex/apex.go +1 −1 Original line number Diff line number Diff line Loading @@ -773,7 +773,7 @@ func (a *apexBundle) installable() bool { func (a *apexBundle) getImageVariation(config android.DeviceConfig) string { if config.VndkVersion() != "" && proptools.Bool(a.properties.Use_vendor) { return "vendor" return "vendor." + config.PlatformVndkVersion() } else { return "core" } Loading
apex/apex_test.go +2 −3 Original line number Diff line number Diff line Loading @@ -92,7 +92,6 @@ func testApexContext(t *testing.T, bp string, handlers ...testCustomizer) (*andr config.TestProductVariables.CertificateOverrides = []string{"myapex_keytest:myapex.certificate.override"} config.TestProductVariables.Platform_sdk_codename = proptools.StringPtr("Q") config.TestProductVariables.Platform_sdk_final = proptools.BoolPtr(false) config.TestProductVariables.DeviceVndkVersion = proptools.StringPtr("current") config.TestProductVariables.Platform_vndk_version = proptools.StringPtr("VER") ctx := android.NewTestArchContext() Loading Loading @@ -1050,8 +1049,8 @@ func TestUseVendor(t *testing.T) { inputsString := strings.Join(inputsList, " ") // ensure that the apex includes vendor variants of the direct and indirect deps ensureContains(t, inputsString, "android_arm64_armv8-a_vendor_shared_myapex/mylib.so") ensureContains(t, inputsString, "android_arm64_armv8-a_vendor_shared_myapex/mylib2.so") ensureContains(t, inputsString, "android_arm64_armv8-a_vendor.VER_shared_myapex/mylib.so") ensureContains(t, inputsString, "android_arm64_armv8-a_vendor.VER_shared_myapex/mylib2.so") // ensure that the apex does not include core variants ensureNotContains(t, inputsString, "android_arm64_armv8-a_core_shared_myapex/mylib.so") Loading
cc/androidmk.go +2 −12 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ type AndroidMkContext interface { Os() android.OsType Host() bool useVndk() bool vndkVersion() string static() bool inRecovery() bool } Loading Loading @@ -109,17 +110,7 @@ func (c *Module) AndroidMk() android.AndroidMkData { } c.subAndroidMk(&ret, c.installer) if c.Target().NativeBridge == android.NativeBridgeEnabled { ret.SubName += nativeBridgeSuffix } if c.useVndk() && c.hasVendorVariant() { // .vendor suffix is added only when we will have two variants: core and vendor. // The suffix is not added for vendor-only module. ret.SubName += vendorSuffix } else if c.inRecovery() && !c.onlyInRecovery() { ret.SubName += recoverySuffix } ret.SubName += c.Properties.SubName return ret } Loading Loading @@ -357,7 +348,6 @@ func (c *stubDecorator) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkDa func (c *llndkStubDecorator) AndroidMk(ctx AndroidMkContext, ret *android.AndroidMkData) { ret.Class = "SHARED_LIBRARIES" ret.SubName = vendorSuffix ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) { c.libraryDecorator.androidMkWriteExportedFlags(w) Loading
cc/cc.go +78 −27 Original line number Diff line number Diff line Loading @@ -36,9 +36,9 @@ func init() { android.RegisterModuleType("cc_defaults", defaultsFactory) android.PreDepsMutators(func(ctx android.RegisterMutatorsContext) { ctx.BottomUp("vndk", VndkMutator).Parallel() ctx.BottomUp("image", ImageMutator).Parallel() ctx.BottomUp("link", LinkageMutator).Parallel() ctx.BottomUp("vndk", VndkMutator).Parallel() ctx.BottomUp("ndk_api", ndkApiMutator).Parallel() ctx.BottomUp("test_per_src", TestPerSrcMutator).Parallel() ctx.BottomUp("version", VersionMutator).Parallel() Loading Loading @@ -200,7 +200,8 @@ type BaseProperties struct { PreventInstall bool `blueprint:"mutated"` ApexesProvidingSharedLibs []string `blueprint:"mutated"` UseVndk bool `blueprint:"mutated"` VndkVersion string `blueprint:"mutated"` SubName string `blueprint:"mutated"` // *.logtags files, to combine together in order to generate the /system/etc/event-log-tags // file Loading Loading @@ -562,7 +563,7 @@ func (c *Module) isDependencyRoot() bool { } func (c *Module) useVndk() bool { return c.Properties.UseVndk return c.Properties.VndkVersion != "" } func (c *Module) isCoverageVariant() bool { Loading Loading @@ -596,10 +597,7 @@ func (c *Module) isVndk() bool { } func (c *Module) vndkVersion() string { if vndkdep := c.vndkdep; vndkdep != nil { return vndkdep.Properties.Vndk.Version } return "" return c.Properties.VndkVersion } func (c *Module) isPgoCompile() bool { Loading Loading @@ -1009,6 +1007,31 @@ func (c *Module) GenerateAndroidBuildActions(actx android.ModuleContext) { c.makeLinkType = c.getMakeLinkType(actx) c.Properties.SubName = "" if c.Target().NativeBridge == android.NativeBridgeEnabled { c.Properties.SubName += nativeBridgeSuffix } if _, ok := c.linker.(*vndkPrebuiltLibraryDecorator); ok { // .vendor suffix is added for backward compatibility with VNDK snapshot whose names with // such suffixes are already hard-coded in prebuilts/vndk/.../Android.bp. c.Properties.SubName += vendorSuffix } else if _, ok := c.linker.(*llndkStubDecorator); ok || (c.useVndk() && c.hasVendorVariant()) { // .vendor.{version} suffix is added only when we will have two variants: core and vendor. // The suffix is not added for vendor-only module. c.Properties.SubName += vendorSuffix vendorVersion := actx.DeviceConfig().VndkVersion() if vendorVersion == "current" { vendorVersion = actx.DeviceConfig().PlatformVndkVersion() } if c.Properties.VndkVersion != vendorVersion { c.Properties.SubName += "." + c.Properties.VndkVersion } } else if c.inRecovery() && !c.onlyInRecovery() { c.Properties.SubName += recoverySuffix } ctx := &moduleContext{ ModuleContext: actx, moduleContextImpl: moduleContextImpl{ Loading Loading @@ -1496,9 +1519,11 @@ func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) { if vndkdep := c.vndkdep; vndkdep != nil { if vndkdep.isVndkExt() { baseModuleMode := vendorMode var baseModuleMode string if actx.DeviceConfig().VndkVersion() == "" { baseModuleMode = coreMode } else { baseModuleMode = c.imageVariation() } actx.AddVariationDependencies([]blueprint.Variation{ {Mutator: "image", Variation: baseModuleMode}, Loading @@ -1521,7 +1546,7 @@ func checkLinkType(ctx android.ModuleContext, from *Module, to *Module, tag depe // Host code is not restricted return } if from.Properties.UseVndk { if from.useVndk() { // Though vendor code is limited by the vendor mutator, // each vendor-available module needs to check // link-type for VNDK. Loading Loading @@ -1928,7 +1953,15 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps { } else if c.useVndk() && bothVendorAndCoreVariantsExist { // The vendor module in Make will have been renamed to not conflict with the core // module, so update the dependency name here accordingly. return libName + vendorSuffix ret := libName + vendorSuffix vendorVersion := ctx.DeviceConfig().VndkVersion() if vendorVersion == "current" { vendorVersion = ctx.DeviceConfig().PlatformVndkVersion() } if c.Properties.VndkVersion != vendorVersion { ret += "." + c.Properties.VndkVersion } return ret } else if (ctx.Platform() || ctx.ProductSpecific()) && isVendorPublicLib { return libName + vendorPublicLibrarySuffix } else if ccDep.inRecovery() && !ccDep.onlyInRecovery() { Loading Loading @@ -2114,13 +2147,12 @@ func (c *Module) installable() bool { } func (c *Module) imageVariation() string { variation := "core" if c.useVndk() { variation = "vendor" return vendorMode + "." + c.Properties.VndkVersion } else if c.inRecovery() { variation = "recovery" return recoveryMode } return variation return coreMode } func (c *Module) IDEInfo(dpInfo *android.IdeInfo) { Loading Loading @@ -2197,7 +2229,7 @@ const ( // SDK libraries. (which framework-private libraries can use) coreMode = "core" // vendorMode is the variant used for /vendor code that compiles // vendorMode is the variant prefix used for /vendor code that compiles // against the VNDK. vendorMode = "vendor" Loading Loading @@ -2261,7 +2293,10 @@ func ImageMutator(mctx android.BottomUpMutatorContext) { variants = append(variants, coreMode) } if vendorVariantNeeded { variants = append(variants, vendorMode) variants = append(variants, vendorMode+"."+mctx.DeviceConfig().PlatformVndkVersion()) if vndkVersion := mctx.DeviceConfig().VndkVersion(); vndkVersion != "current" { variants = append(variants, vendorMode+"."+vndkVersion) } } if recoveryVariantNeeded { variants = append(variants, recoveryMode) Loading Loading @@ -2333,9 +2368,16 @@ func ImageMutator(mctx android.BottomUpMutatorContext) { } var coreVariantNeeded bool = false var vendorVariantNeeded bool = false var recoveryVariantNeeded bool = false var vendorVariants []string platformVndkVersion := mctx.DeviceConfig().PlatformVndkVersion() deviceVndkVersion := mctx.DeviceConfig().VndkVersion() if deviceVndkVersion == "current" { deviceVndkVersion = platformVndkVersion } if mctx.DeviceConfig().VndkVersion() == "" { // If the device isn't compiling against the VNDK, we always // use the core mode. Loading @@ -2346,22 +2388,31 @@ func ImageMutator(mctx android.BottomUpMutatorContext) { } else if _, ok := m.linker.(*llndkStubDecorator); ok { // LL-NDK stubs only exist in the vendor variant, since the // real libraries will be used in the core variant. vendorVariantNeeded = true vendorVariants = append(vendorVariants, platformVndkVersion, deviceVndkVersion, ) } else if _, ok := m.linker.(*llndkHeadersDecorator); ok { // ... and LL-NDK headers as well vendorVariantNeeded = true } else if _, ok := m.linker.(*vndkPrebuiltLibraryDecorator); ok { vendorVariants = append(vendorVariants, platformVndkVersion, deviceVndkVersion, ) } else if lib, ok := m.linker.(*vndkPrebuiltLibraryDecorator); ok { // Make vendor variants only for the versions in BOARD_VNDK_VERSION and // PRODUCT_EXTRA_VNDK_VERSIONS. vendorVariantNeeded = true vendorVariants = append(vendorVariants, lib.version()) } else if m.hasVendorVariant() && !vendorSpecific { // This will be available in both /system and /vendor // or a /system directory that is available to vendor. coreVariantNeeded = true vendorVariantNeeded = true vendorVariants = append(vendorVariants, platformVndkVersion) if m.isVndk() { vendorVariants = append(vendorVariants, deviceVndkVersion) } } else if vendorSpecific && String(m.Properties.Sdk_version) == "" { // This will be available in /vendor (or /odm) only vendorVariantNeeded = true vendorVariants = append(vendorVariants, deviceVndkVersion) } else { // This is either in /system (or similar: /data), or is a // modules built with the NDK. Modules built with the NDK Loading Loading @@ -2390,17 +2441,17 @@ func ImageMutator(mctx android.BottomUpMutatorContext) { if coreVariantNeeded { variants = append(variants, coreMode) } if vendorVariantNeeded { variants = append(variants, vendorMode) for _, variant := range android.FirstUniqueStrings(vendorVariants) { variants = append(variants, vendorMode+"."+variant) } if recoveryVariantNeeded { variants = append(variants, recoveryMode) } mod := mctx.CreateVariations(variants...) for i, v := range variants { if v == vendorMode { if strings.HasPrefix(v, vendorMode+".") { m := mod[i].(*Module) m.Properties.UseVndk = true m.Properties.VndkVersion = strings.TrimPrefix(v, vendorMode+".") squashVendorSrcs(m) } else if v == recoveryMode { m := mod[i].(*Module) Loading
cc/cc_test.go +11 −9 Original line number Diff line number Diff line Loading @@ -112,7 +112,7 @@ func testCcError(t *testing.T, pattern string, bp string) { const ( coreVariant = "android_arm64_armv8-a_core_shared" vendorVariant = "android_arm64_armv8-a_vendor_shared" vendorVariant = "android_arm64_armv8-a_vendor.VER_shared" recoveryVariant = "android_arm64_armv8-a_recovery_shared" ) Loading Loading @@ -328,8 +328,8 @@ func TestVndk(t *testing.T) { vndkCoreLib2ndPath := filepath.Join(vndkLib2ndPath, "shared", "vndk-core") vndkSpLib2ndPath := filepath.Join(vndkLib2ndPath, "shared", "vndk-sp") variant := "android_arm64_armv8-a_vendor_shared" variant2nd := "android_arm_armv7-a-neon_vendor_shared" variant := "android_arm64_armv8-a_vendor.VER_shared" variant2nd := "android_arm_armv7-a-neon_vendor.VER_shared" checkVndkSnapshot(t, ctx, "libvndk", vndkCoreLibPath, variant) checkVndkSnapshot(t, ctx, "libvndk", vndkCoreLib2ndPath, variant2nd) Loading Loading @@ -1343,6 +1343,8 @@ func TestMakeLinkType(t *testing.T) { assertArrayString(t, *vndkPrivateLibraries(config), []string{"libllndkprivate", "libvndkprivate"}) vendorVariant27 := "android_arm64_armv8-a_vendor.27_shared" tests := []struct { variant string name string Loading @@ -1353,8 +1355,8 @@ func TestMakeLinkType(t *testing.T) { {vendorVariant, "libvndkprivate", "native:vndk_private"}, {vendorVariant, "libvendor", "native:vendor"}, {vendorVariant, "libvndkext", "native:vendor"}, {vendorVariant, "prevndk.vndk.27.arm.binder32", "native:vndk"}, {vendorVariant, "libllndk.llndk", "native:vndk"}, {vendorVariant27, "prevndk.vndk.27.arm.binder32", "native:vndk"}, {coreVariant, "libvndk", "native:platform"}, {coreVariant, "libvndkprivate", "native:platform"}, {coreVariant, "libllndk", "native:platform"}, Loading Loading @@ -1792,7 +1794,7 @@ func TestLlndkHeaders(t *testing.T) { `) // _static variant is used since _shared reuses *.o from the static variant cc := ctx.ModuleForTests("libvendor", "android_arm_armv7-a-neon_vendor_static").Rule("cc") cc := ctx.ModuleForTests("libvendor", "android_arm_armv7-a-neon_vendor.VER_static").Rule("cc") cflags := cc.Args["cFlags"] if !strings.Contains(cflags, "-Imy_include") { t.Errorf("cflags for libvendor must contain -Imy_include, but was %#v.", cflags) Loading Loading @@ -1878,7 +1880,7 @@ func TestRuntimeLibs(t *testing.T) { // runtime_libs for vendor variants have '.vendor' suffixes if the modules have both core // and vendor variants. variant = "android_arm64_armv8-a_vendor_shared" variant = "android_arm64_armv8-a_vendor.VER_shared" module = ctx.ModuleForTests("libvendor_available2", variant).Module().(*Module) checkRuntimeLibs(t, []string{"libvendor_available1.vendor"}, module) Loading @@ -1894,7 +1896,7 @@ func TestExcludeRuntimeLibs(t *testing.T) { module := ctx.ModuleForTests("libvendor_available3", variant).Module().(*Module) checkRuntimeLibs(t, []string{"libvendor_available1"}, module) variant = "android_arm64_armv8-a_vendor_shared" variant = "android_arm64_armv8-a_vendor.VER_shared" module = ctx.ModuleForTests("libvendor_available3", variant).Module().(*Module) checkRuntimeLibs(t, nil, module) } Loading Loading @@ -2091,9 +2093,9 @@ func TestVendorPublicLibraries(t *testing.T) { } // test if libvendor is linked to the real shared lib ld = ctx.ModuleForTests("libvendor", strings.Replace(variant, "_core", "_vendor", 1)).Rule("ld") ld = ctx.ModuleForTests("libvendor", strings.Replace(variant, "_core", "_vendor.VER", 1)).Rule("ld") libflags = ld.Args["libFlags"] stubPaths = getOutputPaths(ctx, strings.Replace(variant, "_core", "_vendor", 1), []string{"libvendorpublic"}) stubPaths = getOutputPaths(ctx, strings.Replace(variant, "_core", "_vendor.VER", 1), []string{"libvendorpublic"}) if !strings.Contains(libflags, stubPaths[0].String()) { t.Errorf("libflags for libvendor must contain %#v, but was %#v", stubPaths[0], libflags) } Loading