Use C++ environment variables when constructing link command line (#252)
* Use C++ environment variables when constructing link command line
This PR makes sure that rustc action also takes declared environment
variables from the C++ toolchain when constructing the action. This way
the C++ toolchain can start using more environment variables without
breaking rust.
* Fix iterating depset
diff --git a/rust/private/legacy_cc_starlark_api_shim.bzl b/rust/private/legacy_cc_starlark_api_shim.bzl
index 3625d44..a33596e 100644
--- a/rust/private/legacy_cc_starlark_api_shim.bzl
+++ b/rust/private/legacy_cc_starlark_api_shim.bzl
@@ -13,13 +13,7 @@
A depset[File]
"""
libraries_to_link = dep[CcInfo].linking_context.libraries_to_link
-
- # Remove `if` line once Bazel 0.27 is used
- # (https://github.com/bazelbuild/bazel/issues/8118)
- if type(libraries_to_link) == type(depset()):
- libraries_to_link = libraries_to_link.to_list()
-
- return depset([_get_preferred_artifact(lib) for lib in libraries_to_link])
+ return depset([_get_preferred_artifact(lib) for lib in libraries_to_link.to_list()])
def _get_preferred_artifact(library_to_link):
return (
diff --git a/rust/private/rustc.bzl b/rust/private/rustc.bzl
index 7856ab8..67f2071 100644
--- a/rust/private/rustc.bzl
+++ b/rust/private/rustc.bzl
@@ -165,12 +165,17 @@
action_name = CPP_LINK_EXECUTABLE_ACTION_NAME,
variables = link_variables,
)
+ link_env = cc_common.get_environment_variables(
+ feature_configuration = feature_configuration,
+ action_name = CPP_LINK_EXECUTABLE_ACTION_NAME,
+ variables = link_variables,
+ )
ld = cc_common.get_tool_for_action(
feature_configuration = feature_configuration,
action_name = CPP_LINK_EXECUTABLE_ACTION_NAME,
)
- return ld, link_args
+ return ld, link_args, link_env
def rustc_compile_action(
ctx,
@@ -246,7 +251,7 @@
# Link!
rpaths = _compute_rpaths(toolchain, output_dir, dep_info)
- ld, link_args = _get_linker_and_args(ctx, rpaths)
+ ld, link_args, link_env = _get_linker_and_args(ctx, rpaths)
args.add("--codegen=linker=" + ld)
args.add_joined("--codegen", link_args, join_with = " ", format_joined = "link-args=%s")
@@ -289,11 +294,14 @@
toolchain.rustc.path,
)
+ env = _get_rustc_env(ctx, toolchain)
+ env.update(link_env)
+
ctx.actions.run_shell(
command = command,
inputs = compile_inputs,
outputs = [crate_info.output],
- env = _get_rustc_env(ctx, toolchain),
+ env = env,
arguments = [args],
mnemonic = "Rustc",
progress_message = "Compiling Rust {} {} ({} files)".format(crate_info.type, ctx.label.name, len(crate_info.srcs)),