@@ -255,7 +255,7 @@ pub struct Config {
255255 pub rust_debuginfo_level_std : DebuginfoLevel ,
256256 pub rust_debuginfo_level_tools : DebuginfoLevel ,
257257 pub rust_debuginfo_level_tests : DebuginfoLevel ,
258- pub rust_split_debuginfo : SplitDebuginfo ,
258+ pub rust_split_debuginfo_for_build_triple : Option < SplitDebuginfo > , // FIXME: Deprecated field. Remove in Q3'24.
259259 pub rust_rpath : bool ,
260260 pub rust_strip : bool ,
261261 pub rust_frame_pointers : bool ,
@@ -571,6 +571,7 @@ pub struct Target {
571571 pub ranlib : Option < PathBuf > ,
572572 pub default_linker : Option < PathBuf > ,
573573 pub linker : Option < PathBuf > ,
574+ pub split_debuginfo : Option < SplitDebuginfo > ,
574575 pub sanitizers : Option < bool > ,
575576 pub profiler : Option < StringOrBool > ,
576577 pub rpath : Option < bool > ,
@@ -1128,6 +1129,7 @@ define_config! {
11281129 ranlib: Option <String > = "ranlib" ,
11291130 default_linker: Option <PathBuf > = "default-linker" ,
11301131 linker: Option <String > = "linker" ,
1132+ split_debuginfo: Option <String > = "split-debuginfo" ,
11311133 llvm_config: Option <String > = "llvm-config" ,
11321134 llvm_has_rust_patches: Option <bool > = "llvm-has-rust-patches" ,
11331135 llvm_filecheck: Option <String > = "llvm-filecheck" ,
@@ -1620,11 +1622,18 @@ impl Config {
16201622 debuginfo_level_tools = debuginfo_level_tools_toml;
16211623 debuginfo_level_tests = debuginfo_level_tests_toml;
16221624
1623- config. rust_split_debuginfo = split_debuginfo
1625+ config. rust_split_debuginfo_for_build_triple = split_debuginfo
16241626 . as_deref ( )
16251627 . map ( SplitDebuginfo :: from_str)
1626- . map ( |v| v. expect ( "invalid value for rust.split_debuginfo" ) )
1627- . unwrap_or ( SplitDebuginfo :: default_for_platform ( config. build ) ) ;
1628+ . map ( |v| v. expect ( "invalid value for rust.split-debuginfo" ) ) ;
1629+
1630+ if config. rust_split_debuginfo_for_build_triple . is_some ( ) {
1631+ println ! (
1632+ "WARNING: specifying `rust.split-debuginfo` is deprecated, use `target.{}.split-debuginfo` instead" ,
1633+ config. build
1634+ ) ;
1635+ }
1636+
16281637 optimize = optimize_toml;
16291638 omit_git_hash = omit_git_hash_toml;
16301639 config. rust_new_symbol_mangling = new_symbol_mangling;
@@ -1845,10 +1854,11 @@ impl Config {
18451854 if let Some ( ref s) = cfg. llvm_filecheck {
18461855 target. llvm_filecheck = Some ( config. src . join ( s) ) ;
18471856 }
1848- target. llvm_libunwind = cfg
1849- . llvm_libunwind
1850- . as_ref ( )
1851- . map ( |v| v. parse ( ) . expect ( "failed to parse rust.llvm-libunwind" ) ) ;
1857+ target. llvm_libunwind = cfg. llvm_libunwind . as_ref ( ) . map ( |v| {
1858+ v. parse ( ) . unwrap_or_else ( |_| {
1859+ panic ! ( "failed to parse target.{triple}.llvm-libunwind" )
1860+ } )
1861+ } ) ;
18521862 if let Some ( s) = cfg. no_std {
18531863 target. no_std = s;
18541864 }
@@ -1884,6 +1894,12 @@ impl Config {
18841894 } ) . collect ( ) ) ;
18851895 }
18861896
1897+ target. split_debuginfo = cfg. split_debuginfo . as_ref ( ) . map ( |v| {
1898+ v. parse ( ) . unwrap_or_else ( |_| {
1899+ panic ! ( "invalid value for target.{triple}.split-debuginfo" )
1900+ } )
1901+ } ) ;
1902+
18871903 config. target_config . insert ( TargetSelection :: from_user ( & triple) , target) ;
18881904 }
18891905 }
@@ -2282,6 +2298,16 @@ impl Config {
22822298 } )
22832299 }
22842300
2301+ pub fn split_debuginfo ( & self , target : TargetSelection ) -> SplitDebuginfo {
2302+ self . target_config
2303+ . get ( & target)
2304+ . and_then ( |t| t. split_debuginfo )
2305+ . or_else ( || {
2306+ if self . build == target { self . rust_split_debuginfo_for_build_triple } else { None }
2307+ } )
2308+ . unwrap_or_else ( || SplitDebuginfo :: default_for_platform ( target) )
2309+ }
2310+
22852311 pub fn submodules ( & self , rust_info : & GitInfo ) -> bool {
22862312 self . submodules . unwrap_or ( rust_info. is_managed_git_subrepository ( ) )
22872313 }
0 commit comments