Protobuf and gRPC rules for Bazel

Bazel rules for building Protobuf and gRPC code and libraries from proto_library targets

Latest Release Buildkite Status GitHub Actions Status Slack Channel

Overview

These rules provide Protocol Buffers (Protobuf) and gRPC rules for a range of languages and services within Bazel. This includes generation of language specific files from protoc and the creation of libraries from these files.

Each supported language ({lang} below) is generally split into four rule types:

  • {lang}_proto_compile: Provides generated files from the Protobuf protoc plugin for the language. For example, for C++ this provides the generated *.pb.cc and *.pb.h files.

  • {lang}_proto_library: Provides a language-specific library from the generated Protobuf protoc plugin outputs, along with necessary dependencies. For example, for C++ this provides a Bazel native cpp_library created from the generated *.pb.cc and *.pb.h files, with the Protobuf library linked.

  • {lang}_grpc_compile: Provides generated files from both the Protobuf and gRPC protoc plugins for the language. For example, 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 gRPC protoc plugins outputs, along with necessary dependencies. For example, for C++ this provides a Bazel native cpp_library created from the generated *.pb.cc, *.grpc.pb.cc, *.pb.h and *.grpc.pb.h files, with the Protobuf and gRPC libraries linked.

Some languages may have variations on these rules, such as when there are multiple gRPC or Protobuf implementations. However, generally you’ll want to use the {lang}_{proto|grpc}_library rules, since these bundle up all the outputs into a library that can easily be used elsewhere in your Bazel project workspace. Alternatively, if you just want the generated source code files, use the {lang}_{proto|grpc}_compile rules instead.

Installation

Add rules_proto_grpc to your WORKSPACE file as shown below and then look at the language specific examples linked in the docs. 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.

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
    name = "rules_proto_grpc",
   sha256 = "7954abbb6898830cd10ac9714fbcacf092299fda00ed2baf781172f545120419",
    strip_prefix = "rules_proto_grpc-3.1.1",
    urls = ["https://github.com/rules-proto-grpc/rules_proto_grpc/archive/3.1.1.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()