summaryrefslogtreecommitdiff
path: root/rust/project_json.go
diff options
context:
space:
mode:
authorThiƩbaud Weksteen <tweek@google.com>2020-08-05 14:27:32 +0200
committerThiƩbaud Weksteen <tweek@google.com>2020-08-06 15:17:42 +0200
commit2f628baeaeb5e4c353df53040cc161b398a2ce1d (patch)
tree2dbbbcff984bb4d63fa689f648fae750dc2f2aec /rust/project_json.go
parentc8105108980fce1c0bf56c30630b84205aa57746 (diff)
rust: handle modules with same crate_name
crate_name do not need to be unique. A library may depend on two different versions of the same crate. Use the module name instead of the crate name when indexing the modules for rust-project.json. Test: SOONG_GEN_RUST_PROJECT=1 m nothing Bug: 162896400 Change-Id: I8af9115b106fda2bed5b9fe96059cc29a33ac247
Diffstat (limited to 'rust/project_json.go')
-rw-r--r--rust/project_json.go13
1 files changed, 7 insertions, 6 deletions
diff --git a/rust/project_json.go b/rust/project_json.go
index 41dd194ee..5c3d785d6 100644
--- a/rust/project_json.go
+++ b/rust/project_json.go
@@ -77,15 +77,15 @@ func mergeDependencies(ctx android.SingletonContext, project *rustProjectJson,
//TODO(tweek): The stdlib dependencies do not appear here. We need to manually add them.
ctx.VisitDirectDeps(module, func(child android.Module) {
- childId, childName, ok := appendLibraryAndDeps(ctx, project, knownCrates, child)
+ childId, childCrateName, ok := appendLibraryAndDeps(ctx, project, knownCrates, child)
if !ok {
return
}
- if _, ok = deps[childName]; ok {
+ if _, ok = deps[ctx.ModuleName(child)]; ok {
return
}
- crate.Deps = append(crate.Deps, rustProjectDep{Crate: childId, Name: childName})
- deps[childName] = childId
+ crate.Deps = append(crate.Deps, rustProjectDep{Crate: childId, Name: childCrateName})
+ deps[ctx.ModuleName(child)] = childId
})
}
@@ -106,8 +106,9 @@ func appendLibraryAndDeps(ctx android.SingletonContext, project *rustProjectJson
if !ok {
return 0, "", false
}
+ moduleName := ctx.ModuleName(module)
crateName := rModule.CrateName()
- if cInfo, ok := knownCrates[crateName]; ok {
+ if cInfo, ok := knownCrates[moduleName]; ok {
// We have seen this crate already; merge any new dependencies.
crate := project.Crates[cInfo.ID]
mergeDependencies(ctx, project, knownCrates, module, &crate, cInfo.Deps)
@@ -123,7 +124,7 @@ func appendLibraryAndDeps(ctx android.SingletonContext, project *rustProjectJson
mergeDependencies(ctx, project, knownCrates, module, &crate, deps)
id := len(project.Crates)
- knownCrates[crateName] = crateInfo{ID: id, Deps: deps}
+ knownCrates[moduleName] = crateInfo{ID: id, Deps: deps}
project.Crates = append(project.Crates, crate)
// rust-analyzer requires that all crates belong to at least one root:
// https://github.com/rust-analyzer/rust-analyzer/issues/4735.