diff --git a/src/librustc_codegen_ssa/back/link.rs b/src/librustc_codegen_ssa/back/link.rs index 1e9559f59f1de..afff061468bc3 100644 --- a/src/librustc_codegen_ssa/back/link.rs +++ b/src/librustc_codegen_ssa/back/link.rs @@ -330,6 +330,7 @@ fn link_rlib<'a, B: ArchiveBuilder<'a>>( match lib.kind { NativeLibKind::StaticBundle => {} NativeLibKind::StaticNoBundle + | NativeLibKind::Dylib | NativeLibKind::Framework | NativeLibKind::RawDylib | NativeLibKind::Unspecified => continue, @@ -866,7 +867,9 @@ fn print_native_static_libs(sess: &Session, all_native_libs: &[NativeLib]) { .filter_map(|lib| { let name = lib.name?; match lib.kind { - NativeLibKind::StaticNoBundle | NativeLibKind::Unspecified => { + NativeLibKind::StaticNoBundle + | NativeLibKind::Dylib + | NativeLibKind::Unspecified => { if sess.target.target.options.is_like_msvc { Some(format!("{}.lib", name)) } else { @@ -1648,7 +1651,7 @@ fn add_local_native_libraries( None => continue, }; match lib.kind { - NativeLibKind::Unspecified => cmd.link_dylib(name), + NativeLibKind::Dylib | NativeLibKind::Unspecified => cmd.link_dylib(name), NativeLibKind::Framework => cmd.link_framework(name), NativeLibKind::StaticNoBundle => cmd.link_staticlib(name), NativeLibKind::StaticBundle => cmd.link_whole_staticlib(name, &search_path), @@ -1984,7 +1987,7 @@ fn add_upstream_native_libraries( continue; } match lib.kind { - NativeLibKind::Unspecified => cmd.link_dylib(name), + NativeLibKind::Dylib | NativeLibKind::Unspecified => cmd.link_dylib(name), NativeLibKind::Framework => cmd.link_framework(name), NativeLibKind::StaticNoBundle => { // Link "static-nobundle" native libs only if the crate they originate from diff --git a/src/librustc_codegen_ssa/base.rs b/src/librustc_codegen_ssa/base.rs index c6ee43a94c398..ed5448ca8bac4 100644 --- a/src/librustc_codegen_ssa/base.rs +++ b/src/librustc_codegen_ssa/base.rs @@ -896,7 +896,7 @@ pub fn provide_both(providers: &mut Providers<'_>) { .native_libraries(krate) .iter() .filter(|lib| { - if lib.kind != NativeLibKind::Unspecified { + if !matches!(lib.kind, NativeLibKind::Dylib | NativeLibKind::Unspecified) { return false; } let cfg = match lib.cfg { diff --git a/src/librustc_metadata/native_libs.rs b/src/librustc_metadata/native_libs.rs index a822aec817f00..68ad987065710 100644 --- a/src/librustc_metadata/native_libs.rs +++ b/src/librustc_metadata/native_libs.rs @@ -67,7 +67,7 @@ impl ItemLikeVisitor<'tcx> for Collector<'tcx> { lib.kind = match &*kind.as_str() { "static" => NativeLibKind::StaticBundle, "static-nobundle" => NativeLibKind::StaticNoBundle, - "dylib" => NativeLibKind::Unspecified, + "dylib" => NativeLibKind::Dylib, "framework" => NativeLibKind::Framework, "raw-dylib" => NativeLibKind::RawDylib, k => { diff --git a/src/librustc_metadata/rmeta/decoder/cstore_impl.rs b/src/librustc_metadata/rmeta/decoder/cstore_impl.rs index 6b8072ec49ab5..1b168bf01178c 100644 --- a/src/librustc_metadata/rmeta/decoder/cstore_impl.rs +++ b/src/librustc_metadata/rmeta/decoder/cstore_impl.rs @@ -247,7 +247,9 @@ pub fn provide(providers: &mut Providers<'_>) { // resolve! Does this work? Unsure! That's what the issue is about *providers = Providers { is_dllimport_foreign_item: |tcx, id| match tcx.native_library_kind(id) { - Some(NativeLibKind::Unspecified | NativeLibKind::RawDylib) => true, + Some(NativeLibKind::Dylib | NativeLibKind::RawDylib | NativeLibKind::Unspecified) => { + true + } _ => false, }, is_statically_included_foreign_item: |tcx, id| match tcx.native_library_kind(id) { diff --git a/src/librustc_session/config.rs b/src/librustc_session/config.rs index 405a058ffab60..1aac639f9236e 100644 --- a/src/librustc_session/config.rs +++ b/src/librustc_session/config.rs @@ -1463,7 +1463,7 @@ fn parse_libs( let kind = parts.next().unwrap(); let (name, kind) = match (parts.next(), kind) { (None, name) => (name, None), - (Some(name), "dylib") => (name, Some(NativeLibKind::Unspecified)), + (Some(name), "dylib") => (name, Some(NativeLibKind::Dylib)), (Some(name), "framework") => (name, Some(NativeLibKind::Framework)), (Some(name), "static") => (name, Some(NativeLibKind::StaticBundle)), (Some(name), "static-nobundle") => (name, Some(NativeLibKind::StaticNoBundle)), diff --git a/src/librustc_session/utils.rs b/src/librustc_session/utils.rs index 758a00ecdf612..b97308c22cb7d 100644 --- a/src/librustc_session/utils.rs +++ b/src/librustc_session/utils.rs @@ -18,11 +18,14 @@ pub enum NativeLibKind { /// Static library (e.g. `libfoo.a` on Linux or `foo.lib` on Windows/MSVC) included /// when linking a final binary, but also included when archiving an rlib. StaticBundle, - /// Windows dynamic library (`foo.dll`) without a corresponding import library. + /// Dynamic library (e.g. `libfoo.so` on Linux) + /// or an import library corresponding to a dynamic library (e.g. `foo.lib` on Windows/MSVC). + Dylib, + /// Dynamic library (e.g. `foo.dll` on Windows) without a corresponding import library. RawDylib, /// A macOS-specific kind of dynamic libraries. Framework, - /// The library kind wasn't specified, dynamic linking is currently preferred. + /// The library kind wasn't specified, `Dylib` is currently used as a default. Unspecified, }