diff options
Diffstat (limited to 'rust/rust.go')
-rw-r--r-- | rust/rust.go | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/rust/rust.go b/rust/rust.go index 8ebd39dcc..78bf7ada9 100644 --- a/rust/rust.go +++ b/rust/rust.go @@ -748,6 +748,8 @@ func (mod *Module) depsToPaths(ctx android.ModuleContext) PathDeps { directProcMacroDeps := []*Module{} directSharedLibDeps := [](cc.LinkableInterface){} directStaticLibDeps := [](cc.LinkableInterface){} + directSrcProvidersDeps := []*Module{} + directSrcDeps := [](android.SourceFileProducer){} ctx.VisitDirectDeps(func(dep android.Module) { depName := ctx.OtherModuleName(dep) @@ -781,6 +783,24 @@ func (mod *Module) depsToPaths(ctx android.ModuleContext) PathDeps { case procMacroDepTag: directProcMacroDeps = append(directProcMacroDeps, rustDep) mod.Properties.AndroidMkProcMacroLibs = append(mod.Properties.AndroidMkProcMacroLibs, depName) + case android.SourceDepTag: + // Since these deps are added in path_properties.go via AddDependencies, we need to ensure the correct + // OS/Arch variant is used. + var helper string + if ctx.Host() { + helper = "missing 'host_supported'?" + } else { + helper = "device module defined?" + } + + if dep.Target().Os != ctx.Os() { + ctx.ModuleErrorf("OS mismatch on dependency %q (%s)", dep.Name(), helper) + return + } else if dep.Target().Arch.ArchType != ctx.Arch().ArchType { + ctx.ModuleErrorf("Arch mismatch on dependency %q (%s)", dep.Name(), helper) + return + } + directSrcProvidersDeps = append(directSrcProvidersDeps, rustDep) } //Append the dependencies exportedDirs @@ -798,6 +818,14 @@ func (mod *Module) depsToPaths(ctx android.ModuleContext) PathDeps { } + if srcDep, ok := dep.(android.SourceFileProducer); ok { + switch depTag { + case android.SourceDepTag: + // These are usually genrules which don't have per-target variants. + directSrcDeps = append(directSrcDeps, srcDep) + } + } + if ccDep, ok := dep.(cc.LinkableInterface); ok { //Handle C dependencies if _, ok := ccDep.(*Module); !ok { @@ -883,11 +911,22 @@ func (mod *Module) depsToPaths(ctx android.ModuleContext) PathDeps { sharedLibDepFiles = append(sharedLibDepFiles, dep.OutputFile().Path()) } + var srcProviderDepFiles android.Paths + for _, dep := range directSrcProvidersDeps { + srcs, _ := dep.OutputFiles("") + srcProviderDepFiles = append(srcProviderDepFiles, srcs...) + } + for _, dep := range directSrcDeps { + srcs := dep.Srcs() + srcProviderDepFiles = append(srcProviderDepFiles, srcs...) + } + depPaths.RLibs = append(depPaths.RLibs, rlibDepFiles...) depPaths.DyLibs = append(depPaths.DyLibs, dylibDepFiles...) depPaths.SharedLibs = append(depPaths.SharedLibs, sharedLibDepFiles...) depPaths.StaticLibs = append(depPaths.StaticLibs, staticLibDepFiles...) depPaths.ProcMacros = append(depPaths.ProcMacros, procMacroDepFiles...) + depPaths.SrcDeps = append(depPaths.SrcDeps, srcProviderDepFiles...) // Dedup exported flags from dependencies depPaths.linkDirs = android.FirstUniqueStrings(depPaths.linkDirs) |