Add support in upb_proto_library rule for cc_shared_library. Will only work from Bazel 6.3.
PiperOrigin-RevId: 538899911
diff --git a/bazel/upb_proto_library.bzl b/bazel/upb_proto_library.bzl
index 7bcec85..459dc52 100644
--- a/bazel/upb_proto_library.bzl
+++ b/bazel/upb_proto_library.bzl
@@ -290,7 +290,7 @@
cc_info,
]
-def _upb_proto_aspect_impl(target, ctx, generator, cc_provider, file_provider):
+def _upb_proto_aspect_impl(target, ctx, generator, cc_provider, file_provider, provide_cc_shared_library_hints = True):
proto_info = target[ProtoInfo]
files = _compile_upb_protos(ctx, generator, proto_info, proto_info.direct_sources)
deps = ctx.rule.attr.deps + getattr(ctx.attr, "_" + generator)
@@ -301,9 +301,11 @@
if UpbWrappedCcInfo not in target:
fail("Target should have UpbWrappedCcInfo provider")
dep_ccinfos.append(target[UpbWrappedCcInfo].cc_info)
+ name = ctx.rule.attr.name + "." + generator
+ owners = [ctx.label.relative(name)]
cc_info = _cc_library_func(
ctx = ctx,
- name = ctx.rule.attr.name + "." + generator,
+ name = name,
hdrs = files.hdrs,
srcs = files.srcs,
includes = files.includes,
@@ -312,9 +314,11 @@
)
if files.thunks:
+ name_thunks = ctx.rule.attr.name + "." + generator + ".thunks"
+ owners.append(ctx.label.relative(name_thunks))
cc_info_with_thunks = _cc_library_func(
ctx = ctx,
- name = ctx.rule.attr.name + "." + generator + ".thunks",
+ name = name_thunks,
hdrs = [],
srcs = files.thunks,
includes = files.includes,
@@ -329,16 +333,23 @@
wrapped_cc_info = cc_provider(
cc_info = cc_info,
)
- return [
+ providers = [
wrapped_cc_info,
file_provider(srcs = files),
]
+ if provide_cc_shared_library_hints:
+ if hasattr(cc_common, "CcSharedLibraryHintInfo"):
+ providers.append(cc_common.CcSharedLibraryHintInfo(owners = owners))
+ elif hasattr(cc_common, "CcSharedLibraryHintInfo_6_X_constructor_do_not_use"):
+ # This branch can be deleted once 6.X is not supported by upb rules
+ providers.append(cc_common.CcSharedLibraryHintInfo_6_X_constructor_do_not_use(owners = owners))
+ return providers
def upb_proto_library_aspect_impl(target, ctx):
return _upb_proto_aspect_impl(target, ctx, "upb", UpbWrappedCcInfo, _UpbWrappedGeneratedSrcsInfo)
def _upb_proto_reflection_library_aspect_impl(target, ctx):
- return _upb_proto_aspect_impl(target, ctx, "upbdefs", _UpbDefsWrappedCcInfo, _WrappedDefsGeneratedSrcsInfo)
+ return _upb_proto_aspect_impl(target, ctx, "upbdefs", _UpbDefsWrappedCcInfo, _WrappedDefsGeneratedSrcsInfo, provide_cc_shared_library_hints = False)
def _maybe_add(d):
if _is_google3:
@@ -351,6 +362,20 @@
# upb_proto_library() ##########################################################
+def _get_upb_proto_library_aspect_provides():
+ provides = [
+ UpbWrappedCcInfo,
+ _UpbWrappedGeneratedSrcsInfo,
+ ]
+
+ if hasattr(cc_common, "CcSharedLibraryHintInfo"):
+ provides.append(cc_common.CcSharedLibraryHintInfo)
+ elif hasattr(cc_common, "CcSharedLibraryHintInfo_6_X_getter_do_not_use"):
+ # This branch can be deleted once 6.X is not supported by upb rules
+ provides.append(cc_common.CcSharedLibraryHintInfo_6_X_getter_do_not_use)
+
+ return provides
+
upb_proto_library_aspect = aspect(
attrs = _maybe_add({
"_copts": attr.label(
@@ -375,10 +400,7 @@
"_fasttable_enabled": attr.label(default = "//:fasttable_enabled"),
}),
implementation = upb_proto_library_aspect_impl,
- provides = [
- UpbWrappedCcInfo,
- _UpbWrappedGeneratedSrcsInfo,
- ],
+ provides = _get_upb_proto_library_aspect_provides(),
attr_aspects = ["deps"],
fragments = ["cpp"],
toolchains = use_cpp_toolchain(),