@@ -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 ,
@@ -573,6 +573,7 @@ pub struct Target {
573573 pub ranlib : Option < PathBuf > ,
574574 pub default_linker : Option < PathBuf > ,
575575 pub linker : Option < PathBuf > ,
576+ pub split_debuginfo : Option < SplitDebuginfo > ,
576577 pub sanitizers : Option < bool > ,
577578 pub profiler : Option < StringOrBool > ,
578579 pub rpath : Option < bool > ,
@@ -1131,6 +1132,7 @@ define_config! {
11311132 ranlib: Option <String > = "ranlib" ,
11321133 default_linker: Option <PathBuf > = "default-linker" ,
11331134 linker: Option <String > = "linker" ,
1135+ split_debuginfo: Option <String > = "split-debuginfo" ,
11341136 llvm_config: Option <String > = "llvm-config" ,
11351137 llvm_has_rust_patches: Option <bool > = "llvm-has-rust-patches" ,
11361138 llvm_filecheck: Option <String > = "llvm-filecheck" ,
@@ -1624,11 +1626,18 @@ impl Config {
16241626 debuginfo_level_tools = debuginfo_level_tools_toml;
16251627 debuginfo_level_tests = debuginfo_level_tests_toml;
16261628
1627- config. rust_split_debuginfo = split_debuginfo
1629+ config. rust_split_debuginfo_for_build_triple = split_debuginfo
16281630 . as_deref ( )
16291631 . map ( SplitDebuginfo :: from_str)
1630- . map ( |v| v. expect ( "invalid value for rust.split_debuginfo" ) )
1631- . unwrap_or ( SplitDebuginfo :: default_for_platform ( config. build ) ) ;
1632+ . map ( |v| v. expect ( "invalid value for rust.split-debuginfo" ) ) ;
1633+
1634+ if config. rust_split_debuginfo_for_build_triple . is_some ( ) {
1635+ println ! (
1636+ "WARNING: specifying `rust.split-debuginfo` is deprecated, use `target.{}.split-debuginfo` instead" ,
1637+ config. build
1638+ ) ;
1639+ }
1640+
16321641 optimize = optimize_toml;
16331642 omit_git_hash = omit_git_hash_toml;
16341643 config. rust_new_symbol_mangling = new_symbol_mangling;
@@ -1849,10 +1858,11 @@ impl Config {
18491858 if let Some ( ref s) = cfg. llvm_filecheck {
18501859 target. llvm_filecheck = Some ( config. src . join ( s) ) ;
18511860 }
1852- target. llvm_libunwind = cfg
1853- . llvm_libunwind
1854- . as_ref ( )
1855- . map ( |v| v. parse ( ) . expect ( "failed to parse rust.llvm-libunwind" ) ) ;
1861+ target. llvm_libunwind = cfg. llvm_libunwind . as_ref ( ) . map ( |v| {
1862+ v. parse ( ) . unwrap_or_else ( |_| {
1863+ panic ! ( "failed to parse target.{triple}.llvm-libunwind" )
1864+ } )
1865+ } ) ;
18561866 if let Some ( s) = cfg. no_std {
18571867 target. no_std = s;
18581868 }
@@ -1889,6 +1899,12 @@ impl Config {
18891899 } ) . collect ( ) ) ;
18901900 }
18911901
1902+ target. split_debuginfo = cfg. split_debuginfo . as_ref ( ) . map ( |v| {
1903+ v. parse ( ) . unwrap_or_else ( |_| {
1904+ panic ! ( "invalid value for target.{triple}.split-debuginfo" )
1905+ } )
1906+ } ) ;
1907+
18921908 config. target_config . insert ( TargetSelection :: from_user ( & triple) , target) ;
18931909 }
18941910 }
@@ -2287,6 +2303,16 @@ impl Config {
22872303 } )
22882304 }
22892305
2306+ pub fn split_debuginfo ( & self , target : TargetSelection ) -> SplitDebuginfo {
2307+ self . target_config
2308+ . get ( & target)
2309+ . and_then ( |t| t. split_debuginfo )
2310+ . or_else ( || {
2311+ if self . build == target { self . rust_split_debuginfo_for_build_triple } else { None }
2312+ } )
2313+ . unwrap_or_else ( || SplitDebuginfo :: default_for_platform ( target) )
2314+ }
2315+
22902316 pub fn submodules ( & self , rust_info : & GitInfo ) -> bool {
22912317 self . submodules . unwrap_or ( rust_info. is_managed_git_subrepository ( ) )
22922318 }
0 commit comments