soong: fix wrong link type for VNDKs
Do not rely on 'module.Name()' to decide VNDK link type.
Some prebuilt modules such as libclang_rt_prebuilt_library_shared and
vndk_prebuilt may have different naming schemes.(prefix/suffix)
And llndk_library module has '.llndk' suffix.
Instead, use VNDK-related properties (e.g. vndk.enabled,
vendor_available, etc.).
Bug: 132800095
Test: m & check LOCAL_SOONG_LINK_TYPE for prebuilts
Change-Id: I06b0c182aeab16969c44a86397f02be4beb80bbd
diff --git a/cc/cc.go b/cc/cc.go
index 786e4fd..de108b4 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -919,7 +919,7 @@
}
func (c *Module) GenerateAndroidBuildActions(actx android.ModuleContext) {
- c.makeLinkType = c.getMakeLinkType(actx.Config())
+ c.makeLinkType = c.getMakeLinkType(actx)
ctx := &moduleContext{
ModuleContext: actx,
@@ -1940,19 +1940,22 @@
return false
}
-func (c *Module) getMakeLinkType(config android.Config) string {
+func (c *Module) getMakeLinkType(actx android.ModuleContext) string {
+ name := actx.ModuleName()
if c.useVndk() {
- if inList(c.Name(), *vndkCoreLibraries(config)) ||
- inList(c.Name(), *vndkSpLibraries(config)) ||
- inList(c.Name(), *llndkLibraries(config)) {
- if inList(c.Name(), *vndkPrivateLibraries(config)) {
- return "native:vndk_private"
- } else {
+ if lib, ok := c.linker.(*llndkStubDecorator); ok {
+ if Bool(lib.Properties.Vendor_available) {
return "native:vndk"
}
- } else {
- return "native:vendor"
+ return "native:vndk_private"
}
+ if c.isVndk() && !c.isVndkExt() {
+ if Bool(c.VendorProperties.Vendor_available) {
+ return "native:vndk"
+ }
+ return "native:vndk_private"
+ }
+ return "native:vendor"
} else if c.inRecovery() {
return "native:recovery"
} else if c.Target().Os == android.Android && String(c.Properties.Sdk_version) != "" {
@@ -1960,7 +1963,7 @@
// TODO(b/114741097): use the correct ndk stl once build errors have been fixed
//family, link := getNdkStlFamilyAndLinkType(c)
//return fmt.Sprintf("native:ndk:%s:%s", family, link)
- } else if inList(c.Name(), *vndkUsingCoreVariantLibraries(config)) {
+ } else if inList(name, *vndkUsingCoreVariantLibraries(actx.Config())) {
return "native:platform_vndk"
} else {
return "native:platform"