From fed4d19cbb22a754dc8969cc137fc0e0ee276a8e Mon Sep 17 00:00:00 2001 From: Dan Willemsen Date: Wed, 6 Jul 2016 21:48:39 -0700 Subject: [PATCH] Allow static/shared modules to be disabled per-arch libz has a case where the static and shared versions of the device library are supported, but the host shared library must not be defined, since it would conflict with the system provided version. There's a separate module 'libz-host' that provides the host shared library implementation. So extend the 'static'/'shared' properties to include 'enabled', which uses arch_variant so that it can be mutated per-arch. It cannot override a top level 'enabled: false'. Change-Id: Ia0f1ff31ad77dc4cb148c531b70158e3245031d5 --- android/module.go | 6 ++++++ cc/cc.go | 17 +++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/android/module.go b/android/module.go index 0e608d77e..46a04d06e 100644 --- a/android/module.go +++ b/android/module.go @@ -23,6 +23,7 @@ import ( "android/soong/glob" "github.com/google/blueprint" + "github.com/google/blueprint/proptools" ) var ( @@ -89,6 +90,7 @@ type Module interface { GenerateAndroidBuildActions(ModuleContext) base() *ModuleBase + Disable() Enabled() bool Target() Target InstallInData() bool @@ -292,6 +294,10 @@ func (a *ModuleBase) DeviceSupported() bool { a.hostAndDeviceProperties.Device_supported } +func (a *ModuleBase) Disable() { + a.commonProperties.Enabled = proptools.BoolPtr(false) +} + func (a *ModuleBase) Enabled() bool { if a.commonProperties.Enabled == nil { return a.Os().Class != HostCross diff --git a/cc/cc.go b/cc/cc.go index cea8cdea7..66b7b4f25 100644 --- a/cc/cc.go +++ b/cc/cc.go @@ -360,11 +360,13 @@ type FlagExporterProperties struct { type LibraryLinkerProperties struct { Static struct { + Enabled *bool `android:"arch_variant"` Whole_static_libs []string `android:"arch_variant"` Static_libs []string `android:"arch_variant"` Shared_libs []string `android:"arch_variant"` } `android:"arch_variant"` Shared struct { + Enabled *bool `android:"arch_variant"` Whole_static_libs []string `android:"arch_variant"` Static_libs []string `android:"arch_variant"` Shared_libs []string `android:"arch_variant"` @@ -1548,6 +1550,21 @@ type libraryLinker struct { var _ linker = (*libraryLinker)(nil) +func (library *libraryLinker) begin(ctx BaseModuleContext) { + library.baseLinker.begin(ctx) + if library.static() { + if library.Properties.Static.Enabled != nil && + !*library.Properties.Static.Enabled { + ctx.module().Disable() + } + } else { + if library.Properties.Shared.Enabled != nil && + !*library.Properties.Shared.Enabled { + ctx.module().Disable() + } + } +} + func (library *libraryLinker) props() []interface{} { props := library.baseLinker.props() return append(props,