@@ -15,8 +15,8 @@ use crate::errors::{
1515use crate :: llvm:: archive_ro:: { ArchiveRO , Child } ;
1616use crate :: llvm:: { self , ArchiveKind , LLVMMachineType , LLVMRustCOFFShortExport } ;
1717use rustc_codegen_ssa:: back:: archive:: {
18- get_native_object_symbols, ArArchiveBuilder , ArchiveBuildFailure , ArchiveBuilder ,
19- ArchiveBuilderBuilder , UnknownArchiveKind ,
18+ get_native_object_symbols, try_extract_macho_fat_archive , ArArchiveBuilder ,
19+ ArchiveBuildFailure , ArchiveBuilder , ArchiveBuilderBuilder , UnknownArchiveKind ,
2020} ;
2121
2222use rustc_session:: cstore:: DllImport ;
@@ -66,15 +66,21 @@ impl<'a> ArchiveBuilder<'a> for LlvmArchiveBuilder<'a> {
6666 archive : & Path ,
6767 skip : Box < dyn FnMut ( & str ) -> bool + ' static > ,
6868 ) -> io:: Result < ( ) > {
69- let archive_ro = match ArchiveRO :: open ( archive) {
69+ let mut archive = archive. to_path_buf ( ) ;
70+ if self . sess . target . llvm_target . contains ( "-apple-macosx" ) {
71+ if let Some ( new_archive) = try_extract_macho_fat_archive ( & self . sess , & archive) ? {
72+ archive = new_archive
73+ }
74+ }
75+ let archive_ro = match ArchiveRO :: open ( & archive) {
7076 Ok ( ar) => ar,
7177 Err ( e) => return Err ( io:: Error :: new ( io:: ErrorKind :: Other , e) ) ,
7278 } ;
7379 if self . additions . iter ( ) . any ( |ar| ar. path ( ) == archive) {
7480 return Ok ( ( ) ) ;
7581 }
7682 self . additions . push ( Addition :: Archive {
77- path : archive. to_path_buf ( ) ,
83+ path : archive,
7884 archive : archive_ro,
7985 skip : Box :: new ( skip) ,
8086 } ) ;
0 commit comments