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