@@ -11,7 +11,6 @@ use std::str;
1111use crate :: llvm:: archive_ro:: { ArchiveRO , Child } ;
1212use crate :: llvm:: { self , ArchiveKind , LLVMMachineType , LLVMRustCOFFShortExport } ;
1313use rustc_codegen_ssa:: back:: archive:: ArchiveBuilder ;
14- use rustc_data_structures:: temp_dir:: MaybeTempDir ;
1514use rustc_session:: cstore:: { DllCallingConvention , DllImport } ;
1615use rustc_session:: Session ;
1716
@@ -96,19 +95,23 @@ impl<'a> ArchiveBuilder<'a> for LlvmArchiveBuilder<'a> {
9695 }
9796 }
9897
99- fn inject_dll_import_lib (
100- & mut self ,
98+ fn sess ( & self ) -> & Session {
99+ self . sess
100+ }
101+
102+ fn create_dll_import_lib (
103+ sess : & Session ,
101104 lib_name : & str ,
102105 dll_imports : & [ DllImport ] ,
103- tmpdir : & MaybeTempDir ,
104- ) {
106+ tmpdir : & Path ,
107+ ) -> PathBuf {
105108 let output_path = {
106- let mut output_path: PathBuf = tmpdir. as_ref ( ) . to_path_buf ( ) ;
109+ let mut output_path: PathBuf = tmpdir. to_path_buf ( ) ;
107110 output_path. push ( format ! ( "{}_imports" , lib_name) ) ;
108111 output_path. with_extension ( "lib" )
109112 } ;
110113
111- let target = & self . sess . target ;
114+ let target = & sess. target ;
112115 let mingw_gnu_toolchain = target. vendor == "pc"
113116 && target. os == "windows"
114117 && target. env == "gnu"
@@ -117,7 +120,7 @@ impl<'a> ArchiveBuilder<'a> for LlvmArchiveBuilder<'a> {
117120 let import_name_and_ordinal_vector: Vec < ( String , Option < u16 > ) > = dll_imports
118121 . iter ( )
119122 . map ( |import : & DllImport | {
120- if self . sess . target . arch == "x86" {
123+ if sess. target . arch == "x86" {
121124 (
122125 LlvmArchiveBuilder :: i686_decorated_name ( import, mingw_gnu_toolchain) ,
123126 import. ordinal ,
@@ -134,8 +137,7 @@ impl<'a> ArchiveBuilder<'a> for LlvmArchiveBuilder<'a> {
134137 // that loaded but crashed with an AV upon calling one of the imported
135138 // functions. Therefore, use binutils to create the import library instead,
136139 // by writing a .DEF file to the temp dir and calling binutils's dlltool.
137- let def_file_path =
138- tmpdir. as_ref ( ) . join ( format ! ( "{}_imports" , lib_name) ) . with_extension ( "def" ) ;
140+ let def_file_path = tmpdir. join ( format ! ( "{}_imports" , lib_name) ) . with_extension ( "def" ) ;
139141
140142 let def_file_content = format ! (
141143 "EXPORTS\n {}" ,
@@ -154,11 +156,11 @@ impl<'a> ArchiveBuilder<'a> for LlvmArchiveBuilder<'a> {
154156 match std:: fs:: write ( & def_file_path, def_file_content) {
155157 Ok ( _) => { }
156158 Err ( e) => {
157- self . sess . fatal ( & format ! ( "Error writing .DEF file: {}" , e) ) ;
159+ sess. fatal ( & format ! ( "Error writing .DEF file: {}" , e) ) ;
158160 }
159161 } ;
160162
161- let dlltool = find_binutils_dlltool ( self . sess ) ;
163+ let dlltool = find_binutils_dlltool ( sess) ;
162164 let result = std:: process:: Command :: new ( dlltool)
163165 . args ( [
164166 "-d" ,
@@ -172,9 +174,9 @@ impl<'a> ArchiveBuilder<'a> for LlvmArchiveBuilder<'a> {
172174
173175 match result {
174176 Err ( e) => {
175- self . sess . fatal ( & format ! ( "Error calling dlltool: {}" , e) ) ;
177+ sess. fatal ( & format ! ( "Error calling dlltool: {}" , e) ) ;
176178 }
177- Ok ( output) if !output. status . success ( ) => self . sess . fatal ( & format ! (
179+ Ok ( output) if !output. status . success ( ) => sess. fatal ( & format ! (
178180 "Dlltool could not create import library: {}\n {}" ,
179181 String :: from_utf8_lossy( & output. stdout) ,
180182 String :: from_utf8_lossy( & output. stderr)
@@ -220,27 +222,21 @@ impl<'a> ArchiveBuilder<'a> for LlvmArchiveBuilder<'a> {
220222 output_path_z. as_ptr ( ) ,
221223 ffi_exports. as_ptr ( ) ,
222224 ffi_exports. len ( ) ,
223- llvm_machine_type ( & self . sess . target . arch ) as u16 ,
224- !self . sess . target . is_like_msvc ,
225+ llvm_machine_type ( & sess. target . arch ) as u16 ,
226+ !sess. target . is_like_msvc ,
225227 )
226228 } ;
227229
228230 if result == crate :: llvm:: LLVMRustResult :: Failure {
229- self . sess . fatal ( & format ! (
231+ sess. fatal ( & format ! (
230232 "Error creating import library for {}: {}" ,
231233 lib_name,
232234 llvm:: last_error( ) . unwrap_or( "unknown LLVM error" . to_string( ) )
233235 ) ) ;
234236 }
235237 } ;
236238
237- self . add_archive ( & output_path, |_| false ) . unwrap_or_else ( |e| {
238- self . sess . fatal ( & format ! (
239- "failed to add native library {}: {}" ,
240- output_path. display( ) ,
241- e
242- ) ) ;
243- } ) ;
239+ output_path
244240 }
245241}
246242
0 commit comments