diff --git a/rust/rust.go b/rust/rust.go index e1af77692..0b733cc35 100644 --- a/rust/rust.go +++ b/rust/rust.go @@ -896,14 +896,17 @@ func (mod *Module) depsToPaths(ctx android.ModuleContext) PathDeps { exportDep := false switch { case cc.IsStaticDepTag(depTag): - // Link cc static libraries using "-lstatic" so rustc can reason about how to handle these - // (for example, bundling them into rlibs). - // - // rustc does not support linking libraries with the "-l" flag unless they are prefixed by "lib". - // If we need to link a library that isn't prefixed by "lib", we'll just link to it directly through - // linkObjects; such a library may need to be redeclared by static dependents. - if libName, ok := libNameFromFilePath(linkObject.Path()); ok { - depPaths.depFlags = append(depPaths.depFlags, "-lstatic="+libName) + // Only pass -lstatic for rlibs as it results in dylib bloat. + if lib, ok := ctx.Module().(*Module).compiler.(libraryInterface); ok && lib.rlib() { + // Link cc static libraries using "-lstatic" so rustc can reason about how to handle these + // (for example, bundling them into rlibs). + // + // rustc does not support linking libraries with the "-l" flag unless they are prefixed by "lib". + // If we need to link a library that isn't prefixed by "lib", we'll just link to it directly through + // linkObjects; such a library may need to be redeclared by static dependents. + if libName, ok := libNameFromFilePath(linkObject.Path()); ok { + depPaths.depFlags = append(depPaths.depFlags, "-lstatic="+libName) + } } // Add this to linkObjects to pass the library directly to the linker as well. This propagates diff --git a/rust/rust_test.go b/rust/rust_test.go index a32c6a7f8..88d964300 100644 --- a/rust/rust_test.go +++ b/rust/rust_test.go @@ -213,6 +213,7 @@ func TestDepsTracking(t *testing.T) { name: "librlib", srcs: ["foo.rs"], crate_name: "rlib", + static_libs: ["libstatic"], } rust_proc_macro { name: "libpm", @@ -230,7 +231,7 @@ func TestDepsTracking(t *testing.T) { } `) module := ctx.ModuleForTests("fizz-buzz", "linux_glibc_x86_64").Module().(*Module) - rustc := ctx.ModuleForTests("fizz-buzz", "linux_glibc_x86_64").Rule("rustc") + rustc := ctx.ModuleForTests("librlib", "linux_glibc_x86_64_rlib_rlib-std").Rule("rustc") // Since dependencies are added to AndroidMk* properties, we can check these to see if they've been picked up. if !android.InList("libdylib", module.Properties.AndroidMkDylibs) {