@@ -1954,7 +1954,12 @@ pub fn run_cargo(
19541954 let file_stem = parts. next ( ) . unwrap ( ) . to_owned ( ) ;
19551955 let extension = parts. next ( ) . unwrap ( ) . to_owned ( ) ;
19561956
1957- toplevel. push ( ( file_stem, extension, expected_len) ) ;
1957+ if extension == "so" || extension == "dylib" {
1958+ // FIXME workaround for the fact that cargo doesn't understand `-Zsplit-metadata`
1959+ toplevel. push ( ( file_stem. clone ( ) , "rmeta" . to_owned ( ) , None ) ) ;
1960+ }
1961+
1962+ toplevel. push ( ( file_stem, extension, Some ( expected_len) ) ) ;
19581963 }
19591964 } ) ;
19601965
@@ -1975,7 +1980,7 @@ pub fn run_cargo(
19751980 . collect :: < Vec < _ > > ( ) ;
19761981 for ( prefix, extension, expected_len) in toplevel {
19771982 let candidates = contents. iter ( ) . filter ( |& & ( _, ref filename, ref meta) | {
1978- meta. len ( ) == expected_len
1983+ expected_len . map_or ( true , |expected_len| meta. len ( ) == expected_len)
19791984 && filename
19801985 . strip_prefix ( & prefix[ ..] )
19811986 . map ( |s| s. starts_with ( '-' ) && s. ends_with ( & extension[ ..] ) )
@@ -1986,6 +1991,7 @@ pub fn run_cargo(
19861991 } ) ;
19871992 let path_to_add = match max {
19881993 Some ( triple) => triple. 0 . to_str ( ) . unwrap ( ) ,
1994+ None if extension == "rmeta" => continue , // cfg(not(bootstrap)) remove this once -Zsplit-metadata is passed for all stages
19891995 None => panic ! ( "no output generated for {prefix:?} {extension:?}" ) ,
19901996 } ;
19911997 if is_dylib ( path_to_add) {
0 commit comments