protobuf/bazel/private/upb_proto_library_internal/rule.bzl

40 lines
1.2 KiB
Python

"""Internal rule implementation for upb_*_proto_library() rules."""
def _filter_none(elems):
out = []
for elem in elems:
if elem:
out.append(elem)
return out
def upb_proto_rule_impl(ctx, cc_info_provider, srcs_provider):
"""An implementation for upb_*proto_library() rules.
Args:
ctx: The rule `ctx` argument
cc_info_provider: The provider containing a wrapped CcInfo that will be exposed to users who
depend on this rule.
srcs_provider: The provider containing the generated source files. This will be used to make
the DefaultInfo return the source files.
Returns:
Providers for this rule.
"""
if len(ctx.attr.deps) != 1:
fail("only one deps dependency allowed.")
dep = ctx.attr.deps[0]
srcs = dep[srcs_provider].srcs
cc_info = dep[cc_info_provider].cc_info
lib = cc_info.linking_context.linker_inputs.to_list()[0].libraries[0]
files = _filter_none([
lib.static_library,
lib.pic_static_library,
lib.dynamic_library,
])
return [
DefaultInfo(files = depset(files + srcs.hdrs + srcs.srcs)),
srcs,
cc_info,
]