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
diff --git a/cc/cc.go b/cc/cc.go
index 260fcf1..4d8f4e1 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -1135,9 +1135,9 @@
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
diff --git a/cc/image.go b/cc/image.go
index c1e5dfe..6265b13 100644
--- a/cc/image.go
+++ b/cc/image.go
@@ -437,13 +437,13 @@
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 != "" {
diff --git a/cc/library.go b/cc/library.go
index af92b24..8f2127e 100644
--- a/cc/library.go
+++ b/cc/library.go
@@ -869,6 +869,7 @@
implementationModuleName(name string) string
hasLLNDKStubs() bool
+ hasLLNDKHeaders() bool
}
var _ libraryInterface = (*libraryDecorator)(nil)
@@ -1683,6 +1684,12 @@
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
}
diff --git a/cc/linkable.go b/cc/linkable.go
index 2fa12f6..8fe0b4a 100644
--- a/cc/linkable.go
+++ b/cc/linkable.go
@@ -112,8 +112,8 @@
// 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
diff --git a/cc/llndk_library.go b/cc/llndk_library.go
index d05dbce..ad19e47 100644
--- a/cc/llndk_library.go
+++ b/cc/llndk_library.go
@@ -69,6 +69,10 @@
// 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 {