From 52d25bd81206bb5a5d11502c9337aca3314603a9 Mon Sep 17 00:00:00 2001 From: Jiyong Park Date: Fri, 13 Oct 2017 09:17:01 +0900 Subject: [PATCH] Add two more vendor-specific properties target.vendor.exclude_static_libs: this is the static counterpart of target.vendor.exclude_shared_libs. This removes the libs from the static dependency when build the vendor variant. target.vendor.version_script: vendor-specific version script. Right now, these are required to merge libseliux_vendor into libselinux and make it vendor_avaialble:true. libselinux is using libpackageparser which is a platform-only library. The vendor variant of libselinux can't depend on the library. Bug: 66914194 Test: lunch aosp_arm64_ab-userdebug; m libselinux.vendor Change-Id: I163e634f2f54d419f9471a585a3b04731b63f809 --- cc/library.go | 15 ++++++++++++++- cc/linker.go | 7 +++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/cc/library.go b/cc/library.go index e963ecbaf..1434f2cca 100644 --- a/cc/library.go +++ b/cc/library.go @@ -64,6 +64,12 @@ type LibraryProperties struct { // export headers generated from .proto sources Export_proto_headers bool } + Target struct { + Vendor struct { + // version script for this vendor variant + Version_script *string `android:"arch_variant"` + } + } } type LibraryMutatedProperties struct { @@ -455,7 +461,11 @@ func (library *libraryDecorator) linkerDeps(ctx DepsContext, deps Deps) Deps { deps.StaticLibs = append(deps.StaticLibs, library.Properties.Shared.Static_libs...) deps.SharedLibs = append(deps.SharedLibs, library.Properties.Shared.Shared_libs...) } - + if ctx.useVndk() { + deps.WholeStaticLibs = removeListFromList(deps.WholeStaticLibs, library.baseLinker.Properties.Target.Vendor.Exclude_static_libs) + deps.SharedLibs = removeListFromList(deps.SharedLibs, library.baseLinker.Properties.Target.Vendor.Exclude_shared_libs) + deps.StaticLibs = removeListFromList(deps.StaticLibs, library.baseLinker.Properties.Target.Vendor.Exclude_static_libs) + } return deps } @@ -491,6 +501,9 @@ func (library *libraryDecorator) linkShared(ctx ModuleContext, unexportedSymbols := android.OptionalPathForModuleSrc(ctx, library.Properties.Unexported_symbols_list) forceNotWeakSymbols := android.OptionalPathForModuleSrc(ctx, library.Properties.Force_symbols_not_weak_list) forceWeakSymbols := android.OptionalPathForModuleSrc(ctx, library.Properties.Force_symbols_weak_list) + if ctx.useVndk() && library.Properties.Target.Vendor.Version_script != nil { + versionScript = android.OptionalPathForModuleSrc(ctx, library.Properties.Target.Vendor.Version_script) + } if !ctx.Darwin() { if versionScript.Valid() { flags.LdFlags = append(flags.LdFlags, "-Wl,--version-script,"+versionScript.String()) diff --git a/cc/linker.go b/cc/linker.go index 6ec56307e..1cf3f6137 100644 --- a/cc/linker.go +++ b/cc/linker.go @@ -89,6 +89,10 @@ type BaseLinkerProperties struct { // list of shared libs that should not be used to build // the vendor variant of the C/C++ module. Exclude_shared_libs []string + + // list of static libs that should not be used to build + // the vendor variant of the C/C++ module. + Exclude_static_libs []string } } } @@ -135,6 +139,9 @@ func (linker *baseLinker) linkerDeps(ctx BaseModuleContext, deps Deps) Deps { if ctx.useVndk() { deps.SharedLibs = removeListFromList(deps.SharedLibs, linker.Properties.Target.Vendor.Exclude_shared_libs) deps.ReexportSharedLibHeaders = removeListFromList(deps.ReexportSharedLibHeaders, linker.Properties.Target.Vendor.Exclude_shared_libs) + deps.StaticLibs = removeListFromList(deps.StaticLibs, linker.Properties.Target.Vendor.Exclude_static_libs) + deps.ReexportStaticLibHeaders = removeListFromList(deps.ReexportStaticLibHeaders, linker.Properties.Target.Vendor.Exclude_static_libs) + deps.WholeStaticLibs = removeListFromList(deps.WholeStaticLibs, linker.Properties.Target.Vendor.Exclude_static_libs) } if ctx.ModuleName() != "libcompiler_rt-extras" {