Fix llndk_library init

llndk_library modules were not calling module.Init(), which caused them
not to register ModuleBase.VendorProperties.  Unregistered property
structs lose their values during cloning, which caused the shared
variants of llndk_library modules to not have IsLLNDK set.

Call module.Init(), which registers ModuleBase.VendorProperties.  Also
add a helper function to filter out llndk_library modules that now
show up in the list of modules with IsLLNDK set.

Bug: 170784825
Test: m checkbuild
Change-Id: Iafde85f6a95e85a618f6f7d7a210398febb6b158
This commit is contained in:
Colin Cross
2021-01-06 14:07:27 -08:00
parent 47d186cd4e
commit 4f4f8ebd3f
2 changed files with 14 additions and 12 deletions

View File

@@ -1738,12 +1738,9 @@ func LinkageMutator(mctx android.BottomUpMutatorContext) {
isLLNDK := false
if m, ok := mctx.Module().(*Module); ok {
isLLNDK = m.IsLlndk()
// Don't count the vestigial llndk_library module as isLLNDK, it needs a static
// variant so that a cc_library_prebuilt can depend on it.
if _, ok := m.linker.(*llndkStubDecorator); ok {
isLLNDK = false
}
isLLNDK = m.IsLlndk() && !isVestigialLLNDKModule(m)
}
buildStatic := library.BuildStaticVariant() && !isLLNDK
buildShared := library.BuildSharedVariant()

View File

@@ -100,6 +100,11 @@ func (stub *llndkStubDecorator) Name(name string) string {
return name + llndkLibrarySuffix
}
func (stub *llndkStubDecorator) linkerProps() []interface{} {
props := stub.libraryDecorator.linkerProps()
return append(props, &stub.Properties)
}
func (stub *llndkStubDecorator) linkerFlags(ctx ModuleContext, flags Flags) Flags {
stub.libraryDecorator.libName = stub.implementationModuleName(ctx.ModuleName())
return stub.libraryDecorator.linkerFlags(ctx, flags)
@@ -137,12 +142,6 @@ func NewLLndkStubLibrary() *Module {
module.installer = nil
module.library = stub
module.AddProperties(
&module.Properties,
&stub.Properties,
&library.MutatedProperties,
&library.flagExporter.Properties)
return module
}
@@ -156,8 +155,14 @@ func NewLLndkStubLibrary() *Module {
// }
func LlndkLibraryFactory() android.Module {
module := NewLLndkStubLibrary()
android.InitAndroidArchModule(module, android.DeviceSupported, android.MultilibBoth)
return module
return module.Init()
}
// isVestigialLLNDKModule returns true if m is a vestigial llndk_library module used to provide
// properties to the LLNDK variant of a cc_library.
func isVestigialLLNDKModule(m *Module) bool {
_, ok := m.linker.(*llndkStubDecorator)
return ok
}
type llndkHeadersDecorator struct {