Move temp file name generation out of the create_dll_import_lib method

This commit is contained in:
bjorn3 2024-07-25 19:53:17 +00:00
parent ba5ff07532
commit ee89db9b17
5 changed files with 19 additions and 24 deletions

View File

@ -1,4 +1,4 @@
use std::path::{Path, PathBuf}; use std::path::Path;
use rustc_codegen_ssa::back::archive::{ use rustc_codegen_ssa::back::archive::{
ArArchiveBuilder, ArchiveBuilder, ArchiveBuilderBuilder, DEFAULT_OBJECT_READER, ArArchiveBuilder, ArchiveBuilder, ArchiveBuilderBuilder, DEFAULT_OBJECT_READER,
@ -17,9 +17,8 @@ impl ArchiveBuilderBuilder for ArArchiveBuilderBuilder {
sess: &Session, sess: &Session,
_lib_name: &str, _lib_name: &str,
_dll_imports: &[rustc_session::cstore::DllImport], _dll_imports: &[rustc_session::cstore::DllImport],
_tmpdir: &Path, _output_path: &Path,
_is_direct_dependency: bool, ) {
) -> PathBuf {
sess.dcx().fatal("raw-dylib is not yet supported by rustc_codegen_cranelift"); sess.dcx().fatal("raw-dylib is not yet supported by rustc_codegen_cranelift");
} }
} }

View File

@ -1,4 +1,4 @@
use std::path::{Path, PathBuf}; use std::path::Path;
use rustc_codegen_ssa::back::archive::{ use rustc_codegen_ssa::back::archive::{
ArArchiveBuilder, ArchiveBuilder, ArchiveBuilderBuilder, DEFAULT_OBJECT_READER, ArArchiveBuilder, ArchiveBuilder, ArchiveBuilderBuilder, DEFAULT_OBJECT_READER,
@ -18,9 +18,8 @@ impl ArchiveBuilderBuilder for ArArchiveBuilderBuilder {
_sess: &Session, _sess: &Session,
_lib_name: &str, _lib_name: &str,
_dll_imports: &[DllImport], _dll_imports: &[DllImport],
_tmpdir: &Path, _output_path: &Path,
_is_direct_dependency: bool, ) {
) -> PathBuf {
unimplemented!("creating dll imports is not yet supported"); unimplemented!("creating dll imports is not yet supported");
} }
} }

View File

@ -120,12 +120,8 @@ impl ArchiveBuilderBuilder for LlvmArchiveBuilderBuilder {
sess: &Session, sess: &Session,
lib_name: &str, lib_name: &str,
dll_imports: &[DllImport], dll_imports: &[DllImport],
tmpdir: &Path, output_path: &Path,
is_direct_dependency: bool, ) {
) -> PathBuf {
let name_suffix = if is_direct_dependency { "_imports" } else { "_imports_indirect" };
let output_path = tmpdir.join(format!("{lib_name}{name_suffix}.lib"));
let target = &sess.target; let target = &sess.target;
let mingw_gnu_toolchain = common::is_mingw_gnu_toolchain(target); let mingw_gnu_toolchain = common::is_mingw_gnu_toolchain(target);
@ -149,7 +145,7 @@ impl ArchiveBuilderBuilder for LlvmArchiveBuilderBuilder {
// that loaded but crashed with an AV upon calling one of the imported // that loaded but crashed with an AV upon calling one of the imported
// functions. Therefore, use binutils to create the import library instead, // functions. Therefore, use binutils to create the import library instead,
// by writing a .DEF file to the temp dir and calling binutils's dlltool. // by writing a .DEF file to the temp dir and calling binutils's dlltool.
let def_file_path = tmpdir.join(format!("{lib_name}{name_suffix}.def")); let def_file_path = output_path.with_extension("def");
let def_file_content = format!( let def_file_content = format!(
"EXPORTS\n{}", "EXPORTS\n{}",
@ -279,9 +275,7 @@ impl ArchiveBuilderBuilder for LlvmArchiveBuilderBuilder {
error: llvm::last_error().unwrap_or("unknown LLVM error".to_string()), error: llvm::last_error().unwrap_or("unknown LLVM error".to_string()),
}); });
} }
}; }
output_path
} }
} }

View File

@ -31,9 +31,8 @@ pub trait ArchiveBuilderBuilder {
sess: &Session, sess: &Session,
lib_name: &str, lib_name: &str,
dll_imports: &[DllImport], dll_imports: &[DllImport],
tmpdir: &Path, output_path: &Path,
is_direct_dependency: bool, );
) -> PathBuf;
fn extract_bundled_libs<'a>( fn extract_bundled_libs<'a>(
&'a self, &'a self,

View File

@ -494,13 +494,17 @@ fn create_dll_import_libs<'a>(
Ok(collate_raw_dylibs(sess, used_libraries)? Ok(collate_raw_dylibs(sess, used_libraries)?
.into_iter() .into_iter()
.map(|(raw_dylib_name, raw_dylib_imports)| { .map(|(raw_dylib_name, raw_dylib_imports)| {
let name_suffix = if is_direct_dependency { "_imports" } else { "_imports_indirect" };
let output_path = tmpdir.join(format!("{raw_dylib_name}{name_suffix}.lib"));
archive_builder_builder.create_dll_import_lib( archive_builder_builder.create_dll_import_lib(
sess, sess,
&raw_dylib_name, &raw_dylib_name,
&raw_dylib_imports, &raw_dylib_imports,
tmpdir, &output_path,
is_direct_dependency, );
)
output_path
}) })
.collect()) .collect())
} }