LLNDK can re-export headers
Added export_llndk_headers properties to llndk_library module. And a new
module type llndk_headers is added. This is to enable an LLNDK library
to reexport other LLNDK headers.
Bug: 65395259
Test: do the following
// frameworks/native/libs/arect/Android.bp
llndk_headers {
name: "libarect_vendor_headers",
export_include_dirs: ["include"],
}
// frameworks/native/libs/nativewindow/Android.bp
llndk_library {
name: "libnativewindow",
....
export_llndk_headers: ["libarect_vendor_headers"],
}
check that
-Iframeworks/native/libs/arect/include is in LOCAL_EXPORT_CFLAGS of
libnativewindow.vendor in out/soong/Android-<product>.mk
Change-Id: If1650414b2967f2042f4ebe2b593ed3f3ea45d3a
diff --git a/cc/cc.go b/cc/cc.go
index b423ca6..cdbe43e 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -1402,6 +1402,9 @@
// LL-NDK stubs only exist in the vendor variant, since the
// real libraries will be used in the core variant.
mctx.CreateVariations(vendorMode)
+ } else if _, ok := m.linker.(*llndkHeadersDecorator); ok {
+ // ... and LL-NDK headers as well
+ mctx.CreateVariations(vendorMode)
} else if m.hasVendorVariant() {
// This will be available in both /system and /vendor
// or a /system directory that is available to vendor.
diff --git a/cc/llndk_library.go b/cc/llndk_library.go
index 30c4d4c..de0caa5 100644
--- a/cc/llndk_library.go
+++ b/cc/llndk_library.go
@@ -23,6 +23,7 @@
var (
llndkLibrarySuffix = ".llndk"
+ llndkHeadersSuffix = ".llndk"
)
// Creates a stub shared library based on the provided version file.
@@ -55,6 +56,9 @@
// When set to false, this module can only be depended on by VNDK libraries, not vendor
// libraries. This effectively hides this module from vendors. Default value is true.
Vendor_available bool
+
+ // list of llndk headers to re-export include directories from.
+ Export_llndk_headers []string `android:"arch_variant"`
}
type llndkStubDecorator struct {
@@ -78,7 +82,10 @@
}
func (stub *llndkStubDecorator) linkerDeps(ctx DepsContext, deps Deps) Deps {
- return Deps{}
+ headers := addSuffix(stub.Properties.Export_llndk_headers, llndkHeadersSuffix)
+ deps.HeaderLibs = append(deps.HeaderLibs, headers...)
+ deps.ReexportHeaderLibHeaders = append(deps.ReexportHeaderLibHeaders, headers...)
+ return deps
}
func (stub *llndkStubDecorator) Name(name string) string {
@@ -173,6 +180,35 @@
return module
}
+type llndkHeadersDecorator struct {
+ *libraryDecorator
+}
+
+func (headers *llndkHeadersDecorator) Name(name string) string {
+ return name + llndkHeadersSuffix
+}
+
+func llndkHeadersFactory() android.Module {
+ module, library := NewLibrary(android.DeviceSupported)
+ library.HeaderOnly()
+ library.setStatic()
+
+ decorator := &llndkHeadersDecorator{
+ libraryDecorator: library,
+ }
+
+ module.compiler = nil
+ module.linker = decorator
+ module.installer = nil
+
+ module.AddProperties(&library.MutatedProperties, &library.flagExporter.Properties)
+
+ android.InitAndroidArchModule(module, android.DeviceSupported, android.MultilibBoth)
+
+ return module
+}
+
func init() {
android.RegisterModuleType("llndk_library", llndkLibraryFactory)
+ android.RegisterModuleType("llndk_headers", llndkHeadersFactory)
}