|
@@ -9,3 +9,27 @@ codegen-units = 1
|
|
|
lto = true
|
|
|
incremental = false
|
|
|
opt-level = "s"
|
|
|
+
|
|
|
+# See https://github.com/rust-lang/cargo/issues/10118#issuecomment-1006000210
|
|
|
+# And https://github.com/rust-lang/rust/issues/96486
|
|
|
+[profile.release.package.compiler_builtins]
|
|
|
+# The compiler-builtins crate cannot reference libcore, and it's own CI will
|
|
|
+# verify that this is the case. This requires, however, that the crate is built
|
|
|
+# without overflow checks and debug assertions. Forcefully disable debug
|
|
|
+# assertions and overflow checks here which should ensure that even if these
|
|
|
+# assertions are enabled for libstd we won't enable then for compiler_builtins
|
|
|
+# which should ensure we still link everything correctly.
|
|
|
+debug-assertions = false
|
|
|
+overflow-checks = false
|
|
|
+
|
|
|
+# For compiler-builtins we always use a high number of codegen units.
|
|
|
+# The goal here is to place every single intrinsic into its own object
|
|
|
+# file to avoid symbol clashes with the system libgcc if possible. Note
|
|
|
+# that this number doesn't actually produce this many object files, we
|
|
|
+# just don't create more than this number of object files.
|
|
|
+#
|
|
|
+# It's a bit of a bummer that we have to pass this here, unfortunately.
|
|
|
+# Ideally this would be specified through an env var to Cargo so Cargo
|
|
|
+# knows how many CGUs are for this specific crate, but for now
|
|
|
+# per-crate configuration isn't specifiable in the environment.
|
|
|
+codegen-units = 10000
|