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/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)
 }