Enable lto=fat (#20863)

Co-authored-by: Brent Westbrook <36778786+ntBre@users.noreply.github.com>
This commit is contained in:
Micha Reiser 2025-10-15 08:59:59 +02:00 committed by GitHub
parent 9e1aafd0ce
commit a93618ed23
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 24 additions and 7 deletions

View File

@ -268,12 +268,8 @@ large_stack_arrays = "allow"
[profile.release] [profile.release]
# Note that we set these explicitly, and these values strip = true
# were chosen based on a trade-off between compile times lto = "fat"
# and runtime performance[1].
#
# [1]: https://github.com/astral-sh/ruff/pull/9031
lto = "thin"
codegen-units = 16 codegen-units = 16
# Some crates don't change as much but benefit more from # Some crates don't change as much but benefit more from
@ -283,6 +279,8 @@ codegen-units = 16
codegen-units = 1 codegen-units = 1
[profile.release.package.ruff_python_ast] [profile.release.package.ruff_python_ast]
codegen-units = 1 codegen-units = 1
[profile.release.package.salsa]
codegen-units = 1
[profile.dev.package.insta] [profile.dev.package.insta]
opt-level = 3 opt-level = 3
@ -298,11 +296,30 @@ opt-level = 3
[profile.dev.package.ruff_python_parser] [profile.dev.package.ruff_python_parser]
opt-level = 1 opt-level = 1
# This profile is meant to mimic the `release` profile as closely as
# possible, but using settings that are more beneficial for iterative
# development. That is, the `release` profile is intended for actually
# building the release, where as `profiling` is meant for building ty/ruff
# for running benchmarks.
#
# The main differences here are to avoid stripping debug information
# and disabling fat lto. This does result in a mismatch between our release
# configuration and our benchmarking configuration, which is unfortunate.
# But compile times with `lto = fat` are completely untenable.
#
# This setup does risk that we are measuring something in benchmarks
# that we aren't shipping, but in order to make those two the same, we'd
# either need to make compile times way worse for development, or take
# a hit to binary size and a slight hit to runtime performance in our
# release builds.
#
# Use the `--profile profiling` flag to show symbols in release mode. # Use the `--profile profiling` flag to show symbols in release mode.
# e.g. `cargo build --profile profiling` # e.g. `cargo build --profile profiling`
[profile.profiling] [profile.profiling]
inherits = "release" inherits = "release"
debug = 1 strip = false
debug = "full"
lto = false
# The profile that 'cargo dist' will build with. # The profile that 'cargo dist' will build with.
[profile.dist] [profile.dist]