Add support for cc_library_headers to replace llndk_headers

Set llndk.llndk_headers: true to allow a cc_library_headers
module to be used by a cc_library module with llndk.symbol_file set.

Bug: 170784825
Test: TestLlndkHeaders
Change-Id: Ib65a4b70717dc9a54ae30f2991485bb1bb9b8409
This commit is contained in:
Colin Cross 2021-04-26 18:37:44 -07:00
parent be763f7b16
commit 1f3f130e29
6 changed files with 18 additions and 7 deletions

View file

@ -1135,9 +1135,9 @@ func (c *Module) IsLlndkLibrary() bool {
return false
}
func (m *Module) HasLlndkStubs() bool {
func (m *Module) NeedsLlndkVariants() bool {
lib := moduleLibraryInterface(m)
return lib != nil && lib.hasLLNDKStubs()
return lib != nil && (lib.hasLLNDKStubs() || lib.hasLLNDKHeaders())
}
// isImplementationForLLNDKPublic returns true for any variant of a cc_library that has LLNDK stubs

View file

@ -437,13 +437,13 @@ func MutateImage(mctx android.BaseModuleContext, m ImageMutatableModule) {
productVndkVersion = platformVndkVersion
}
if m.IsLlndkLibrary() || m.IsLlndkHeaders() || m.HasLlndkStubs() {
if m.IsLlndkLibrary() || m.IsLlndkHeaders() || m.NeedsLlndkVariants() {
// This is an LLNDK library. The implementation of the library will be on /system,
// and vendor and product variants will be created with LLNDK stubs.
// The LLNDK libraries need vendor variants even if there is no VNDK.
// The obsolete llndk_library and llndk_headers modules also need the vendor variants
// so the cc_library LLNDK stubs can depend on them.
if m.HasLlndkStubs() {
if m.NeedsLlndkVariants() {
coreVariantNeeded = true
}
if platformVndkVersion != "" {

View file

@ -869,6 +869,7 @@ type versionedInterface interface {
implementationModuleName(name string) string
hasLLNDKStubs() bool
hasLLNDKHeaders() bool
}
var _ libraryInterface = (*libraryDecorator)(nil)
@ -1683,6 +1684,12 @@ func (library *libraryDecorator) hasVestigialLLNDKLibrary() bool {
return String(library.Properties.Llndk_stubs) != ""
}
// hasLLNDKHeaders returns true if this cc_library module has a variant that provides headers
// to a module that sets llndk.symbol_file.
func (library *libraryDecorator) hasLLNDKHeaders() bool {
return Bool(library.Properties.Llndk.Llndk_headers)
}
func (library *libraryDecorator) implementationModuleName(name string) string {
return name
}

View file

@ -112,8 +112,8 @@ type LinkableInterface interface {
// IsLlndkLibrary returns true if this module is an LLNDK library module.
IsLlndkLibrary() bool
// HasLlndkStubs returns true if this module has LLNDK stubs.
HasLlndkStubs() bool
// NeedsLlndkVariants returns true if this module has LLNDK stubs or provides LLNDK headers.
NeedsLlndkVariants() bool
UseVndk() bool
MustUseVendorVariant() bool

View file

@ -69,6 +69,10 @@ type llndkLibraryProperties struct {
// vendor nor product libraries. This effectively hides this module from
// non-system modules. Default value is false.
Private *bool
// if true, make this module available to provide headers to other modules that set
// llndk.symbol_file.
Llndk_headers *bool
}
type llndkStubDecorator struct {

View file

@ -274,7 +274,7 @@ func (mod *Module) KernelHeadersDecorator() bool {
return false
}
func (m *Module) HasLlndkStubs() bool {
func (m *Module) NeedsLlndkVariants() bool {
return false
}