From f563d25578557801a8cdacafce17534f8eb3ad90 Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Fri, 13 Oct 2017 00:29:00 -0700 Subject: [PATCH] Add support for packaging static libs in the NDK. Adding `static_ndk_lib: true` to a module installs the static library to the NDK sysroot. Test: Set property for libc.a, make ndk Test: Set property for libc.a, scripts/build-ndk-prebuilts.sh Bug: https://github.com/android-ndk/ndk/issues/272 Change-Id: Ib368a25705f2adb7129dac207c1b727d4ccc1eb2 --- cc/library.go | 19 +++++++++++++++++++ cc/ndk_sysroot.go | 6 ++++++ 2 files changed, 25 insertions(+) diff --git a/cc/library.go b/cc/library.go index 1434f2cca..25872c6cb 100644 --- a/cc/library.go +++ b/cc/library.go @@ -70,6 +70,8 @@ type LibraryProperties struct { Version_script *string `android:"arch_variant"` } } + + Static_ndk_lib bool } type LibraryMutatedProperties struct { @@ -83,6 +85,9 @@ type LibraryMutatedProperties struct { VariantIsShared bool `blueprint:"mutated"` // This variant is static VariantIsStatic bool `blueprint:"mutated"` + // Location of the static library in the sysroot. Empty if the library is + // not included in the NDK. + NdkSysrootPath string `blueprint:"mutated"` } type FlagExporterProperties struct { @@ -721,6 +726,20 @@ func (library *libraryDecorator) install(ctx ModuleContext, file android.Path) { } library.baseInstaller.install(ctx, file) } + + if library.Properties.Static_ndk_lib && library.static() { + installPath := getNdkSysrootBase(ctx).Join( + ctx, "usr/lib", ctx.toolchain().ClangTriple(), file.Base()) + + ctx.ModuleBuild(pctx, android.ModuleBuildParams{ + Rule: android.Cp, + Description: "install " + installPath.Base(), + Output: installPath, + Input: file, + }) + + library.MutatedProperties.NdkSysrootPath = installPath.String() + } } func (library *libraryDecorator) static() bool { diff --git a/cc/ndk_sysroot.go b/cc/ndk_sysroot.go index 5b4cfbe81..e21396588 100644 --- a/cc/ndk_sysroot.go +++ b/cc/ndk_sysroot.go @@ -108,6 +108,12 @@ func (n *ndkSingleton) GenerateBuildActions(ctx blueprint.SingletonContext) { if installer, ok := m.installer.(*stubDecorator); ok { installPaths = append(installPaths, installer.installPath) } + + if library, ok := m.linker.(*libraryDecorator); ok { + if library.MutatedProperties.NdkSysrootPath != "" { + installPaths = append(installPaths, library.MutatedProperties.NdkSysrootPath) + } + } } })