@@ -3,7 +3,7 @@ use rustc_data_structures::temp_dir::MaybeTempDir;
33use rustc_errors:: Handler ;
44use rustc_fs_util:: fix_windows_verbatim_for_gcc;
55use rustc_hir:: def_id:: CrateNum ;
6- use rustc_middle:: middle:: cstore:: { DllImport , LibSource } ;
6+ use rustc_middle:: middle:: cstore:: DllImport ;
77use rustc_middle:: middle:: dependency_format:: Linkage ;
88use rustc_session:: config:: { self , CFGuard , CrateType , DebugInfo , LdImpl , Strip } ;
99use rustc_session:: config:: { OutputFilenames , OutputType , PrintRequest } ;
@@ -238,7 +238,7 @@ pub fn each_linked_rlib(
238238 info : & CrateInfo ,
239239 f : & mut dyn FnMut ( CrateNum , & Path ) ,
240240) -> Result < ( ) , String > {
241- let crates = info. used_crates_static . iter ( ) ;
241+ let crates = info. used_crates . iter ( ) ;
242242 let mut fmts = None ;
243243 for ( ty, list) in info. dependency_formats . iter ( ) {
244244 match ty {
@@ -256,22 +256,22 @@ pub fn each_linked_rlib(
256256 Some ( f) => f,
257257 None => return Err ( "could not find formats for rlibs" . to_string ( ) ) ,
258258 } ;
259- for & ( cnum, ref path ) in crates {
259+ for & cnum in crates {
260260 match fmts. get ( cnum. as_usize ( ) - 1 ) {
261261 Some ( & Linkage :: NotLinked | & Linkage :: IncludedFromDylib ) => continue ,
262262 Some ( _) => { }
263263 None => return Err ( "could not find formats for rlibs" . to_string ( ) ) ,
264264 }
265265 let name = & info. crate_name [ & cnum] ;
266- let path = match * path {
267- LibSource :: Some ( ref p ) => p ,
268- LibSource :: MetadataOnly => {
269- return Err ( format ! (
270- "could not find rlib for: `{}`, found rmeta (metadata) file" ,
271- name
272- ) ) ;
273- }
274- LibSource :: None => return Err ( format ! ( "could not find rlib for: `{}`" , name) ) ,
266+ let path = if let Some ( ( path, _ ) ) = & info . used_crate_source [ & cnum ] . rlib {
267+ path
268+ } else if info . used_crate_source [ & cnum ] . rmeta . is_some ( ) {
269+ return Err ( format ! (
270+ "could not find rlib for: `{}`, found rmeta (metadata) file" ,
271+ name
272+ ) ) ;
273+ } else {
274+ return Err ( format ! ( "could not find rlib for: `{}`" , name) ) ;
275275 } ;
276276 f ( cnum, & path) ;
277277 }
@@ -1759,8 +1759,19 @@ fn add_rpath_args(
17591759 // where extern libraries might live, based on the
17601760 // add_lib_search_paths
17611761 if sess. opts . cg . rpath {
1762+ let libs = codegen_results
1763+ . crate_info
1764+ . used_crates
1765+ . iter ( )
1766+ . filter_map ( |cnum| {
1767+ codegen_results. crate_info . used_crate_source [ cnum]
1768+ . dylib
1769+ . as_ref ( )
1770+ . map ( |( path, _) | & * * path)
1771+ } )
1772+ . collect :: < Vec < _ > > ( ) ;
17621773 let mut rpath_config = RPathConfig {
1763- used_crates : & codegen_results . crate_info . used_crates_dynamic ,
1774+ libs : & * libs ,
17641775 out_filename : out_filename. to_path_buf ( ) ,
17651776 has_rpath : sess. target . has_rpath ,
17661777 is_like_osx : sess. target . is_like_osx ,
@@ -2121,7 +2132,7 @@ fn add_upstream_rust_crates<'a, B: ArchiveBuilder<'a>>(
21212132
21222133 // Invoke get_used_crates to ensure that we get a topological sorting of
21232134 // crates.
2124- let deps = & codegen_results. crate_info . used_crates_dynamic ;
2135+ let deps = & codegen_results. crate_info . used_crates ;
21252136
21262137 // There's a few internal crates in the standard library (aka libcore and
21272138 // libstd) which actually have a circular dependence upon one another. This
@@ -2149,7 +2160,7 @@ fn add_upstream_rust_crates<'a, B: ArchiveBuilder<'a>>(
21492160 let mut required = FxHashSet :: default ( ) ;
21502161
21512162 let info = & codegen_results. crate_info ;
2152- for & ( cnum, _ ) in deps. iter ( ) . rev ( ) {
2163+ for & cnum in deps. iter ( ) . rev ( ) {
21532164 if let Some ( missing) = info. missing_lang_items . get ( & cnum) {
21542165 let missing_crates = missing. iter ( ) . map ( |i| info. lang_item_to_crate . get ( i) . copied ( ) ) ;
21552166 required. extend ( missing_crates) ;
@@ -2176,7 +2187,7 @@ fn add_upstream_rust_crates<'a, B: ArchiveBuilder<'a>>(
21762187
21772188 let mut compiler_builtins = None ;
21782189
2179- for & ( cnum, _ ) in deps. iter ( ) {
2190+ for & cnum in deps. iter ( ) {
21802191 if group_start == Some ( cnum) {
21812192 cmd. group_start ( ) ;
21822193 }
@@ -2388,9 +2399,9 @@ fn add_upstream_native_libraries(
23882399 . find ( |( ty, _) | * ty == crate_type)
23892400 . expect ( "failed to find crate type in dependency format list" ) ;
23902401
2391- let crates = & codegen_results. crate_info . used_crates_static ;
2402+ let crates = & codegen_results. crate_info . used_crates ;
23922403 let mut last = ( NativeLibKind :: Unspecified , None ) ;
2393- for & ( cnum, _ ) in crates {
2404+ for & cnum in crates {
23942405 for lib in codegen_results. crate_info . native_libraries [ & cnum] . iter ( ) {
23952406 let name = match lib. name {
23962407 Some ( l) => l,
0 commit comments