[bootstrap] Move the split-debuginfo setting to the per-target section

This commit is contained in:
Tim Neumann 2024-02-28 20:13:43 +01:00
parent 6554a5645a
commit 0e354c98a8
4 changed files with 69 additions and 25 deletions

View File

@ -543,23 +543,15 @@
# FIXME(#61117): Some tests fail when this option is enabled. # FIXME(#61117): Some tests fail when this option is enabled.
#debuginfo-level-tests = 0 #debuginfo-level-tests = 0
# Should rustc be build with split debuginfo? Default is platform dependent. # Should rustc and the standard library be built with split debuginfo? Default
# Valid values are the same as those accepted by `-C split-debuginfo` # is platform dependent.
# (`off`/`unpacked`/`packed`).
# #
# On Linux, split debuginfo is disabled by default. # This field is deprecated, use `target.<triple>.split-debuginfo` instead.
# #
# On Apple platforms, unpacked split debuginfo is used by default. Unpacked # The value specified here is only used when targeting the `build.build` triple,
# debuginfo does not run `dsymutil`, which packages debuginfo from disparate # and is overridden by `target.<triple>.split-debuginfo` if specified.
# object files into a single `.dSYM` file. `dsymutil` adds time to builds for
# no clear benefit, and also makes it more difficult for debuggers to find
# debug info. The compiler currently defaults to running `dsymutil` to preserve
# its historical default, but when compiling the compiler itself, we skip it by
# default since we know it's safe to do so in that case.
# #
# On Windows platforms, packed debuginfo is the only supported option, #split-debuginfo = see target.<triple>.split-debuginfo
# producing a `.pdb` file.
#split-debuginfo = if linux { off } else if windows { packed } else if apple { unpacked }
# Whether or not `panic!`s generate backtraces (RUST_BACKTRACE) # Whether or not `panic!`s generate backtraces (RUST_BACKTRACE)
#backtrace = true #backtrace = true
@ -773,6 +765,26 @@
# Setting this will override the `use-lld` option for Rust code when targeting MSVC. # Setting this will override the `use-lld` option for Rust code when targeting MSVC.
#linker = "cc" (path) #linker = "cc" (path)
# Should rustc and the standard library be built with split debuginfo? Default
# is platform dependent.
#
# Valid values are the same as those accepted by `-C split-debuginfo`
# (`off`/`unpacked`/`packed`).
#
# On Linux, split debuginfo is disabled by default.
#
# On Apple platforms, unpacked split debuginfo is used by default. Unpacked
# debuginfo does not run `dsymutil`, which packages debuginfo from disparate
# object files into a single `.dSYM` file. `dsymutil` adds time to builds for
# no clear benefit, and also makes it more difficult for debuggers to find
# debug info. The compiler currently defaults to running `dsymutil` to preserve
# its historical default, but when compiling the compiler itself, we skip it by
# default since we know it's safe to do so in that case.
#
# On Windows platforms, packed debuginfo is the only supported option,
# producing a `.pdb` file.
#split-debuginfo = if linux { off } else if windows { packed } else if apple { unpacked }
# Path to the `llvm-config` binary of the installation of a custom LLVM to link # Path to the `llvm-config` binary of the installation of a custom LLVM to link
# against. Note that if this is specified we don't compile LLVM at all for this # against. Note that if this is specified we don't compile LLVM at all for this
# target. # target.

View File

@ -1731,15 +1731,16 @@ impl<'a> Builder<'a> {
}, },
); );
let split_debuginfo = self.config.split_debuginfo(target);
let split_debuginfo_is_stable = target.contains("linux") let split_debuginfo_is_stable = target.contains("linux")
|| target.contains("apple") || target.contains("apple")
|| (target.is_msvc() && self.config.rust_split_debuginfo == SplitDebuginfo::Packed) || (target.is_msvc() && split_debuginfo == SplitDebuginfo::Packed)
|| (target.is_windows() && self.config.rust_split_debuginfo == SplitDebuginfo::Off); || (target.is_windows() && split_debuginfo == SplitDebuginfo::Off);
if !split_debuginfo_is_stable { if !split_debuginfo_is_stable {
rustflags.arg("-Zunstable-options"); rustflags.arg("-Zunstable-options");
} }
match self.config.rust_split_debuginfo { match split_debuginfo {
SplitDebuginfo::Packed => rustflags.arg("-Csplit-debuginfo=packed"), SplitDebuginfo::Packed => rustflags.arg("-Csplit-debuginfo=packed"),
SplitDebuginfo::Unpacked => rustflags.arg("-Csplit-debuginfo=unpacked"), SplitDebuginfo::Unpacked => rustflags.arg("-Csplit-debuginfo=unpacked"),
SplitDebuginfo::Off => rustflags.arg("-Csplit-debuginfo=off"), SplitDebuginfo::Off => rustflags.arg("-Csplit-debuginfo=off"),

View File

@ -256,7 +256,7 @@ pub struct Config {
pub rust_debuginfo_level_std: DebuginfoLevel, pub rust_debuginfo_level_std: DebuginfoLevel,
pub rust_debuginfo_level_tools: DebuginfoLevel, pub rust_debuginfo_level_tools: DebuginfoLevel,
pub rust_debuginfo_level_tests: DebuginfoLevel, pub rust_debuginfo_level_tests: DebuginfoLevel,
pub rust_split_debuginfo: SplitDebuginfo, pub rust_split_debuginfo_for_build_triple: Option<SplitDebuginfo>, // FIXME: Deprecated field. Remove in Q3'24.
pub rust_rpath: bool, pub rust_rpath: bool,
pub rust_strip: bool, pub rust_strip: bool,
pub rust_frame_pointers: bool, pub rust_frame_pointers: bool,
@ -574,6 +574,7 @@ pub struct Target {
pub ranlib: Option<PathBuf>, pub ranlib: Option<PathBuf>,
pub default_linker: Option<PathBuf>, pub default_linker: Option<PathBuf>,
pub linker: Option<PathBuf>, pub linker: Option<PathBuf>,
pub split_debuginfo: Option<SplitDebuginfo>,
pub sanitizers: Option<bool>, pub sanitizers: Option<bool>,
pub profiler: Option<StringOrBool>, pub profiler: Option<StringOrBool>,
pub rpath: Option<bool>, pub rpath: Option<bool>,
@ -1133,6 +1134,7 @@ define_config! {
ranlib: Option<String> = "ranlib", ranlib: Option<String> = "ranlib",
default_linker: Option<PathBuf> = "default-linker", default_linker: Option<PathBuf> = "default-linker",
linker: Option<String> = "linker", linker: Option<String> = "linker",
split_debuginfo: Option<String> = "split-debuginfo",
llvm_config: Option<String> = "llvm-config", llvm_config: Option<String> = "llvm-config",
llvm_has_rust_patches: Option<bool> = "llvm-has-rust-patches", llvm_has_rust_patches: Option<bool> = "llvm-has-rust-patches",
llvm_filecheck: Option<String> = "llvm-filecheck", llvm_filecheck: Option<String> = "llvm-filecheck",
@ -1627,11 +1629,18 @@ impl Config {
debuginfo_level_tools = debuginfo_level_tools_toml; debuginfo_level_tools = debuginfo_level_tools_toml;
debuginfo_level_tests = debuginfo_level_tests_toml; debuginfo_level_tests = debuginfo_level_tests_toml;
config.rust_split_debuginfo = split_debuginfo config.rust_split_debuginfo_for_build_triple = split_debuginfo
.as_deref() .as_deref()
.map(SplitDebuginfo::from_str) .map(SplitDebuginfo::from_str)
.map(|v| v.expect("invalid value for rust.split_debuginfo")) .map(|v| v.expect("invalid value for rust.split-debuginfo"));
.unwrap_or(SplitDebuginfo::default_for_platform(config.build));
if config.rust_split_debuginfo_for_build_triple.is_some() {
println!(
"WARNING: specifying `rust.split-debuginfo` is deprecated, use `target.{}.split-debuginfo` instead",
config.build
);
}
optimize = optimize_toml; optimize = optimize_toml;
omit_git_hash = omit_git_hash_toml; omit_git_hash = omit_git_hash_toml;
config.rust_new_symbol_mangling = new_symbol_mangling; config.rust_new_symbol_mangling = new_symbol_mangling;
@ -1853,10 +1862,11 @@ impl Config {
if let Some(ref s) = cfg.llvm_filecheck { if let Some(ref s) = cfg.llvm_filecheck {
target.llvm_filecheck = Some(config.src.join(s)); target.llvm_filecheck = Some(config.src.join(s));
} }
target.llvm_libunwind = cfg target.llvm_libunwind = cfg.llvm_libunwind.as_ref().map(|v| {
.llvm_libunwind v.parse().unwrap_or_else(|_| {
.as_ref() panic!("failed to parse target.{triple}.llvm-libunwind")
.map(|v| v.parse().expect("failed to parse rust.llvm-libunwind")); })
});
if let Some(s) = cfg.no_std { if let Some(s) = cfg.no_std {
target.no_std = s; target.no_std = s;
} }
@ -1893,6 +1903,12 @@ impl Config {
}).collect()); }).collect());
} }
target.split_debuginfo = cfg.split_debuginfo.as_ref().map(|v| {
v.parse().unwrap_or_else(|_| {
panic!("invalid value for target.{triple}.split-debuginfo")
})
});
config.target_config.insert(TargetSelection::from_user(&triple), target); config.target_config.insert(TargetSelection::from_user(&triple), target);
} }
} }
@ -2291,6 +2307,16 @@ impl Config {
}) })
} }
pub fn split_debuginfo(&self, target: TargetSelection) -> SplitDebuginfo {
self.target_config
.get(&target)
.and_then(|t| t.split_debuginfo)
.or_else(|| {
if self.build == target { self.rust_split_debuginfo_for_build_triple } else { None }
})
.unwrap_or_else(|| SplitDebuginfo::default_for_platform(target))
}
pub fn submodules(&self, rust_info: &GitInfo) -> bool { pub fn submodules(&self, rust_info: &GitInfo) -> bool {
self.submodules.unwrap_or(rust_info.is_managed_git_subrepository()) self.submodules.unwrap_or(rust_info.is_managed_git_subrepository())
} }

View File

@ -151,4 +151,9 @@ pub const CONFIG_CHANGE_HISTORY: &[ChangeInfo] = &[
severity: ChangeSeverity::Info, severity: ChangeSeverity::Info,
summary: "New option `rust.llvm-bitcode-linker` that will build the llvm-bitcode-linker.", summary: "New option `rust.llvm-bitcode-linker` that will build the llvm-bitcode-linker.",
}, },
ChangeInfo {
change_id: 121754,
severity: ChangeSeverity::Warning,
summary: "`rust.split-debuginfo` has been moved to `target.<triple>.split-debuginfo` and its default value is determined for each target individually.",
},
]; ];