@@ -3,7 +3,7 @@ use rustc_data_structures::temp_dir::MaybeTempDir;
3
3
use rustc_errors:: Handler ;
4
4
use rustc_fs_util:: fix_windows_verbatim_for_gcc;
5
5
use rustc_hir:: def_id:: CrateNum ;
6
- use rustc_middle:: middle:: cstore:: { DllImport , LibSource } ;
6
+ use rustc_middle:: middle:: cstore:: DllImport ;
7
7
use rustc_middle:: middle:: dependency_format:: Linkage ;
8
8
use rustc_session:: config:: { self , CFGuard , CrateType , DebugInfo , LdImpl , Strip } ;
9
9
use rustc_session:: config:: { OutputFilenames , OutputType , PrintRequest } ;
@@ -238,7 +238,7 @@ pub fn each_linked_rlib(
238
238
info : & CrateInfo ,
239
239
f : & mut dyn FnMut ( CrateNum , & Path ) ,
240
240
) -> Result < ( ) , String > {
241
- let crates = info. used_crates_static . iter ( ) ;
241
+ let crates = info. used_crates . iter ( ) ;
242
242
let mut fmts = None ;
243
243
for ( ty, list) in info. dependency_formats . iter ( ) {
244
244
match ty {
@@ -256,22 +256,23 @@ pub fn each_linked_rlib(
256
256
Some ( f) => f,
257
257
None => return Err ( "could not find formats for rlibs" . to_string ( ) ) ,
258
258
} ;
259
- for & ( cnum, ref path ) in crates {
259
+ for & cnum in crates {
260
260
match fmts. get ( cnum. as_usize ( ) - 1 ) {
261
261
Some ( & Linkage :: NotLinked | & Linkage :: IncludedFromDylib ) => continue ,
262
262
Some ( _) => { }
263
263
None => return Err ( "could not find formats for rlibs" . to_string ( ) ) ,
264
264
}
265
265
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 used_crate_source = & info. used_crate_source [ & cnum] ;
267
+ let path = if let Some ( ( path, _) ) = & used_crate_source. rlib {
268
+ path
269
+ } else if used_crate_source. rmeta . is_some ( ) {
270
+ return Err ( format ! (
271
+ "could not find rlib for: `{}`, found rmeta (metadata) file" ,
272
+ name
273
+ ) ) ;
274
+ } else {
275
+ return Err ( format ! ( "could not find rlib for: `{}`" , name) ) ;
275
276
} ;
276
277
f ( cnum, & path) ;
277
278
}
@@ -1759,8 +1760,19 @@ fn add_rpath_args(
1759
1760
// where extern libraries might live, based on the
1760
1761
// add_lib_search_paths
1761
1762
if sess. opts . cg . rpath {
1763
+ let libs = codegen_results
1764
+ . crate_info
1765
+ . used_crates
1766
+ . iter ( )
1767
+ . filter_map ( |cnum| {
1768
+ codegen_results. crate_info . used_crate_source [ cnum]
1769
+ . dylib
1770
+ . as_ref ( )
1771
+ . map ( |( path, _) | & * * path)
1772
+ } )
1773
+ . collect :: < Vec < _ > > ( ) ;
1762
1774
let mut rpath_config = RPathConfig {
1763
- used_crates : & codegen_results . crate_info . used_crates_dynamic ,
1775
+ libs : & * libs ,
1764
1776
out_filename : out_filename. to_path_buf ( ) ,
1765
1777
has_rpath : sess. target . has_rpath ,
1766
1778
is_like_osx : sess. target . is_like_osx ,
@@ -2121,7 +2133,7 @@ fn add_upstream_rust_crates<'a, B: ArchiveBuilder<'a>>(
2121
2133
2122
2134
// Invoke get_used_crates to ensure that we get a topological sorting of
2123
2135
// crates.
2124
- let deps = & codegen_results. crate_info . used_crates_dynamic ;
2136
+ let deps = & codegen_results. crate_info . used_crates ;
2125
2137
2126
2138
// There's a few internal crates in the standard library (aka libcore and
2127
2139
// libstd) which actually have a circular dependence upon one another. This
@@ -2149,7 +2161,7 @@ fn add_upstream_rust_crates<'a, B: ArchiveBuilder<'a>>(
2149
2161
let mut required = FxHashSet :: default ( ) ;
2150
2162
2151
2163
let info = & codegen_results. crate_info ;
2152
- for & ( cnum, _ ) in deps. iter ( ) . rev ( ) {
2164
+ for & cnum in deps. iter ( ) . rev ( ) {
2153
2165
if let Some ( missing) = info. missing_lang_items . get ( & cnum) {
2154
2166
let missing_crates = missing. iter ( ) . map ( |i| info. lang_item_to_crate . get ( i) . copied ( ) ) ;
2155
2167
required. extend ( missing_crates) ;
@@ -2176,7 +2188,7 @@ fn add_upstream_rust_crates<'a, B: ArchiveBuilder<'a>>(
2176
2188
2177
2189
let mut compiler_builtins = None ;
2178
2190
2179
- for & ( cnum, _ ) in deps. iter ( ) {
2191
+ for & cnum in deps. iter ( ) {
2180
2192
if group_start == Some ( cnum) {
2181
2193
cmd. group_start ( ) ;
2182
2194
}
@@ -2388,9 +2400,9 @@ fn add_upstream_native_libraries(
2388
2400
. find ( |( ty, _) | * ty == crate_type)
2389
2401
. expect ( "failed to find crate type in dependency format list" ) ;
2390
2402
2391
- let crates = & codegen_results. crate_info . used_crates_static ;
2403
+ let crates = & codegen_results. crate_info . used_crates ;
2392
2404
let mut last = ( NativeLibKind :: Unspecified , None ) ;
2393
- for & ( cnum, _ ) in crates {
2405
+ for & cnum in crates {
2394
2406
for lib in codegen_results. crate_info . native_libraries [ & cnum] . iter ( ) {
2395
2407
let name = match lib. name {
2396
2408
Some ( l) => l,
0 commit comments