It is strongly recommended that proto rules use aspects going forward, because it avoids the need to specify the dependency graph N times (one per language). proto_library() can specify the dependency graph once, and then any number of languages can have lang_proto_library() rules that reuse the unified graph.
More info: https://blog.bazel.build/2017/02/27/protocol-buffers.html On Wednesday, April 19, 2023 at 8:50:20 AM UTC-7 [email protected] wrote: > Thanks Josh! I will have a look at proto_common and see what I can glean > from it. > > More generally, is there any guidance around how/whether proto codegen > rules should use aspects? My current rule implementation does not use > aspects at all if I'm understanding correctly - I'm just forming > `--proto_path` / `-I` args to protoc based on the transitive_proto_paths of > direct dep ProtoInfo (code > <https://github.com/bduffany/protoc-gen-protobufjs/blob/45971791d8bdfa1431b13063372a0d53495a0407/rules.bzl#L39-L48>), > > and it seems to work. Is there an advantage to using aspects? > > Brandon > > On Wednesday, April 19, 2023 at 11:09:23 AM UTC-4 [email protected] > wrote: > >> Hi Brandon, >> >> The proto compiler doesn't generally allow what you are asking for. It >> always wants to see the full closure of .proto files. >> >> But if you are writing for Bazel, you shouldn't have to worry about any >> of that. As long as you are on Bazel >=5.3, you can use proto_common to >> handle most of the hard work for you when writing proto rules with aspects. >> proto_common makes it easy to write rules that work like the built-in rules >> cc_proto_library(), java_proto_library(), etc. >> >> There don't seem to be a lot of good documentation or examples for this >> right now. You could take a look at my in-progress CL that migrates to >> using proto_common: >> https://github.com/protocolbuffers/upb/pull/1254/files#diff-6816023f8495e20887edd8410f0348dbf79b27761cd5cf44cbfa6f72389274af >> >> Josh >> On Tuesday, April 18, 2023 at 5:10:15 PM UTC-7 [email protected] >> wrote: >> >>> I'm writing a protoc plugin protoc-gen-protobufjs >>> <https://github.com/bduffany/protoc-gen-protobufjs> that is intended as >>> a faster version of protobufjs-cli and which is a better fit for Bazel. >>> >>> I have gotten it working, and am now trying to optimize the build rules >>> a little bit. My understanding is that when compiling a proto file, protoc >>> needs to locate all of the file's transitive dependencies, and gives an >>> error if it can't find one of them. >>> >>> Please correct me if I'm wrong (I'm not a proto expert), but my >>> understanding is that I just need to know about the directly imported >>> protos so that I can tell whether a particular type reference is a message >>> or an enum. So I am wondering if there is a way to tell protoc to not fail >>> if it can't find an indirect import, and instead continue code generation >>> anyway. >>> >>> Thanks! >>> >>> Brandon >>> >> -- You received this message because you are subscribed to the Google Groups "Protocol Buffers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/protobuf/48adfc97-de29-4440-98f8-9c0dbf2c17ban%40googlegroups.com.
