blob: 31f10f55f9f91b2a6b8961fec06304b87fa4cd3e [file] [log] [blame]
# Part of the Crubit project, under the Apache License v2.0 with LLVM
# Exceptions. See /LICENSE for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
diff --git a/rust/private/rust.bzl b/rust/private/rust.bzl
index 1a3c4ebf..0a1c2f2c 100644
--- a/rust/private/rust.bzl
+++ b/rust/private/rust.bzl
@@ -14,7 +14,17 @@
"""Rust rule implementations"""
-load("@bazel_skylib//lib:paths.bzl", "paths")
+load(
+ "@@//rs_bindings_from_cc/bazel_support:rust_bindings_from_cc_aspect.bzl",
+ "rust_bindings_from_cc_aspect",
+)
+load(
+ "@@//bazel/rules_rust:collect_deps.bzl",
+ "collect_transformed_deps",
+ "get_cc_import_namespace_variable",
+ "get_namespace_json_files",
+)
+load("@bazel_skylib//lib:paths.bzl", "paths")
load("//rust/private:common.bzl", "rust_common")
load("//rust/private:providers.bzl", "BuildInfo")
load("//rust/private:rustc.bzl", "rustc_compile_action")
@@ -305,7 +315,7 @@ def _rust_library_common(ctx, crate_type):
output = rust_lib,
metadata = rust_metadata,
edition = get_edition(ctx.attr, toolchain, ctx.label),
- rustc_env = ctx.attr.rustc_env,
+ rustc_env = ctx.attr.rustc_env | get_cc_import_namespace_variable(ctx),
rustc_env_files = ctx.files.rustc_env_files,
is_test = False,
compile_data = depset(ctx.files.compile_data),
@@ -352,7 +362,7 @@ def _rust_binary_impl(ctx):
aliases = ctx.attr.aliases,
output = output,
edition = get_edition(ctx.attr, toolchain, ctx.label),
- rustc_env = ctx.attr.rustc_env,
+ rustc_env = ctx.attr.rustc_env | get_cc_import_namespace_variable(ctx),
rustc_env_files = ctx.files.rustc_env_files,
is_test = False,
compile_data = depset(ctx.files.compile_data),
@@ -376,7 +386,7 @@ def _rust_test_impl(ctx):
toolchain = find_toolchain(ctx)
crate_type = "bin"
- deps = transform_deps(ctx.attr.deps)
+ deps = collect_transformed_deps(ctx)
proc_macro_deps = transform_deps(ctx.attr.proc_macro_deps + get_import_macro_deps(ctx))
if ctx.attr.crate:
@@ -418,7 +428,7 @@ def _rust_test_impl(ctx):
aliases = ctx.attr.aliases,
output = output,
edition = crate.edition,
- rustc_env = rustc_env,
+ rustc_env = rustc_env | get_cc_import_namespace_variable(ctx),
rustc_env_files = rustc_env_files,
is_test = True,
compile_data = compile_data,
@@ -454,10 +464,10 @@ def _rust_test_impl(ctx):
aliases = ctx.attr.aliases,
output = output,
edition = get_edition(ctx.attr, toolchain, ctx.label),
- rustc_env = ctx.attr.rustc_env,
+ rustc_env = ctx.attr.rustc_env | get_cc_import_namespace_variable(ctx),
rustc_env_files = ctx.files.rustc_env_files,
is_test = True,
- compile_data = depset(ctx.files.compile_data),
+ compile_data = depset(ctx.files.compile_data + get_namespace_json_files(ctx)),
compile_data_targets = depset(ctx.attr.compile_data),
owner = ctx.label,
)
@@ -614,6 +620,10 @@ _common_attrs = {
"""),
allow_files = True,
),
+ "cc_deps": attr.label_list(
+ aspects = [rust_bindings_from_cc_aspect],
+ default = []
+ ),
"deps": attr.label_list(
doc = dedent("""\
List of other libraries to be linked to this library target.