From 79240637735b8e98f5b37ea4c11465d555327b88 Mon Sep 17 00:00:00 2001 From: Peng Xiao Date: Thu, 19 Mar 2026 17:31:04 +0800 Subject: [PATCH 1/4] fix link opts of suffix versioned libs --- rust/private/rustc.bzl | 12 +++++++++--- .../versioned_libs_analysis_test.bzl | 15 +++------------ 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/rust/private/rustc.bzl b/rust/private/rustc.bzl index d12900cb28..11c348479f 100644 --- a/rust/private/rustc.bzl +++ b/rust/private/rustc.bzl @@ -2317,9 +2317,15 @@ def portable_link_flags( "-Clink-arg=-l{}".format(get_lib_name(artifact)), ] elif _is_dylib(lib): - return [ - "-ldylib=%s" % get_lib_name(artifact), - ] + lib_file_name = artifact.basename + if lib_file_name.startswith("lib") and lib_file_name.endswith(".so"): + return [ + "-ldylib=%s" % get_lib_name(artifact), + ] + else: + return [ + "-Clink-arg=-l:{}".format(lib_file_name), + ] return [] diff --git a/test/unit/versioned_libs/versioned_libs_analysis_test.bzl b/test/unit/versioned_libs/versioned_libs_analysis_test.bzl index 4545b14e13..d396a8f1ce 100644 --- a/test/unit/versioned_libs/versioned_libs_analysis_test.bzl +++ b/test/unit/versioned_libs/versioned_libs_analysis_test.bzl @@ -5,7 +5,7 @@ load("@bazel_skylib//rules:copy_file.bzl", "copy_file") load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_import") load("//rust:defs.bzl", "rust_shared_library") -LIBNAMES = ["sterling", "cheryl", "lana", "pam", "malory", "cyril"] +LIBNAMES = ["sterling", "lana", "pam", "malory", "cyril"] def _is_in_argv(argv, version = None): return any(["-ldylib={}{}".format(name, version or "") in argv for name in LIBNAMES]) @@ -33,7 +33,7 @@ def _suffix_version_test_impl(ctx): tut = analysistest.target_under_test(env) argv = tut.actions[0].argv - asserts.true(env, _is_in_argv(argv)) + asserts.true(env, "-Clink-arg=-l:libcheryl.so.3.8" in argv) return analysistest.end(env) @@ -68,7 +68,7 @@ def _test_linux(): name = "linux_suffix_version", srcs = ["a.rs"], edition = "2018", - deps = [":import_libcheryl.so.3.8", ":import_libcheryl.so"], + deps = [":import_libcheryl.so.3.8"], target_compatible_with = ["@platforms//os:linux"], ) cc_import( @@ -80,15 +80,6 @@ def _test_linux(): srcs = ["b.c"], linkshared = True, ) - cc_import( - name = "import_libcheryl.so", - shared_library = "libcheryl.so", - ) - copy_file( - name = "copy_unversioned", - src = ":libcheryl.so.3.8", - out = "libcheryl.so", - ) suffix_version_test( name = "linux_suffix_version_test", target_under_test = ":linux_suffix_version", From 26d3839a47da94a54e9d53925165bc2f3e763a74 Mon Sep 17 00:00:00 2001 From: Peng Xiao Date: Thu, 19 Mar 2026 20:02:40 +0800 Subject: [PATCH 2/4] revert change for windows & macos --- rust/private/rustc.bzl | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/rust/private/rustc.bzl b/rust/private/rustc.bzl index 11c348479f..2b31783a76 100644 --- a/rust/private/rustc.bzl +++ b/rust/private/rustc.bzl @@ -2317,8 +2317,13 @@ def portable_link_flags( "-Clink-arg=-l{}".format(get_lib_name(artifact)), ] elif _is_dylib(lib): - lib_file_name = artifact.basename - if lib_file_name.startswith("lib") and lib_file_name.endswith(".so"): + if for_windows or for_darwin: + use_lib_name = True + else: + lib_file_name = artifact.basename + use_lib_name = (lib_file_name.startswith("lib") and lib_file_name.endswith(".so")) + + if use_lib_name: return [ "-ldylib=%s" % get_lib_name(artifact), ] From f04eea0318b3c03c4cd67b50a0930b8532d7d324 Mon Sep 17 00:00:00 2001 From: Peng Xiao Date: Mon, 23 Mar 2026 15:09:04 +0800 Subject: [PATCH 3/4] address buildifier --- rust/private/rustc.bzl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/private/rustc.bzl b/rust/private/rustc.bzl index 2b31783a76..39dcd595f3 100644 --- a/rust/private/rustc.bzl +++ b/rust/private/rustc.bzl @@ -2317,10 +2317,10 @@ def portable_link_flags( "-Clink-arg=-l{}".format(get_lib_name(artifact)), ] elif _is_dylib(lib): + lib_file_name = artifact.basename if for_windows or for_darwin: use_lib_name = True else: - lib_file_name = artifact.basename use_lib_name = (lib_file_name.startswith("lib") and lib_file_name.endswith(".so")) if use_lib_name: From 0ac402c8c2bf49d510abbcd5fe50e027be5874d0 Mon Sep 17 00:00:00 2001 From: Peng Xiao Date: Fri, 17 Apr 2026 14:00:34 +0800 Subject: [PATCH 4/4] fix conflict --- rust/private/rustc.bzl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/rust/private/rustc.bzl b/rust/private/rustc.bzl index 39dcd595f3..03c979515b 100644 --- a/rust/private/rustc.bzl +++ b/rust/private/rustc.bzl @@ -2252,6 +2252,7 @@ def portable_link_flags( use_pic, ambiguous_libs, get_lib_name, + for_windows = False, for_darwin = False, flavor_msvc = False): """_summary_ @@ -2261,6 +2262,7 @@ def portable_link_flags( use_pic (_type_): _description_ ambiguous_libs (_type_): _description_ get_lib_name (_type_): _description_ + for_windows (bool, optional): _description_. Defaults to False. for_darwin (bool, optional): _description_. Defaults to False. flavor_msvc (bool, optional): _description_. Defaults to False. @@ -2353,7 +2355,7 @@ def _make_link_flags_windows(make_link_flags_args, flavor_msvc, use_direct_drive ]) elif include_link_flags: get_lib_name = get_lib_name_for_windows if flavor_msvc else get_lib_name_default - ret.extend(portable_link_flags(lib, use_pic, ambiguous_libs, get_lib_name, flavor_msvc = flavor_msvc)) + ret.extend(portable_link_flags(lib, use_pic, ambiguous_libs, get_lib_name, for_windows = True, flavor_msvc = flavor_msvc)) # Windows toolchains can inherit POSIX defaults like -pthread from C deps, # which fails to link with the MinGW/LLD toolchain. Drop them here.