Skip to content

Commit 8d35d2c

Browse files
committed
Disable LTO builds in tests (and bump deps to -O2)
For some reason rustc, at some point, decided that our optimization of dependencies implies we want to also build with LTO. This causes our test builds to take substantially longer to compile, even with only a trivial change. By hard-disabling this (even keeping the optimization of the test and in-tree libraries enabled) the time required to build with only a trivial change to `functional_tests.rs` goes from 0m25.635s wall clock/1m14.220s CPU time to 0m17.841s wall clock/0m17.828s CPU time on my i7-13700K on rustc 1.63. The changes in test execution time appear to be within noise. While we're at it, we also bump dependencies to build with -O2 because their build time is now substantially reduced cost.
1 parent 22d1bab commit 8d35d2c

File tree

1 file changed

+11
-5
lines changed

1 file changed

+11
-5
lines changed

Cargo.toml

+11-5
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,20 @@ exclude = [
1616
"no-std-check",
1717
]
1818

19-
# Our tests do actual crypto and lots of work, the tradeoff for -O1 is well worth it.
20-
# Ideally we would only do this in profile.test, but profile.test only applies to
21-
# the test binary, not dependencies, which means most of the critical code still
22-
# gets compiled as -O0. See
19+
# Our tests do actual crypto and lots of work, the tradeoff for -O2 is well
20+
# worth it. Note that we only apply optimizations to dependencies, not workspace
21+
# crates themselves.
2322
# https://doc.rust-lang.org/cargo/reference/profiles.html#profile-selection
23+
[profile.dev.package."*"]
24+
opt-level = 2
25+
26+
# It appears some minimal optimizations are required to inline many std methods
27+
# and reduce the otherwise-substantial time spent in std self-checks. We do so
28+
# here but ensure we keep LTO disabled as otherwise we're re-optimizing all our
29+
# dependencies every time we make any local changes.
2430
[profile.dev]
2531
opt-level = 1
26-
panic = "abort"
32+
lto = "off"
2733

2834
[profile.release]
2935
opt-level = 3

0 commit comments

Comments
 (0)