diff --git a/rust/compiler.go b/rust/compiler.go index d9e21ff3a..7bd9af4a8 100644 --- a/rust/compiler.go +++ b/rust/compiler.go @@ -397,8 +397,15 @@ func (compiler *baseCompiler) installDir(ctx ModuleContext) android.InstallPath } if compiler.location == InstallInData && ctx.RustModule().UseVndk() { - dir = filepath.Join(dir, "vendor") + if ctx.RustModule().InProduct() { + dir = filepath.Join(dir, "product") + } else if ctx.RustModule().InVendor() { + dir = filepath.Join(dir, "vendor") + } else { + ctx.ModuleErrorf("Unknown data+VNDK installation kind") + } } + return android.PathForModuleInstall(ctx, dir, compiler.subDir, compiler.relativeInstallPath(), compiler.relative) } diff --git a/rust/image.go b/rust/image.go index 5d7c02733..5d57f1522 100644 --- a/rust/image.go +++ b/rust/image.go @@ -136,7 +136,13 @@ func (c *Module) VendorVariantToOdm() bool { } func (ctx *moduleContext) ProductSpecific() bool { - return false + return ctx.ModuleContext.ProductSpecific() || ctx.RustModule().productSpecificModuleContext() +} + +func (c *Module) productSpecificModuleContext() bool { + // Additionally check if this module is inProduct() that means it is a "product" variant of a + // module. As well as product specific modules, product variants must be installed to /product. + return c.InProduct() } func (mod *Module) InRecovery() bool { diff --git a/rust/rust.go b/rust/rust.go index ba395ec6e..0cd299dc1 100644 --- a/rust/rust.go +++ b/rust/rust.go @@ -1233,6 +1233,18 @@ func (mod *Module) InstallInData() bool { return mod.compiler.inData() } +func (mod *Module) InstallInRamdisk() bool { + return mod.InRamdisk() +} + +func (mod *Module) InstallInVendorRamdisk() bool { + return mod.InVendorRamdisk() +} + +func (mod *Module) InstallInRecovery() bool { + return mod.InRecovery() +} + func linkPathFromFilePath(filepath android.Path) string { return strings.Split(filepath.String(), filepath.Base())[0] }