@@ -390,17 +390,13 @@ fn link_rlib<'a>(
390
390
}
391
391
}
392
392
393
- for ( raw_dylib_name, raw_dylib_imports) in
394
- collate_raw_dylibs ( sess, codegen_results. crate_info . used_libraries . iter ( ) ) ?
395
- {
396
- let output_path = archive_builder_builder. create_dll_import_lib (
397
- sess,
398
- & raw_dylib_name,
399
- & raw_dylib_imports,
400
- tmpdir. as_ref ( ) ,
401
- true ,
402
- ) ;
403
-
393
+ for output_path in create_dll_import_libs (
394
+ sess,
395
+ archive_builder_builder,
396
+ codegen_results. crate_info . used_libraries . iter ( ) ,
397
+ tmpdir. as_ref ( ) ,
398
+ true ,
399
+ ) ? {
404
400
ab. add_archive ( & output_path, Box :: new ( |_| false ) ) . unwrap_or_else ( |error| {
405
401
sess. dcx ( ) . emit_fatal ( errors:: AddNativeLibrary { library_path : output_path, error } ) ;
406
402
} ) ;
@@ -488,6 +484,27 @@ fn collate_raw_dylibs<'a>(
488
484
. collect ( ) )
489
485
}
490
486
487
+ fn create_dll_import_libs < ' a > (
488
+ sess : & Session ,
489
+ archive_builder_builder : & dyn ArchiveBuilderBuilder ,
490
+ used_libraries : impl IntoIterator < Item = & ' a NativeLib > ,
491
+ tmpdir : & Path ,
492
+ is_direct_dependency : bool ,
493
+ ) -> Result < Vec < PathBuf > , ErrorGuaranteed > {
494
+ Ok ( collate_raw_dylibs ( sess, used_libraries) ?
495
+ . into_iter ( )
496
+ . map ( |( raw_dylib_name, raw_dylib_imports) | {
497
+ archive_builder_builder. create_dll_import_lib (
498
+ sess,
499
+ & raw_dylib_name,
500
+ & raw_dylib_imports,
501
+ tmpdir,
502
+ is_direct_dependency,
503
+ )
504
+ } )
505
+ . collect ( ) )
506
+ }
507
+
491
508
/// Create a static archive.
492
509
///
493
510
/// This is essentially the same thing as an rlib, but it also involves adding all of the upstream
@@ -2261,16 +2278,14 @@ fn linker_with_args(
2261
2278
) ;
2262
2279
2263
2280
// Link with the import library generated for any raw-dylib functions.
2264
- for ( raw_dylib_name, raw_dylib_imports) in
2265
- collate_raw_dylibs ( sess, codegen_results. crate_info . used_libraries . iter ( ) ) ?
2266
- {
2267
- cmd. add_object ( & archive_builder_builder. create_dll_import_lib (
2268
- sess,
2269
- & raw_dylib_name,
2270
- & raw_dylib_imports,
2271
- tmpdir,
2272
- true ,
2273
- ) ) ;
2281
+ for output_path in create_dll_import_libs (
2282
+ sess,
2283
+ archive_builder_builder,
2284
+ codegen_results. crate_info . used_libraries . iter ( ) ,
2285
+ tmpdir,
2286
+ true ,
2287
+ ) ? {
2288
+ cmd. add_object ( & output_path) ;
2274
2289
}
2275
2290
// As with add_upstream_native_libraries, we need to add the upstream raw-dylib symbols in case
2276
2291
// they are used within inlined functions or instantiated generic functions. We do this *after*
@@ -2295,16 +2310,14 @@ fn linker_with_args(
2295
2310
. flatten ( )
2296
2311
. collect :: < Vec < _ > > ( ) ;
2297
2312
native_libraries_from_nonstatics. sort_unstable_by ( |a, b| a. name . as_str ( ) . cmp ( b. name . as_str ( ) ) ) ;
2298
- for ( raw_dylib_name, raw_dylib_imports) in
2299
- collate_raw_dylibs ( sess, native_libraries_from_nonstatics) ?
2300
- {
2301
- cmd. add_object ( & archive_builder_builder. create_dll_import_lib (
2302
- sess,
2303
- & raw_dylib_name,
2304
- & raw_dylib_imports,
2305
- tmpdir,
2306
- false ,
2307
- ) ) ;
2313
+ for output_path in create_dll_import_libs (
2314
+ sess,
2315
+ archive_builder_builder,
2316
+ native_libraries_from_nonstatics,
2317
+ tmpdir,
2318
+ false ,
2319
+ ) ? {
2320
+ cmd. add_object ( & output_path) ;
2308
2321
}
2309
2322
2310
2323
// Library linking above uses some global state for things like `-Bstatic`/`-Bdynamic` to make
0 commit comments