From ab91d7e73d5e0c87a9b1c11c6cb45c00d5668437 Mon Sep 17 00:00:00 2001 From: Peng Xiao Date: Thu, 19 Mar 2026 17:31:04 +0800 Subject: [PATCH 1/3] 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 776dce73b4..7ab3499c4a 100644 --- a/rust/private/rustc.bzl +++ b/rust/private/rustc.bzl @@ -2252,9 +2252,15 @@ def _portable_link_flags(lib, use_pic, ambiguous_libs, get_lib_name, for_windows "-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 243de9026dbe4749d55484b165fe271322992715 Mon Sep 17 00:00:00 2001 From: Peng Xiao Date: Thu, 19 Mar 2026 20:02:40 +0800 Subject: [PATCH 2/3] 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 7ab3499c4a..0a31ca2531 100644 --- a/rust/private/rustc.bzl +++ b/rust/private/rustc.bzl @@ -2252,8 +2252,13 @@ def _portable_link_flags(lib, use_pic, ambiguous_libs, get_lib_name, for_windows "-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 d09a52f1b14b430741564efdb85bf0226cfd03fe Mon Sep 17 00:00:00 2001 From: Peng Xiao Date: Mon, 23 Mar 2026 15:09:04 +0800 Subject: [PATCH 3/3] 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 0a31ca2531..05ad7205ce 100644 --- a/rust/private/rustc.bzl +++ b/rust/private/rustc.bzl @@ -2252,10 +2252,10 @@ def _portable_link_flags(lib, use_pic, ambiguous_libs, get_lib_name, for_windows "-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: