From 4c6b4cab4cb02ee356e22f208f47d5462d632720 Mon Sep 17 00:00:00 2001 From: Keith Smiley Date: Mon, 20 Jul 2026 11:14:55 -0700 Subject: [PATCH 1/3] Enable set_soname by default This was already the case for macOS, and doesn't always matter for Linux, but when it does, this being not set is always wrong. If users are overwriting this today with linkopts or post processing, this shouldn't affect them. --- .../toolchain/unix_cc_toolchain_config.bzl | 1 + cc/toolchains/args/soname_flags/BUILD | 33 +++++-------------- 2 files changed, 9 insertions(+), 25 deletions(-) diff --git a/cc/private/toolchain/unix_cc_toolchain_config.bzl b/cc/private/toolchain/unix_cc_toolchain_config.bzl index 3db2bce3d..0ece0d614 100644 --- a/cc/private/toolchain/unix_cc_toolchain_config.bzl +++ b/cc/private/toolchain/unix_cc_toolchain_config.bzl @@ -923,6 +923,7 @@ def _impl(ctx): ) set_install_name_feature = feature( name = "set_soname", + enabled = True, flag_sets = [ flag_set( actions = [ diff --git a/cc/toolchains/args/soname_flags/BUILD b/cc/toolchains/args/soname_flags/BUILD index 304cccecb..d1ccbdd2f 100644 --- a/cc/toolchains/args/soname_flags/BUILD +++ b/cc/toolchains/args/soname_flags/BUILD @@ -3,36 +3,19 @@ load("//cc/toolchains:feature.bzl", "cc_feature") cc_feature( name = "feature", - args = select({ - "//cc/settings:apple_constraint": [":apple_set_install_name"], - "//conditions:default": [], - }), - feature_name = "_soname_flags", # Doesn't override legacy feature, but shouldn't be disabled + args = [":set_soname_args"], + feature_name = "set_soname", # Feature name is important and read by rules_cc visibility = ["//visibility:public"], ) cc_args( - name = "apple_set_install_name", + name = "set_soname_args", actions = ["//cc/toolchains/actions:dynamic_library_link_actions"], - args = ["-Wl,-install_name,@rpath/{runtime_solib_name}"], - format = {"runtime_solib_name": "//cc/toolchains/variables:runtime_solib_name"}, - requires_not_none = "//cc/toolchains/variables:runtime_solib_name", - target_compatible_with = ["//cc/settings:apple_constraint"], -) - -cc_feature( - name = "set_soname_feature", - args = [":set_soname"], - feature_name = "set_soname", - visibility = ["//visibility:public"], -) - -cc_args( - name = "set_soname", - actions = ["//cc/toolchains/actions:dynamic_library_link_actions"], - args = ["-Wl,-soname,{runtime_solib_name}"], + args = select({ + "//cc/settings:apple_constraint": ["-Wl,-install_name,@rpath/{runtime_solib_name}"], + "@platforms//os:linux": ["-Wl,-soname,{runtime_solib_name}"], + "//conditions:default": [], + }), format = {"runtime_solib_name": "//cc/toolchains/variables:runtime_solib_name"}, requires_not_none = "//cc/toolchains/variables:runtime_solib_name", - target_compatible_with = ["@platforms//os:linux"], - visibility = ["//visibility:public"], ) From bb18ac293a5b063880b0c65e81c52bd864f4d371 Mon Sep 17 00:00:00 2001 From: Keith Smiley Date: Mon, 20 Jul 2026 11:40:58 -0700 Subject: [PATCH 2/3] disable for test --- tests/builtins_bzl/cc/cc_shared_library/test/BUILD | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/builtins_bzl/cc/cc_shared_library/test/BUILD b/tests/builtins_bzl/cc/cc_shared_library/test/BUILD index d6949cdfa..30d3ae107 100644 --- a/tests/builtins_bzl/cc/cc_shared_library/test/BUILD +++ b/tests/builtins_bzl/cc/cc_shared_library/test/BUILD @@ -410,7 +410,11 @@ filegroup( cc_shared_library( name = "renamed_so_file", - features = ["windows_export_all_symbols"], + features = [ + # This library is copied to a different basename above. + "-set_soname", + "windows_export_all_symbols", + ], shared_lib_name = "renamed_so_file.so", deps = [ ":direct_so_file_cc_lib2", From e808b8647aed4d40580683e3e35eac81b47c81dd Mon Sep 17 00:00:00 2001 From: Keith Smiley Date: Mon, 20 Jul 2026 11:50:09 -0700 Subject: [PATCH 3/3] split so disable only applies to linux --- cc/toolchains/args/soname_flags/BUILD | 40 +++++++++++++++++++++------ 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/cc/toolchains/args/soname_flags/BUILD b/cc/toolchains/args/soname_flags/BUILD index d1ccbdd2f..1f92f97e4 100644 --- a/cc/toolchains/args/soname_flags/BUILD +++ b/cc/toolchains/args/soname_flags/BUILD @@ -1,21 +1,45 @@ load("//cc/toolchains:args.bzl", "cc_args") load("//cc/toolchains:feature.bzl", "cc_feature") +load("//cc/toolchains:feature_set.bzl", "cc_feature_set") -cc_feature( +cc_feature_set( name = "feature", - args = [":set_soname_args"], + all_of = select({ + "//cc/settings:apple_constraint": [":set_install_name_feature"], + "@platforms//os:linux": [":set_soname_feature"], + "//conditions:default": [], + }), + visibility = ["//visibility:public"], +) + +cc_feature( + name = "set_install_name_feature", + args = [":apple_set_install_name"], + feature_name = "set_install_name", # Doesn't override legacy feature, but shouldn't be disabled, mirrors default toolchain name +) + +cc_args( + name = "apple_set_install_name", + actions = ["//cc/toolchains/actions:dynamic_library_link_actions"], + args = ["-Wl,-install_name,@rpath/{runtime_solib_name}"], + format = {"runtime_solib_name": "//cc/toolchains/variables:runtime_solib_name"}, + requires_not_none = "//cc/toolchains/variables:runtime_solib_name", + target_compatible_with = ["//cc/settings:apple_constraint"], +) + +cc_feature( + name = "set_soname_feature", + args = [":set_soname"], feature_name = "set_soname", # Feature name is important and read by rules_cc visibility = ["//visibility:public"], ) cc_args( - name = "set_soname_args", + name = "set_soname", actions = ["//cc/toolchains/actions:dynamic_library_link_actions"], - args = select({ - "//cc/settings:apple_constraint": ["-Wl,-install_name,@rpath/{runtime_solib_name}"], - "@platforms//os:linux": ["-Wl,-soname,{runtime_solib_name}"], - "//conditions:default": [], - }), + args = ["-Wl,-soname,{runtime_solib_name}"], format = {"runtime_solib_name": "//cc/toolchains/variables:runtime_solib_name"}, requires_not_none = "//cc/toolchains/variables:runtime_solib_name", + target_compatible_with = ["@platforms//os:linux"], + visibility = ["//visibility:public"], )