mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 06:44:35 +00:00
Move temp file name generation out of the create_dll_import_lib method
This commit is contained in:
parent
ba5ff07532
commit
ee89db9b17
@ -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");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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,
|
||||||
|
@ -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())
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user