I shaved off 10 MiB from my binary in 2 hours!
I made a program using Macroquad, then I built it in release mode, the binary was 63 MiB in size.
So I used cargo vendor
to have a better look at Macroquad and one of its dependencies, glam.
I then started to delete code, like, lots and lots of code(about 30_000 lines of code); none of it affected my main project, some of it became ‘dead_code’ just by removing the pub
keyword.
The result is that my project was unaffected and the binary went down to 52 MiB.
Is there a way to automate removal of unneeded elements from dependencies? This is potentially huge.
Actually, dead code eliminination should do the trick, if you’re compiling a binary at least (same for a library I think, but there could be re-exports there). Did you compile in release mode?
To expand: Just configure whatever profile you’re using (
dev
,release
, …) to have link time optimization (lto) enabled:Reference
This really doesn’t seem to do the trick, the binary’s still at 63MiB.
Also
"fat"
andtrue
are identical.Edit: I’m not sure I replied to the right person, ignore this.
The compiler doesn’t consider it to be dead code since it’s marked
pub
.Sure, but isn’t this in a dependency? Can’t be reached when only importing your crate anyways? And if you’re building a binary, I don’t think this could really considered exported, is what I mean :)
Yes that’s exactly what I want. The compiler should stop considering it accessible.
I don’t recall what the default behavior is with the linker, but it might also benefit from at least thin LTO.