func aliasMutator(mctx blueprint.BottomUpMutatorContext) {
	if a, ok := mctx.Module().(*alias); ok {
		parseAndAddVariationDeps(mctx, aliasTag, a.Properties.Srcs...)
	}
	if a, ok := mctx.Module().(aliasable); ok {
		for _, s := range a.getAliasList() {
			mctx.AddReverseDependency(mctx.Module(), aliasTag, s)
		}
	}
}
Setup dependencies between aliases and their targets
package core
import (
	"github.com/google/blueprint"
)
var aliasTag = dependencyTag{name: "alias"}
type aliasable interface {
	getAliasList() []string
}
type AliasableProps struct {
	Add_to_alias []string
}
func (p *AliasableProps) getAliasList() []string {
	return p.Add_to_alias
}
type AliasProps struct {
	Srcs []string
	AliasableProps
}
type alias struct {
	moduleBase
	Properties struct {
		AliasProps
		Features
	}
}
func (m *alias) features() *Features {
	return &m.Properties.Features
}
func (m *alias) featurableProperties() []interface{} {
	return []interface{}{&m.Properties.AliasProps}
}
func (m *alias) getAliasList() []string {
	return m.Properties.getAliasList()
}
func (m *alias) GenerateBuildActions(ctx blueprint.ModuleContext) {
	getBackend(ctx).aliasActions(m, ctx)
}
func aliasFactory(config *bobConfig) (blueprint.Module, []interface{}) {
	module := &alias{}
	module.Properties.Features.Init(&config.Properties, AliasProps{})
	return module, []interface{}{&module.Properties, &module.SimpleName.Properties}
}