All these tests are run on Lemmy tag v0.6.74, using cargo build --release.

  • Normal release build: 19mb
  • After running strip 13mb
  • Setting opt-level=z (optimize binary size): 21mb
  • Optimize for size + strip: 13mb
  • Optimize for size + enable link-time optimization: 14mb
  • Optimize for size + lto + strip: 14mb
  • only lto: 15mb
  • lto + strip: 11mb
  • lto + strip + reduce codegen-units: 11mb

Check this document for a detailed explanation of these options

Based on these numbers and the difference in compile time between options (which I didnt record), lto + strip looks like the best option to me.

This is also useful: https://github.com/johnthagen/min-sized-rust

  • nutomicOPMA
    link
    fedilink
    arrow-up
    2
    ·
    4 years ago

    LTO should improve performance, as it allows for more optimizations, and dead code gets removed. Strip doesnt affect the behaviour at all. Only disadvantage is a longer compile time with LTO, but I think thats fine for releases.