diff options
Diffstat (limited to 'rust/rust.go')
| -rw-r--r-- | rust/rust.go | 39 |
1 files changed, 24 insertions, 15 deletions
diff --git a/rust/rust.go b/rust/rust.go index 2a7bdcfb3..c4fd14859 100644 --- a/rust/rust.go +++ b/rust/rust.go @@ -1368,13 +1368,12 @@ func (mod *Module) DepsMutator(actx android.BottomUpMutatorContext) { } // rlibs + rlibDepVariations = append(rlibDepVariations, blueprint.Variation{Mutator: "rust_libraries", Variation: rlibVariation}) for _, lib := range deps.Rlibs { depTag := rlibDepTag lib = cc.RewriteSnapshotLib(lib, cc.GetSnapshot(mod, &snapshotInfo, actx).Rlibs) - actx.AddVariationDependencies(append(rlibDepVariations, []blueprint.Variation{ - {Mutator: "rust_libraries", Variation: rlibVariation}, - }...), depTag, lib) + actx.AddVariationDependencies(rlibDepVariations, depTag, lib) } // dylibs @@ -1386,21 +1385,25 @@ func (mod *Module) DepsMutator(actx android.BottomUpMutatorContext) { // rustlibs if deps.Rustlibs != nil && !mod.compiler.Disabled() { autoDep := mod.compiler.(autoDeppable).autoDep(ctx) - if autoDep.depTag == rlibDepTag { - for _, lib := range deps.Rustlibs { - depTag := autoDep.depTag - lib = cc.RewriteSnapshotLib(lib, cc.GetSnapshot(mod, &snapshotInfo, actx).Rlibs) - actx.AddVariationDependencies(append(rlibDepVariations, []blueprint.Variation{ - {Mutator: "rust_libraries", Variation: autoDep.variation}, - }...), depTag, lib) + for _, lib := range deps.Rustlibs { + if autoDep.depTag == rlibDepTag { + // Handle the rlib deptag case + addRlibDependency(actx, lib, mod, snapshotInfo, rlibDepVariations) + } else { + // autoDep.depTag is a dylib depTag. Not all rustlibs may be available as a dylib however. + // Check for the existence of the dylib deptag variant. Select it if available, + // otherwise select the rlib variant. + autoDepVariations := append(commonDepVariations, + blueprint.Variation{Mutator: "rust_libraries", Variation: autoDep.variation}) + if actx.OtherModuleDependencyVariantExists(autoDepVariations, lib) { + actx.AddVariationDependencies(autoDepVariations, autoDep.depTag, lib) + } else { + // If there's no dylib dependency available, try to add the rlib dependency instead. + addRlibDependency(actx, lib, mod, snapshotInfo, rlibDepVariations) + } } - } else { - actx.AddVariationDependencies( - append(commonDepVariations, blueprint.Variation{Mutator: "rust_libraries", Variation: autoDep.variation}), - autoDep.depTag, deps.Rustlibs...) } } - // stdlibs if deps.Stdlibs != nil { if mod.compiler.stdLinkage(ctx) == RlibLinkage { @@ -1476,6 +1479,12 @@ func (mod *Module) DepsMutator(actx android.BottomUpMutatorContext) { actx.AddFarVariationDependencies(ctx.Config().BuildOSTarget.Variations(), procMacroDepTag, deps.ProcMacros...) } +// addRlibDependency will add an rlib dependency, rewriting to the snapshot library if available. +func addRlibDependency(actx android.BottomUpMutatorContext, lib string, mod *Module, snapshotInfo *cc.SnapshotInfo, variations []blueprint.Variation) { + lib = cc.RewriteSnapshotLib(lib, cc.GetSnapshot(mod, &snapshotInfo, actx).Rlibs) + actx.AddVariationDependencies(variations, rlibDepTag, lib) +} + func BeginMutator(ctx android.BottomUpMutatorContext) { if mod, ok := ctx.Module().(*Module); ok && mod.Enabled() { mod.beginMutator(ctx) |