@@ -1954,7 +1954,12 @@ pub fn run_cargo(
1954
1954
let file_stem = parts. next ( ) . unwrap ( ) . to_owned ( ) ;
1955
1955
let extension = parts. next ( ) . unwrap ( ) . to_owned ( ) ;
1956
1956
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) ) ) ;
1958
1963
}
1959
1964
} ) ;
1960
1965
@@ -1975,7 +1980,7 @@ pub fn run_cargo(
1975
1980
. collect :: < Vec < _ > > ( ) ;
1976
1981
for ( prefix, extension, expected_len) in toplevel {
1977
1982
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)
1979
1984
&& filename
1980
1985
. strip_prefix ( & prefix[ ..] )
1981
1986
. map ( |s| s. starts_with ( '-' ) && s. ends_with ( & extension[ ..] ) )
@@ -1986,6 +1991,7 @@ pub fn run_cargo(
1986
1991
} ) ;
1987
1992
let path_to_add = match max {
1988
1993
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
1989
1995
None => panic ! ( "no output generated for {prefix:?} {extension:?}" ) ,
1990
1996
} ;
1991
1997
if is_dylib ( path_to_add) {
0 commit comments