Protobuf and gRPC rules for Bazel¶
Bazel rules for building Protobuf and gRPC code and libraries from proto_library targets
Overview¶
These rules provide Protocol Buffers (Protobuf) and gRPC rules for a range of languages and services.
Each supported language ({lang}
below) is generally split into four rule flavours:
{lang}_proto_compile
: Provides generated files from the Protobuf protoc plugin for the language. e.g for C++ this provides the generated*.pb.cc
and*.pb.h
files.{lang}_proto_library
: Provides a language-specific library from the generated Protobufprotoc
plugin outputs, along with necessary dependencies. e.g for C++ this provides a Bazel nativecpp_library
created from the generated*.pb.cc
and*.pb.h
files, with the Protobuf library linked. For languages that do not have a ‘library’ concept, this rule may not exist.{lang}_grpc_compile
: Provides generated files from both the Protobuf and gRPCprotoc
plugins for the language. e.g for C++ this provides the generated*.pb.cc
,*.grpc.pb.cc
,*.pb.h
and*.grpc.pb.h
files.{lang}_grpc_library
: Provides a language-specific library from the generated Protobuf and gRPCprotoc
plugins outputs, along with necessary dependencies. e.g for C++ this provides a Bazel nativecpp_library
created from the generated*.pb.cc
,*.grpc.pb.cc
,*.pb.h
and*.grpc.pb.h
files, with the Protobuf and gRPC libraries linked. For languages that do not have a ‘library’ concept, this rule may not exist.
Therefore, if you are solely interested in the generated source code files, use the {lang}_{proto|grpc}_compile
rules. Otherwise, if you want a ready-to-go library, use the {lang}_{proto|grpc}_library
rules.
Installation¶
Add rules_proto_grpc
to your WORKSPACE
file and then look at the language specific examples linked below:
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "rules_proto_grpc",
sha256 = "fa7a59e0d1527ac69be652407b457ba1cb40700752a3ee6cc2dd25d9cb28bb1a",
strip_prefix = "rules_proto_grpc-3.1.0",
urls = ["https://github.com/rules-proto-grpc/rules_proto_grpc/archive/3.1.0.tar.gz"],
)
load("@rules_proto_grpc//:repositories.bzl", "rules_proto_grpc_toolchains", "rules_proto_grpc_repos")
rules_proto_grpc_toolchains()
rules_proto_grpc_repos()
load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies", "rules_proto_toolchains")
rules_proto_dependencies()
rules_proto_toolchains()
It is recommended that you use the tagged releases for stable rules. Master is intended to be ‘ready-to-use’, but may be unstable at certain periods. To be notified of new releases, you can use GitHub’s ‘Watch Releases Only’ on the repository.
Note: You will also need to follow instructions in the language-specific pages for additional workspace dependencies that may be required.