Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions rs_bindings_from_cc/bazel_support/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ bzl_library(
":rust_bindings_from_cc_cli_flag_aspect_hint",
":rust_bindings_from_cc_utils_bzl",
"//features:crubit_feature_hint_bzl",
"//net/proto2/compiler/stubby/cc/build_defs:cc_stubby_rust_aspect_bzl",
"@bazel_skylib//lib:collections",
"@protobuf//rust/bazel:aspects_bzl",
"@rules_cc//cc/common",
Expand Down Expand Up @@ -125,13 +126,26 @@ bzl_library(
srcs = ["rust_bindings_from_cc_cli_flag_aspect_hint.bzl"],
)

bzl_library(
name = "make_additional_rust_srcs_provider_bzl",
srcs = ["make_additional_rust_srcs_provider.bzl"],
visibility =
package_default_visibility() + [
],
deps = [
":providers_bzl",
"@rules_rust//rust/private:providers_bzl",
],
)

bzl_library(
name = "additional_rust_srcs_for_crubit_bindings_aspect_hint_bzl",
srcs = ["additional_rust_srcs_for_crubit_bindings_aspect_hint.bzl"],
visibility =
package_default_visibility() + [
],
deps = [
":make_additional_rust_srcs_provider_bzl",
":providers_bzl",
":rust_bindings_from_cc_aspect",
"@bazel_skylib//lib:collections",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,10 @@ want to implement, cannot conflict with the future Crubit bindings.

"""

load("@rules_cc//cc/common:cc_info.bzl", "CcInfo")

# buildifier: disable=bzl-visibility
load("@rules_rust//rust/private:providers.bzl", "BuildInfo", "CrateInfo", "DepInfo", "DepVariantInfo")
load("@bazel_skylib//lib:collections.bzl", "collections")
load("@@//rs_bindings_from_cc/bazel_support:providers.bzl", "AdditionalRustSrcsProviderInfo", "RustBindingsFromCcInfo")
load(
"@@//rs_bindings_from_cc/bazel_support:make_additional_rust_srcs_provider.bzl",
"make_additional_rust_srcs_provider",
)
load(
"@@//rs_bindings_from_cc/bazel_support:rust_bindings_from_cc_aspect.bzl",
"rust_bindings_from_cc_aspect",
Expand All @@ -67,18 +65,6 @@ visibility([
# <internal link> end
])

def make_additional_rust_srcs_provider(srcs, namespace_path, deps, cc_deps, cc_support_deps = []):
return AdditionalRustSrcsProviderInfo(
srcs = srcs,
namespace_path = namespace_path,
deps = _get_additional_rust_deps_variant_info(deps),
cc_deps = _get_additional_cc_deps_variant_info(cc_deps),
cc_support_deps = [
dep[CcInfo]
for dep in cc_support_deps
],
)

def _additional_rust_srcs_for_crubit_bindings_impl(ctx):
return [make_additional_rust_srcs_provider(
ctx.attr.srcs,
Expand Down Expand Up @@ -158,57 +144,4 @@ def additional_rust_srcs_for_crubit_bindings(
**kwargs
)

def _create_dep_variant_info(dep):
return DepVariantInfo(
crate_info = dep[CrateInfo] if CrateInfo in dep else None,
dep_info = dep[DepInfo] if DepInfo in dep else None,
build_info = dep[BuildInfo] if BuildInfo in dep else None,
cc_info = dep[CcInfo] if CcInfo in dep else None,
)

def _get_additional_rust_deps_variant_info(deps_list):
"""Returns DepVariantInfo of `deps` associated with the `_target`.

Args:
deps_list: label list of deps.

Returns:
A list of `DepVariantInfo` of the given `deps`.
"""
return [
_create_dep_variant_info(dep)
for dep in deps_list
]

def _get_additional_cc_deps_variant_info(cc_deps_list):
"""Returns DepVariantInfo of `cc_deps` associated with the `_target`.

Args:
cc_deps_list: label list of cc_deps.

Returns:
A list of `DepVariantInfo` of the given `cc_deps`.
"""
additional_cc_deps = []
for cc_dep in cc_deps_list:
if RustBindingsFromCcInfo not in cc_dep:
fail("cc_dep (%s) does not provide RustBindingsFromCcInfo" % cc_dep)
if cc_dep[RustBindingsFromCcInfo].dep_variant_info:
additional_cc_deps.extend([cc_dep[RustBindingsFromCcInfo].dep_variant_info])
return collections.uniq(additional_cc_deps)

def get_additional_rust_deps(aspect_ctx):
"""Returns DepVariantInfo of `deps` and `cc_deps` associated with the `_target`.

Args:
aspect_ctx: The ctx from an aspect_hint.

Returns:
A list of `DepVariantInfo` of the given `deps` and `cc_deps`.
"""
additional_rust_deps = []
for hint in aspect_ctx.rule.attr.aspect_hints:
if AdditionalRustSrcsProviderInfo in hint:
additional_rust_deps.extend(hint[AdditionalRustSrcsProviderInfo].deps)
additional_rust_deps.extend(hint[AdditionalRustSrcsProviderInfo].cc_deps)
return collections.uniq(additional_rust_deps)
# Removed duplicate rules_rust and `make_additional_rust_srcs_provider` helpers.
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# 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

"""Helper for constructing AdditionalRustSrcsProviderInfo."""

load("@rules_cc//cc/common:cc_info.bzl", "CcInfo")
load(
"@rules_rust//rust/private:providers.bzl",
"BuildInfo",
"CrateInfo",
"DepInfo",
"DepVariantInfo",
)
load("@bazel_skylib//lib:collections.bzl", "collections")
load(
"@@//rs_bindings_from_cc/bazel_support:providers.bzl",
"AdditionalRustSrcsProviderInfo",
"RustBindingsFromCcInfo",
)

visibility([
"//net/proto2/compiler/stubby/cc/...",
"//rs_bindings_from_cc/bazel_support/...",
])

def _create_dep_variant_info(dep):
return DepVariantInfo(
crate_info = dep[CrateInfo] if CrateInfo in dep else None,
dep_info = dep[DepInfo] if DepInfo in dep else None,
build_info = dep[BuildInfo] if BuildInfo in dep else None,
cc_info = dep[CcInfo] if CcInfo in dep else None,
)

def _get_additional_rust_deps_variant_info(deps_list):
"""Returns DepVariantInfo of `deps` associated with the `_target`.

Args:
deps_list: label list of deps.

Returns:
A list of `DepVariantInfo` of the given `deps`.
"""
return [
_create_dep_variant_info(dep)
for dep in deps_list
]

def _get_additional_cc_deps_variant_info(cc_deps_list):
"""Returns DepVariantInfo of `cc_deps` associated with the `_target`.

Args:
cc_deps_list: label list of cc_deps.

Returns:
A list of `DepVariantInfo` of the given `cc_deps`.
"""
additional_cc_deps = []
for cc_dep in cc_deps_list:
if RustBindingsFromCcInfo not in cc_dep:
fail("cc_dep (%s) does not provide RustBindingsFromCcInfo" % cc_dep)
if cc_dep[RustBindingsFromCcInfo].dep_variant_info:
additional_cc_deps.extend([cc_dep[RustBindingsFromCcInfo].dep_variant_info])
return collections.uniq(additional_cc_deps)

def make_additional_rust_srcs_provider(srcs, namespace_path, deps, cc_deps, cc_support_deps = []):
return AdditionalRustSrcsProviderInfo(
srcs = srcs,
namespace_path = namespace_path,
deps = _get_additional_rust_deps_variant_info(deps),
cc_deps = _get_additional_cc_deps_variant_info(cc_deps),
cc_support_deps = [
dep[CcInfo]
for dep in cc_support_deps
],
)
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ projection. See <internal link> and <internal link> for
more context.
"""

load("//net/proto2/compiler/stubby/cc/build_defs:cc_stubby_rust_aspect.bzl", "rust_stubby_aspect")
load("@rules_cc//cc/common:cc_common.bzl", "cc_common")
load("@rules_cc//cc/common:cc_info.bzl", "CcInfo")
load("@bazel_skylib//lib:collections.bzl", "collections")
Expand Down Expand Up @@ -406,8 +407,8 @@ rust_bindings_from_cc_aspect = aspect(
"implicit_cc_deps",
"implicit_rust_deps",
],
requires = [rust_cc_proto_library_aspect],
required_aspect_providers = [CcInfo],
requires = [rust_cc_proto_library_aspect, rust_stubby_aspect],
required_aspect_providers = [[CcInfo], [AdditionalRustSrcsProviderInfo]],
attrs = bindings_attrs | {
"_std": attr.label(
default = "//support/public:cc_std",
Expand Down