@@ -8,7 +8,7 @@ use rustc_errors::{ErrorGuaranteed, Handler};
8
8
use rustc_fs_util:: fix_windows_verbatim_for_gcc;
9
9
use rustc_hir:: def_id:: { CrateNum , LOCAL_CRATE } ;
10
10
use rustc_metadata:: find_native_static_library;
11
- use rustc_metadata:: fs:: { emit_metadata , METADATA_FILENAME } ;
11
+ use rustc_metadata:: fs:: { emit_wrapper_file , METADATA_FILENAME } ;
12
12
use rustc_middle:: middle:: dependency_format:: Linkage ;
13
13
use rustc_middle:: middle:: exported_symbols:: SymbolExportKind ;
14
14
use rustc_session:: config:: { self , CFGuard , CrateType , DebugInfo , LdImpl , Lto , Strip } ;
@@ -29,7 +29,7 @@ use rustc_target::spec::{RelocModel, RelroLevel, SanitizerSet, SplitDebuginfo};
29
29
use super :: archive:: { ArchiveBuilder , ArchiveBuilderBuilder } ;
30
30
use super :: command:: Command ;
31
31
use super :: linker:: { self , Linker } ;
32
- use super :: metadata:: { create_rmeta_file , MetadataPosition } ;
32
+ use super :: metadata:: { create_wrapper_file , MetadataPosition } ;
33
33
use super :: rpath:: { self , RPathConfig } ;
34
34
use crate :: {
35
35
errors, looks_like_rust_object_file, CodegenResults , CompiledModule , CrateInfo , NativeLib ,
@@ -44,7 +44,7 @@ use std::borrow::Borrow;
44
44
use std:: cell:: OnceCell ;
45
45
use std:: collections:: BTreeSet ;
46
46
use std:: ffi:: OsString ;
47
- use std:: fs:: { File , OpenOptions } ;
47
+ use std:: fs:: { read , File , OpenOptions } ;
48
48
use std:: io:: { BufWriter , Write } ;
49
49
use std:: ops:: Deref ;
50
50
use std:: path:: { Path , PathBuf } ;
@@ -292,8 +292,8 @@ fn link_rlib<'a>(
292
292
let trailing_metadata = match flavor {
293
293
RlibFlavor :: Normal => {
294
294
let ( metadata, metadata_position) =
295
- create_rmeta_file ( sess, codegen_results. metadata . raw_data ( ) ) ;
296
- let metadata = emit_metadata ( sess, & metadata, tmpdir) ;
295
+ create_wrapper_file ( sess, b".rmeta" . to_vec ( ) , codegen_results. metadata . raw_data ( ) ) ;
296
+ let metadata = emit_wrapper_file ( sess, & metadata, tmpdir, METADATA_FILENAME ) ;
297
297
match metadata_position {
298
298
MetadataPosition :: First => {
299
299
// Most of the time metadata in rlib files is wrapped in a "dummy" object
@@ -376,12 +376,18 @@ fn link_rlib<'a>(
376
376
let location =
377
377
find_native_static_library ( name. as_str ( ) , lib. verbatim , & lib_search_paths, sess) ;
378
378
if sess. opts . unstable_opts . packed_bundled_libs && flavor == RlibFlavor :: Normal {
379
- packed_bundled_libs. push ( find_native_static_library (
380
- lib. filename . unwrap ( ) . as_str ( ) ,
379
+ let filename = lib. filename . unwrap ( ) ;
380
+ let lib_path = find_native_static_library (
381
+ filename. as_str ( ) ,
381
382
Some ( true ) ,
382
383
& lib_search_paths,
383
384
sess,
384
- ) ) ;
385
+ ) ;
386
+ let src = read ( lib_path)
387
+ . map_err ( |e| sess. emit_fatal ( errors:: ReadFileError { message : e } ) ) ?;
388
+ let ( data, _) = create_wrapper_file ( sess, b".bundled_lib" . to_vec ( ) , & src) ;
389
+ let wrapper_file = emit_wrapper_file ( sess, & data, tmpdir, filename. as_str ( ) ) ;
390
+ packed_bundled_libs. push ( wrapper_file) ;
385
391
continue ;
386
392
}
387
393
ab. add_archive ( & location, Box :: new ( |_| false ) ) . unwrap_or_else ( |error| {
0 commit comments