Teach cc_configure about BAZEL_LINKLIBS env variable
Using this variable is will be possible to specify system libraries that
should be added after default linker flags, after libraries to link, and
after user link flags (i.e. after --linkopt and `linkopts` rule attribute).
Flag separator is `:`, similarly to `BAZEL_LINKOPTS`. Escaping is done by
`%`.
Default value is empty string.
With this it's possible to force Bazel to statically link `libstdc++` by
using:
```
BAZEL_LINKOPTS=-static-libstdc++ BAZEL_LINKLIBS=-l%:libstdc++.a bazel build //foo
```
Fixes https://github.com/bazelbuild/bazel/issues/2840.
Relevant for https://github.com/bazelbuild/bazel/issues/8652.
RELNOTES: Bazel's C++ autoconfiguration now understands `BAZEL_LINKLIBS` environment variable to specify system libraries that should be appended to the link command line.
Closes #8660.
PiperOrigin-RevId: 253946433
diff --git a/tools/cpp/unix_cc_toolchain_config.bzl b/tools/cpp/unix_cc_toolchain_config.bzl
index d7da983..f2b12d9 100644
--- a/tools/cpp/unix_cc_toolchain_config.bzl
+++ b/tools/cpp/unix_cc_toolchain_config.bzl
@@ -854,7 +854,7 @@
iterate_over = "user_link_flags",
expand_if_available = "user_link_flags",
),
- ],
+ ] + ([flag_group(flags = ctx.attr.link_libs)] if ctx.attr.link_libs else []),
),
],
)
@@ -1191,6 +1191,7 @@
"opt_compile_flags": attr.string_list(),
"cxx_flags": attr.string_list(),
"link_flags": attr.string_list(),
+ "link_libs": attr.string_list(),
"opt_link_flags": attr.string_list(),
"unfiltered_compile_flags": attr.string_list(),
"coverage_compile_flags": attr.string_list(),