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
diff --git a/cc/cc.go b/cc/cc.go
index 06617ad..487a62b 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -562,6 +562,10 @@
return false
}
+func (c *Module) NonCcVariants() bool {
+ return false
+}
+
func (c *Module) SetBuildStubs() {
if c.linker != nil {
if library, ok := c.linker.(*libraryDecorator); ok {
diff --git a/cc/library.go b/cc/library.go
index dde067c..b8c4b51 100644
--- a/cc/library.go
+++ b/cc/library.go
@@ -1262,13 +1262,15 @@
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 {
- variations = append(variations, "")
- }
+ // 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)
@@ -1281,16 +1283,18 @@
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...)
+ }
}
}
diff --git a/cc/linkable.go b/cc/linkable.go
index 2efefea..815d405 100644
--- a/cc/linkable.go
+++ b/cc/linkable.go
@@ -20,6 +20,8 @@
HasStaticVariant() bool
GetStaticVariant() LinkableInterface
+ NonCcVariants() bool
+
StubsVersions() []string
BuildStubs() bool
SetBuildStubs()