about summary refs log tree commit diff
diff options
context:
space:
mode:
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>2024-01-24 01:50:04 +0300
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>2024-01-24 01:51:43 +0300
commit03f23c1a2fd36b33820750ddf41246ad322baef7 (patch)
treebae2f1140edde529c161fbd164cbe3e4d4b2cae4
parent1b8e871f1c3b2aca174ac1a4d46613355a956fcc (diff)
downloadrust-03f23c1a2fd36b33820750ddf41246ad322baef7.tar.gz
rust-03f23c1a2fd36b33820750ddf41246ad322baef7.zip
linker: Fix Rust dylib crate extension on windows-msvc
-rw-r--r--compiler/rustc_codegen_ssa/src/back/link.rs6
1 files changed, 5 insertions, 1 deletions
diff --git a/compiler/rustc_codegen_ssa/src/back/link.rs b/compiler/rustc_codegen_ssa/src/back/link.rs
index e3b4189b3f5..f098fc9cb59 100644
--- a/compiler/rustc_codegen_ssa/src/back/link.rs
+++ b/compiler/rustc_codegen_ssa/src/back/link.rs
@@ -2866,7 +2866,11 @@ fn add_dynamic_crate(cmd: &mut dyn Linker, sess: &Session, cratepath: &Path) {
     if let Some(dir) = parent {
         cmd.include_path(&rehome_sysroot_lib_dir(sess, dir));
     }
-    let stem = cratepath.file_stem().unwrap().to_str().unwrap();
+    // "<dir>/name.dll -> name.dll" on windows-msvc
+    // "<dir>/name.dll -> name" on windows-gnu
+    // "<dir>/libname.<ext> -> name" elsewhere
+    let stem = if sess.target.is_like_msvc { cratepath.file_name() } else { cratepath.file_stem() };
+    let stem = stem.unwrap().to_str().unwrap();
     // Convert library file-stem into a cc -l argument.
     let prefix = if stem.starts_with("lib") && !sess.target.is_like_windows { 3 } else { 0 };
     cmd.link_dylib_by_name(&stem[prefix..], false, true);