Make installable arch-variant and static vs shared variant for cc modules

libc's native_bridge shared variant needs to be installable: false,
make the installable property arch-variant and allow the static and
shared clauses to override it.

This relands I8e0eaed2169e89520b07bb0326bb97ac0b4a70ac with fixes to
allow only the shared variant to be marked installable: false.

Bug: 204136549
Test: m checkbuild
Change-Id: Ie579b5ba56ca21f4d9243088afd5078d8c122a68
This commit is contained in:
Colin Cross
2021-10-28 13:25:54 -07:00
parent 215ed178dd
commit 1bc9412fb3
3 changed files with 21 additions and 3 deletions

View File

@@ -325,7 +325,7 @@ type BaseProperties struct {
SnapshotStaticLibs []string `blueprint:"mutated"` SnapshotStaticLibs []string `blueprint:"mutated"`
SnapshotRuntimeLibs []string `blueprint:"mutated"` SnapshotRuntimeLibs []string `blueprint:"mutated"`
Installable *bool Installable *bool `android:"arch_variant"`
// Set by factories of module types that can only be referenced from variants compiled against // Set by factories of module types that can only be referenced from variants compiled against
// the SDK. // the SDK.
@@ -1865,7 +1865,7 @@ func (c *Module) maybeUnhideFromMake() {
} }
func (c *Module) maybeInstall(ctx ModuleContext, apexInfo android.ApexInfo) { func (c *Module) maybeInstall(ctx ModuleContext, apexInfo android.ApexInfo) {
if !proptools.BoolDefault(c.Properties.Installable, true) { if !proptools.BoolDefault(c.Installable(), true) {
// If the module has been specifically configure to not be installed then // If the module has been specifically configure to not be installed then
// hide from make as otherwise it will break when running inside make // hide from make as otherwise it will break when running inside make
// as the output path to install will not be specified. Not all uninstallable // as the output path to install will not be specified. Not all uninstallable
@@ -3260,6 +3260,11 @@ func (c *Module) PreventInstall() bool {
} }
func (c *Module) Installable() *bool { func (c *Module) Installable() *bool {
if c.library != nil {
if i := c.library.installable(); i != nil {
return i
}
}
return c.Properties.Installable return c.Properties.Installable
} }

View File

@@ -123,7 +123,7 @@ func IsValidSharedDependency(dependency android.Module) bool {
} }
// Discard installable:false libraries because they are expected to be absent // Discard installable:false libraries because they are expected to be absent
// in runtime. // in runtime.
if !proptools.BoolDefault(ccLibrary.Properties.Installable, true) { if !proptools.BoolDefault(ccLibrary.Installable(), true) {
return false return false
} }
} }

View File

@@ -159,6 +159,8 @@ type StaticOrSharedProperties struct {
Export_static_lib_headers []string `android:"arch_variant"` Export_static_lib_headers []string `android:"arch_variant"`
Apex_available []string `android:"arch_variant"` Apex_available []string `android:"arch_variant"`
Installable *bool `android:"arch_variant"`
} }
type LibraryMutatedProperties struct { type LibraryMutatedProperties struct {
@@ -1046,6 +1048,8 @@ type libraryInterface interface {
availableFor(string) bool availableFor(string) bool
getAPIListCoverageXMLPath() android.ModuleOutPath getAPIListCoverageXMLPath() android.ModuleOutPath
installable() *bool
} }
type versionedInterface interface { type versionedInterface interface {
@@ -1971,6 +1975,15 @@ func (library *libraryDecorator) availableFor(what string) bool {
return android.CheckAvailableForApex(what, list) return android.CheckAvailableForApex(what, list)
} }
func (library *libraryDecorator) installable() *bool {
if library.static() {
return library.StaticProperties.Static.Installable
} else if library.shared() {
return library.SharedProperties.Shared.Installable
}
return nil
}
func (library *libraryDecorator) makeUninstallable(mod *Module) { func (library *libraryDecorator) makeUninstallable(mod *Module) {
if library.static() && library.buildStatic() && !library.buildStubs() { if library.static() && library.buildStatic() && !library.buildStubs() {
// If we're asked to make a static library uninstallable we don't do // If we're asked to make a static library uninstallable we don't do