Allow cc.LinkabeInterfaces to request "" variants.
cc.LinkableInterfaces should be able to request if an empty variant is required from the LinkageMutator. We were previously assuming that if only static or shared libraries were being built, then we didn't need the empty variant. However this should be explicit to handle cases where the default set of variants being created may not include both static and shared libraries. Bug: 144861059 Test: m -j crosvm.experimental Change-Id: I66724bdc16ff350b06dfa4d049c82f33019979a5
This commit is contained in:
parent
c6e9f92cfa
commit
2b26297dc7
4
cc/cc.go
4
cc/cc.go
|
@ -562,6 +562,10 @@ func (c *Module) CcLibraryInterface() bool {
|
|||
return false
|
||||
}
|
||||
|
||||
func (c *Module) NonCcVariants() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (c *Module) SetBuildStubs() {
|
||||
if c.linker != nil {
|
||||
if library, ok := c.linker.(*libraryDecorator); ok {
|
||||
|
|
|
@ -1262,14 +1262,16 @@ func LinkageMutator(mctx android.BottomUpMutatorContext) {
|
|||
shared.linker.(prebuiltLibraryInterface).disablePrebuilt()
|
||||
}
|
||||
} else if library, ok := mctx.Module().(LinkableInterface); ok && library.CcLibraryInterface() {
|
||||
if library.BuildStaticVariant() && library.BuildSharedVariant() {
|
||||
variations := []string{"static", "shared"}
|
||||
|
||||
// Non-cc.Modules need an empty variant for their mutators.
|
||||
if _, ok := mctx.Module().(*Module); !ok {
|
||||
// Non-cc.Modules may need an empty variant for their mutators.
|
||||
variations := []string{}
|
||||
if library.NonCcVariants() {
|
||||
variations = append(variations, "")
|
||||
}
|
||||
|
||||
if library.BuildStaticVariant() && library.BuildSharedVariant() {
|
||||
variations := append([]string{"static", "shared"}, variations...)
|
||||
|
||||
modules := mctx.CreateLocalVariations(variations...)
|
||||
static := modules[0].(LinkableInterface)
|
||||
shared := modules[1].(LinkableInterface)
|
||||
|
@ -1281,16 +1283,18 @@ func LinkageMutator(mctx android.BottomUpMutatorContext) {
|
|||
reuseStaticLibrary(mctx, static.(*Module), shared.(*Module))
|
||||
}
|
||||
} else if library.BuildStaticVariant() {
|
||||
modules := mctx.CreateLocalVariations("static")
|
||||
variations := append([]string{"static"}, variations...)
|
||||
|
||||
modules := mctx.CreateLocalVariations(variations...)
|
||||
modules[0].(LinkableInterface).SetStatic()
|
||||
} else if library.BuildSharedVariant() {
|
||||
modules := mctx.CreateLocalVariations("shared")
|
||||
modules[0].(LinkableInterface).SetShared()
|
||||
} else if _, ok := mctx.Module().(*Module); !ok {
|
||||
// Non-cc.Modules need an empty variant for their mutators.
|
||||
mctx.CreateLocalVariations("")
|
||||
}
|
||||
variations := append([]string{"shared"}, variations...)
|
||||
|
||||
modules := mctx.CreateLocalVariations(variations...)
|
||||
modules[0].(LinkableInterface).SetShared()
|
||||
} else if len(variations) > 0 {
|
||||
mctx.CreateLocalVariations(variations...)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -20,6 +20,8 @@ type LinkableInterface interface {
|
|||
HasStaticVariant() bool
|
||||
GetStaticVariant() LinkableInterface
|
||||
|
||||
NonCcVariants() bool
|
||||
|
||||
StubsVersions() []string
|
||||
BuildStubs() bool
|
||||
SetBuildStubs()
|
||||
|
|
13
rust/rust.go
13
rust/rust.go
|
@ -89,6 +89,19 @@ func (mod *Module) SelectedStl() string {
|
|||
return ""
|
||||
}
|
||||
|
||||
func (mod *Module) NonCcVariants() bool {
|
||||
if mod.compiler != nil {
|
||||
if library, ok := mod.compiler.(libraryInterface); ok {
|
||||
if library.buildRlib() || library.buildDylib() {
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
panic(fmt.Errorf("NonCcVariants called on non-library module: %q", mod.BaseModuleName()))
|
||||
}
|
||||
|
||||
func (mod *Module) ApiLevel() string {
|
||||
panic(fmt.Errorf("Called ApiLevel on Rust module %q; stubs libraries are not yet supported.", mod.BaseModuleName()))
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue