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
diff --git a/rust/rust.go b/rust/rust.go
index 6c60348..df323e3 100644
--- a/rust/rust.go
+++ b/rust/rust.go
@@ -217,6 +217,7 @@
type Deps struct {
Dylibs []string
Rlibs []string
+ Rustlibs []string
ProcMacros []string
SharedLibs []string
StaticLibs []string
@@ -617,6 +618,7 @@
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 @@
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 @@
{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...)