From 2a454124458d5cc2488676692713667d455c0cd7 Mon Sep 17 00:00:00 2001 From: Jiyong Park Date: Thu, 19 Oct 2017 15:59:33 +0900 Subject: [PATCH] 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-.mk Change-Id: If1650414b2967f2042f4ebe2b593ed3f3ea45d3a --- cc/cc.go | 3 +++ cc/llndk_library.go | 38 +++++++++++++++++++++++++++++++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/cc/cc.go b/cc/cc.go index b423ca6e9..cdbe43e5a 100644 --- a/cc/cc.go +++ b/cc/cc.go @@ -1402,6 +1402,9 @@ func vendorMutator(mctx android.BottomUpMutatorContext) { // 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 30c4d4ca6..de0caa5aa 100644 --- a/cc/llndk_library.go +++ b/cc/llndk_library.go @@ -23,6 +23,7 @@ import ( var ( llndkLibrarySuffix = ".llndk" + llndkHeadersSuffix = ".llndk" ) // Creates a stub shared library based on the provided version file. @@ -55,6 +56,9 @@ type llndkLibraryProperties struct { // 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) compile(ctx ModuleContext, flags Flags, deps Pat } 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 @@ func llndkLibraryFactory() android.Module { 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) }