From 2adf26fc72f354aabd65da176eb9f8806b0d2ef2 Mon Sep 17 00:00:00 2001 From: clubby789 Date: Mon, 23 Jan 2023 21:21:35 +0000 Subject: [PATCH] Add `rust.lto=off` to bootstrap --- config.toml.example | 3 ++- src/bootstrap/compile.rs | 10 ++++++++++ src/bootstrap/config.rs | 4 +++- src/bootstrap/defaults/config.compiler.toml | 2 ++ src/bootstrap/defaults/config.library.toml | 2 ++ 5 files changed, 19 insertions(+), 2 deletions(-) diff --git a/config.toml.example b/config.toml.example index 5e1d2f2e314ff..e0f02eac9c34b 100644 --- a/config.toml.example +++ b/config.toml.example @@ -646,7 +646,8 @@ changelog-seen = 2 # Select LTO mode that will be used for compiling rustc. By default, thin local LTO # (LTO within a single crate) is used (like for any Rust crate). You can also select -# "thin" or "fat" to apply Thin/Fat LTO to the `rustc_driver` dylib. +# "thin" or "fat" to apply Thin/Fat LTO to the `rustc_driver` dylib, or "off" to disable +# LTO entirely. #lto = "thin-local" # ============================================================================= diff --git a/src/bootstrap/compile.rs b/src/bootstrap/compile.rs index 68d1db0160a2e..07c0d2233caeb 100644 --- a/src/bootstrap/compile.rs +++ b/src/bootstrap/compile.rs @@ -379,6 +379,9 @@ pub fn std_cargo(builder: &Builder<'_>, target: TargetSelection, stage: u32, car if stage >= 1 { cargo.rustflag("-Cembed-bitcode=yes"); } + if builder.config.rust_lto == RustcLto::Off { + cargo.rustflag("-Clto=off"); + } // By default, rustc does not include unwind tables unless they are required // for a particular target. They are not required by RISC-V targets, but @@ -722,6 +725,13 @@ impl Step for Rustc { cargo.rustflag("-Cembed-bitcode=yes"); } RustcLto::ThinLocal => { /* Do nothing, this is the default */ } + RustcLto::Off => { + cargo.rustflag("-Clto=off"); + } + } + } else { + if builder.config.rust_lto == RustcLto::Off { + cargo.rustflag("-Clto=off"); } } diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs index b41d60d51a8b5..a28fe612deb7a 100644 --- a/src/bootstrap/config.rs +++ b/src/bootstrap/config.rs @@ -332,8 +332,9 @@ impl SplitDebuginfo { } /// LTO mode used for compiling rustc itself. -#[derive(Default, Clone)] +#[derive(Default, Clone, PartialEq)] pub enum RustcLto { + Off, #[default] ThinLocal, Thin, @@ -348,6 +349,7 @@ impl std::str::FromStr for RustcLto { "thin-local" => Ok(RustcLto::ThinLocal), "thin" => Ok(RustcLto::Thin), "fat" => Ok(RustcLto::Fat), + "off" => Ok(RustcLto::Off), _ => Err(format!("Invalid value for rustc LTO: {}", s)), } } diff --git a/src/bootstrap/defaults/config.compiler.toml b/src/bootstrap/defaults/config.compiler.toml index 2f4ccb825c4d8..b98b13119e8ad 100644 --- a/src/bootstrap/defaults/config.compiler.toml +++ b/src/bootstrap/defaults/config.compiler.toml @@ -12,6 +12,8 @@ debug-logging = true incremental = true # Print backtrace on internal compiler errors during bootstrap backtrace-on-ice = true +# Make the compiler and standard library faster to build, at the expense of a ~20% runtime slowdown. +lto = "off" [llvm] # Will download LLVM from CI if available on your platform. diff --git a/src/bootstrap/defaults/config.library.toml b/src/bootstrap/defaults/config.library.toml index 7bc054d3a49fc..f362c4111f107 100644 --- a/src/bootstrap/defaults/config.library.toml +++ b/src/bootstrap/defaults/config.library.toml @@ -8,6 +8,8 @@ bench-stage = 0 [rust] # This greatly increases the speed of rebuilds, especially when there are only minor changes. However, it makes the initial build slightly slower. incremental = true +# Make the compiler and standard library faster to build, at the expense of a ~20% runtime slowdown. +lto = "off" [llvm] # Will download LLVM from CI if available on your platform.