Skip to content

Enable Link-Time Optimization (LTO) and codegen-units = 1 for Release builds #790

@zamazan4ik

Description

@zamazan4ik

Hi!

I noticed that in the Cargo.toml file Link-Time Optimization (LTO) for the project is not enabled. I suggest switching it on since it will reduce the binary size (always a good thing to have) and will likely improve CPU performance a bit due to more aggressive compiler optimizations. Additionally, codegen-units = 1 (CU1) option can help too in a similar to LTO way, so I recommend to enable it as well.

I recommend enabling LTO only for Release builds so developers experience won't be affected by the increased build time. Actually, I can propose to use flags directly from this ripgrep profile (like stripping and other things).

Basically, it can be enabled with the following lines to the root Cargo.toml file:

[profile.release]
codegen-units = 1
lto = true # FatLTO - the most aggressive LTO version
<possible other options like strip = true>

I have made quick tests (Macbook M1 Pro, macOS Tahoe 24.1, Rust 1.95, cargo build -r build command, without stripping) - here are the results for the rhwp CLI:

  • Current Release profile: 10.7 Mib, clean build time: 58s
  • Release + FatLTO + CU1: 8.2 Mib, clean build time: 2m 26s

Build time increase shouldn't be a problem since we enable it only for the Release profile - in this case, we would not affect the development lifecycle. If the proposed settings are added to the Cargo.toml file, all binaries (including GitHub Actions-built and released binaries) will be built with the new options automatically.

Thank you.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions