diff options
-rw-r--r-- | cc/androidmk.go | 2 | ||||
-rw-r--r-- | cc/cc.go | 51 | ||||
-rw-r--r-- | cc/cc_test.go | 4 | ||||
-rw-r--r-- | cc/image.go | 10 | ||||
-rw-r--r-- | cc/library.go | 14 | ||||
-rw-r--r-- | cc/linkable.go | 5 | ||||
-rw-r--r-- | cc/vendor_snapshot.go | 4 | ||||
-rw-r--r-- | cc/vndk.go | 4 | ||||
-rw-r--r-- | rust/rust.go | 12 |
9 files changed, 65 insertions, 41 deletions
diff --git a/cc/androidmk.go b/cc/androidmk.go index 9b61e55e9..4f4b047d0 100644 --- a/cc/androidmk.go +++ b/cc/androidmk.go @@ -113,7 +113,7 @@ func (c *Module) AndroidMkEntries() []android.AndroidMkEntries { entries.SetString("LOCAL_SOONG_VNDK_VERSION", c.VndkVersion()) // VNDK libraries available to vendor are not installed because // they are packaged in VNDK APEX and installed by APEX packages (apex/apex.go) - if !c.isVndkExt() { + if !c.IsVndkExt() { entries.SetBool("LOCAL_UNINSTALLABLE_MODULE", true) } } @@ -409,7 +409,7 @@ type ModuleContextIntf interface { isVndkPrivate(config android.Config) bool isVndk() bool isVndkSp() bool - isVndkExt() bool + IsVndkExt() bool inProduct() bool inVendor() bool inRamdisk() bool @@ -1035,7 +1035,7 @@ func (c *Module) isLlndkPublic(config android.Config) bool { return isLlndkLibrary(name, config) && !isVndkPrivateLibrary(name, config) } -func (c *Module) isVndkPrivate(config android.Config) bool { +func (c *Module) IsVndkPrivate(config android.Config) bool { // Returns true for LLNDK-private, VNDK-SP-private, and VNDK-core-private. return isVndkPrivateLibrary(c.BaseModuleName(), config) } @@ -1068,7 +1068,7 @@ func (c *Module) isVndkSp() bool { return false } -func (c *Module) isVndkExt() bool { +func (c *Module) IsVndkExt() bool { if vndkdep := c.vndkdep; vndkdep != nil { return vndkdep.isVndkExt() } @@ -1252,7 +1252,7 @@ func (ctx *moduleContextImpl) isLlndkPublic(config android.Config) bool { } func (ctx *moduleContextImpl) isVndkPrivate(config android.Config) bool { - return ctx.mod.isVndkPrivate(config) + return ctx.mod.IsVndkPrivate(config) } func (ctx *moduleContextImpl) isVndk() bool { @@ -1271,8 +1271,8 @@ func (ctx *moduleContextImpl) isVndkSp() bool { return ctx.mod.isVndkSp() } -func (ctx *moduleContextImpl) isVndkExt() bool { - return ctx.mod.isVndkExt() +func (ctx *moduleContextImpl) IsVndkExt() bool { + return ctx.mod.IsVndkExt() } func (ctx *moduleContextImpl) mustUseVendorVariant() bool { @@ -1425,7 +1425,7 @@ func (c *Module) getNameSuffixWithVndkVersion(ctx android.ModuleContext) string // "current", it will append the VNDK version to the name suffix. var vndkVersion string var nameSuffix string - if c.inProduct() { + if c.InProduct() { vndkVersion = ctx.DeviceConfig().ProductVndkVersion() nameSuffix = productSuffix } else { @@ -1459,7 +1459,7 @@ func (c *Module) GenerateAndroidBuildActions(actx android.ModuleContext) { c.hideApexVariantFromMake = true } - c.makeLinkType = c.getMakeLinkType(actx) + c.makeLinkType = GetMakeLinkType(actx, c) c.Properties.SubName = "" @@ -2101,7 +2101,7 @@ func checkLinkType(ctx android.BaseModuleContext, from LinkableInterface, to Lin return } - if from.Module().Target().Os != android.Android { + if from.Target().Os != android.Android { // Host code is not restricted return } @@ -2115,6 +2115,11 @@ func checkLinkType(ctx android.BaseModuleContext, from LinkableInterface, to Lin if ccFrom.vndkdep != nil { ccFrom.vndkdep.vndkCheckLinkType(ctx, ccTo, tag) } + } else if linkableMod, ok := to.(LinkableInterface); ok { + // Static libraries from other languages can be linked + if !linkableMod.Static() { + ctx.ModuleErrorf("Attempting to link VNDK cc.Module with unsupported module type") + } } else { ctx.ModuleErrorf("Attempting to link VNDK cc.Module with unsupported module type") } @@ -2791,7 +2796,7 @@ func (c *Module) makeLibName(ctx android.ModuleContext, ccDep LinkableInterface, return libName + vendorRamdiskSuffix } else if ccDep.InRecovery() && !ccDep.OnlyInRecovery() { return libName + recoverySuffix - } else if ccDep.Module().Target().NativeBridge == android.NativeBridgeEnabled { + } else if ccDep.Target().NativeBridge == android.NativeBridgeEnabled { return libName + nativeBridgeSuffix } else { return libName @@ -2903,22 +2908,24 @@ func (c *Module) object() bool { return false } -func (c *Module) getMakeLinkType(actx android.ModuleContext) string { +func GetMakeLinkType(actx android.ModuleContext, c LinkableInterface) string { if c.UseVndk() { - if lib, ok := c.linker.(*llndkStubDecorator); ok { - if Bool(lib.Properties.Vendor_available) { - return "native:vndk" + if ccModule, ok := c.Module().(*Module); ok { + // Only CC modules provide stubs at the moment. + if lib, ok := ccModule.linker.(*llndkStubDecorator); ok { + if Bool(lib.Properties.Vendor_available) { + return "native:vndk" + } + return "native:vndk_private" } - return "native:vndk_private" } - if c.IsVndk() && !c.isVndkExt() { - // Product_available, if defined, must have the same value with Vendor_available. - if Bool(c.VendorProperties.Vendor_available) { - return "native:vndk" + if c.IsVndk() && !c.IsVndkExt() { + if c.IsVndkPrivate(actx.Config()) { + return "native:vndk_private" } - return "native:vndk_private" + return "native:vndk" } - if c.inProduct() { + if c.InProduct() { return "native:product" } return "native:vendor" @@ -2928,7 +2935,7 @@ func (c *Module) getMakeLinkType(actx android.ModuleContext) string { return "native:vendor_ramdisk" } else if c.InRecovery() { return "native:recovery" - } else if c.Target().Os == android.Android && String(c.Properties.Sdk_version) != "" { + } else if c.Target().Os == android.Android && c.SdkVersion() != "" { return "native:ndk:none:none" // TODO(b/114741097): use the correct ndk stl once build errors have been fixed //family, link := getNdkStlFamilyAndLinkType(c) diff --git a/cc/cc_test.go b/cc/cc_test.go index ce941d5d9..c16cce83c 100644 --- a/cc/cc_test.go +++ b/cc/cc_test.go @@ -250,8 +250,8 @@ func checkVndkModule(t *testing.T, ctx *android.TestContext, name, subDir string // Check VNDK extension properties. isVndkExt := extends != "" - if mod.isVndkExt() != isVndkExt { - t.Errorf("%q isVndkExt() must equal to %t", name, isVndkExt) + if mod.IsVndkExt() != isVndkExt { + t.Errorf("%q IsVndkExt() must equal to %t", name, isVndkExt) } if actualExtends := mod.getVndkExtendsModuleName(); actualExtends != extends { diff --git a/cc/image.go b/cc/image.go index 3d6769e6a..32325b910 100644 --- a/cc/image.go +++ b/cc/image.go @@ -41,7 +41,7 @@ func (c *Module) getImageVariantType() imageVariantType { return hostImageVariant } else if c.inVendor() { return vendorImageVariant - } else if c.inProduct() { + } else if c.InProduct() { return productImageVariant } else if c.InRamdisk() { return ramdiskImageVariant @@ -67,7 +67,7 @@ const ( func (ctx *moduleContext) ProductSpecific() bool { //TODO(b/150902910): Replace HasNonSystemVariants() with HasProductVariant() return ctx.ModuleContext.ProductSpecific() || - (ctx.mod.HasNonSystemVariants() && ctx.mod.inProduct()) + (ctx.mod.HasNonSystemVariants() && ctx.mod.InProduct()) } func (ctx *moduleContext) SocSpecific() bool { @@ -76,7 +76,7 @@ func (ctx *moduleContext) SocSpecific() bool { } func (ctx *moduleContextImpl) inProduct() bool { - return ctx.mod.inProduct() + return ctx.mod.InProduct() } func (ctx *moduleContextImpl) inVendor() bool { @@ -111,7 +111,7 @@ 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 { +func (c *Module) InProduct() bool { return c.Properties.ImageVariationPrefix == ProductVariationPrefix } @@ -265,7 +265,7 @@ func (m *Module) ImageMutatorBegin(mctx android.BaseModuleContext) { } else { mctx.ModuleErrorf("version is unknown for snapshot prebuilt") } - } else if m.HasNonSystemVariants() && !m.isVndkExt() { + } else if m.HasNonSystemVariants() && !m.IsVndkExt() { // This will be available to /system unless it is product_specific // which will be handled later. coreVariantNeeded = true diff --git a/cc/library.go b/cc/library.go index b796aafe3..06b99054f 100644 --- a/cc/library.go +++ b/cc/library.go @@ -610,13 +610,13 @@ func (library *libraryDecorator) classifySourceAbiDump(ctx ModuleContext) string } if ctx.useVndk() && ctx.isVndk() && !ctx.isVndkPrivate(ctx.Config()) { if ctx.isVndkSp() { - if ctx.isVndkExt() { + if ctx.IsVndkExt() { return "VNDK-SP-ext" } else { return "VNDK-SP" } } else { - if ctx.isVndkExt() { + if ctx.IsVndkExt() { return "VNDK-ext" } else { return "VNDK-core" @@ -767,7 +767,7 @@ func (library *libraryDecorator) getLibNameHelper(baseModuleName string, useVndk func (library *libraryDecorator) getLibName(ctx BaseModuleContext) string { name := library.getLibNameHelper(ctx.baseModuleName(), ctx.useVndk()) - if ctx.isVndkExt() { + if ctx.IsVndkExt() { // vndk-ext lib should have the same name with original lib ctx.VisitDirectDepsWithTag(vndkExtDepTag, func(module android.Module) { originalName := module.(*Module).outputFile.Path() @@ -1190,7 +1190,7 @@ func (library *libraryDecorator) linkSAbiDumpFiles(ctx ModuleContext, objs Objec library.sAbiDiff = sourceAbiDiff(ctx, library.sAbiOutputFile.Path(), refAbiDumpFile, fileName, exportedHeaderFlags, Bool(library.Properties.Header_abi_checker.Check_all_apis), - ctx.isLlndk(ctx.Config()), ctx.isNdk(ctx.Config()), ctx.isVndkExt()) + ctx.isLlndk(ctx.Config()), ctx.isNdk(ctx.Config()), ctx.IsVndkExt()) } } } @@ -1320,7 +1320,7 @@ func (library *libraryDecorator) install(ctx ModuleContext, file android.Path) { if library.shared() { if ctx.Device() && ctx.useVndk() { // set subDir for VNDK extensions - if ctx.isVndkExt() { + if ctx.IsVndkExt() { if ctx.isVndkSp() { library.baseInstaller.subDir = "vndk-sp" } else { @@ -1329,7 +1329,7 @@ func (library *libraryDecorator) install(ctx ModuleContext, file android.Path) { } // In some cases we want to use core variant for VNDK-Core libs - if ctx.isVndk() && !ctx.isVndkSp() && !ctx.isVndkExt() { + if ctx.isVndk() && !ctx.isVndkSp() && !ctx.IsVndkExt() { mayUseCoreVariant := true if ctx.mustUseVendorVariant() { @@ -1350,7 +1350,7 @@ func (library *libraryDecorator) install(ctx ModuleContext, file android.Path) { // do not install vndk libs // vndk libs are packaged into VNDK APEX - if ctx.isVndk() && !ctx.isVndkExt() { + if ctx.isVndk() && !ctx.IsVndkExt() { return } } else if len(library.Properties.Stubs.Versions) > 0 && !ctx.Host() && ctx.directlyInAnyApex() { diff --git a/cc/linkable.go b/cc/linkable.go index ddf395009..4efe2a765 100644 --- a/cc/linkable.go +++ b/cc/linkable.go @@ -8,6 +8,8 @@ import ( // LinkableInterface is an interface for a type of module that is linkable in a C++ library. type LinkableInterface interface { + android.Module + Module() android.Module CcLibrary() bool CcLibraryInterface() bool @@ -42,7 +44,10 @@ type LinkableInterface interface { UseVndk() bool MustUseVendorVariant() bool IsVndk() bool + IsVndkExt() bool + IsVndkPrivate(config android.Config) bool HasVendorVariant() bool + InProduct() bool SdkVersion() string AlwaysSdk() bool diff --git a/cc/vendor_snapshot.go b/cc/vendor_snapshot.go index 25960ab96..da37d0f1a 100644 --- a/cc/vendor_snapshot.go +++ b/cc/vendor_snapshot.go @@ -245,7 +245,7 @@ func isSnapshotAware(m *Module, inProprietaryPath bool, apexInfo android.ApexInf if !m.IsVndk() { return true } - return m.isVndkExt() + return m.IsVndkExt() } } return true @@ -353,7 +353,7 @@ func (c *snapshotSingleton) GenerateBuildActions(ctx android.SingletonContext) { // Common properties among snapshots. prop.ModuleName = ctx.ModuleName(m) - if c.supportsVndkExt && m.isVndkExt() { + if c.supportsVndkExt && m.IsVndkExt() { // vndk exts are installed to /vendor/lib(64)?/vndk(-sp)? if m.isVndkSp() { prop.RelativeInstallPath = "vndk-sp" diff --git a/cc/vndk.go b/cc/vndk.go index eca1cdfdb..1529ac5a2 100644 --- a/cc/vndk.go +++ b/cc/vndk.go @@ -389,7 +389,7 @@ func IsForVndkApex(mctx android.BottomUpMutatorContext, m *Module) bool { useCoreVariant := m.VndkVersion() == mctx.DeviceConfig().PlatformVndkVersion() && mctx.DeviceConfig().VndkUseCoreVariant() && !m.MustUseVendorVariant() - return lib.shared() && m.inVendor() && m.IsVndk() && !m.isVndkExt() && !useCoreVariant + return lib.shared() && m.inVendor() && m.IsVndk() && !m.IsVndkExt() && !useCoreVariant } return false } @@ -549,7 +549,7 @@ func isVndkSnapshotAware(config android.DeviceConfig, m *Module, if !ok || !l.shared() { return nil, "", false } - if m.VndkVersion() == config.PlatformVndkVersion() && m.IsVndk() && !m.isVndkExt() { + if m.VndkVersion() == config.PlatformVndkVersion() && m.IsVndk() && !m.IsVndkExt() { if m.isVndkSp() { return l, "vndk-sp", true } else { diff --git a/rust/rust.go b/rust/rust.go index 1ceedf397..c1388d595 100644 --- a/rust/rust.go +++ b/rust/rust.go @@ -211,6 +211,18 @@ func (mod *Module) HasVendorVariant() bool { return false } +func (mod *Module) IsVndkExt() bool { + return false +} + +func (c *Module) IsVndkPrivate(config android.Config) bool { + return false +} + +func (mod *Module) InProduct() bool { + return false +} + func (mod *Module) SdkVersion() string { return "" } |