blob: feb29292c3d67e87edb1c9ddaf2ab414cc1647db [file] [log] [blame]
"""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,
]