Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2b26297d authored by Ivan Lozano's avatar Ivan Lozano
Browse files

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
parent c6e9f92c
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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 {
+16 −12
Original line number Diff line number Diff line
@@ -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")
			variations := append([]string{"shared"}, variations...)

			modules := mctx.CreateLocalVariations(variations...)
			modules[0].(LinkableInterface).SetShared()
		} else if _, ok := mctx.Module().(*Module); !ok {
			// Non-cc.Modules need an empty variant for their mutators.
			mctx.CreateLocalVariations("")
		} else if len(variations) > 0 {
			mctx.CreateLocalVariations(variations...)
		}

	}
}

+2 −0
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@ type LinkableInterface interface {
	HasStaticVariant() bool
	GetStaticVariant() LinkableInterface

	NonCcVariants() bool

	StubsVersions() []string
	BuildStubs() bool
	SetBuildStubs()
+13 −0
Original line number Diff line number Diff line
@@ -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()))
}