rust: Add rustlibs auto dependency selection

Adds the rustlibs dependency type which will automatically select
between rlib and dylib based on the type of the library.

Bug: 143217452
Test: cd external/rust; mma
Change-Id: I97faadae98bf957090a32939cfb2d3a10f74a057
This commit is contained in:
Matthew Maurer
2020-06-29 14:34:06 -07:00
parent 2ae0513a8e
commit 0f003b1851
7 changed files with 102 additions and 0 deletions

View File

@@ -217,6 +217,7 @@ func (mod *Module) StubDecorator() bool {
type Deps struct {
Dylibs []string
Rlibs []string
Rustlibs []string
ProcMacros []string
SharedLibs []string
StaticLibs []string
@@ -617,6 +618,7 @@ func (mod *Module) deps(ctx DepsContext) Deps {
deps.Rlibs = android.LastUniqueStrings(deps.Rlibs)
deps.Dylibs = android.LastUniqueStrings(deps.Dylibs)
deps.Rustlibs = android.LastUniqueStrings(deps.Rustlibs)
deps.ProcMacros = android.LastUniqueStrings(deps.ProcMacros)
deps.SharedLibs = android.LastUniqueStrings(deps.SharedLibs)
deps.StaticLibs = android.LastUniqueStrings(deps.StaticLibs)
@@ -639,6 +641,20 @@ var (
testPerSrcDepTag = dependencyTag{name: "rust_unit_tests"}
)
type autoDep struct {
variation string
depTag dependencyTag
}
var (
rlibAutoDep = autoDep{variation: "rlib", depTag: rlibDepTag}
dylibAutoDep = autoDep{variation: "dylib", depTag: dylibDepTag}
)
type autoDeppable interface {
autoDep() autoDep
}
func (mod *Module) begin(ctx BaseModuleContext) {
if mod.coverage != nil {
mod.coverage.begin(ctx)
@@ -844,6 +860,15 @@ func (mod *Module) DepsMutator(actx android.BottomUpMutatorContext) {
{Mutator: "link", Variation: ""}}...),
dylibDepTag, deps.Dylibs...)
if deps.Rustlibs != nil {
autoDep := mod.compiler.(autoDeppable).autoDep()
actx.AddVariationDependencies(
append(commonDepVariations, []blueprint.Variation{
{Mutator: "rust_libraries", Variation: autoDep.variation},
{Mutator: "link", Variation: ""}}...),
autoDep.depTag, deps.Rustlibs...)
}
actx.AddVariationDependencies(append(commonDepVariations,
blueprint.Variation{Mutator: "link", Variation: "shared"}),
cc.SharedDepTag, deps.SharedLibs...)