| """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, |
| ] |