diff options
| author | 2020-08-05 18:50:06 +0000 | |
|---|---|---|
| committer | 2020-08-05 18:50:06 +0000 | |
| commit | 6090575f636b27c19aafef0ff1adbde5c274550b (patch) | |
| tree | eee77e994fcbcaf9fcb1c7f4b359238a3ac07f03 /rust/project_json.go | |
| parent | 6ed589039ca891309b9d764b6cd7f92ad4defc61 (diff) | |
| parent | ad8ac5358182e72bb4ede89e9a98e2b23b03523b (diff) | |
Merge changes I275f0463,Ie736d7eb
* changes:
rust: handle modules with same crate_name
rust: validate existence of library source
Diffstat (limited to 'rust/project_json.go')
| -rw-r--r-- | rust/project_json.go | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/rust/project_json.go b/rust/project_json.go index 41dd194ee..831047938 100644 --- a/rust/project_json.go +++ b/rust/project_json.go @@ -75,17 +75,16 @@ func mergeDependencies(ctx android.SingletonContext, project *rustProjectJson, knownCrates map[string]crateInfo, module android.Module, crate *rustProjectCrate, deps map[string]int) { - //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 +105,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) @@ -115,15 +115,18 @@ func appendLibraryAndDeps(ctx android.SingletonContext, project *rustProjectJson return cInfo.ID, crateName, true } crate := rustProjectCrate{Deps: make([]rustProjectDep, 0), Cfgs: make([]string, 0)} - src := rustLib.baseCompiler.Properties.Srcs[0] - crate.RootModule = path.Join(ctx.ModuleDir(rModule), src) + srcs := rustLib.baseCompiler.Properties.Srcs + if len(srcs) == 0 { + return 0, "", false + } + crate.RootModule = path.Join(ctx.ModuleDir(rModule), srcs[0]) crate.Edition = rustLib.baseCompiler.edition() deps := make(map[string]int) 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. |