blob: d1860268e309eeedcd638e7244380b56603fb0f1 [file]
:author: rules_proto_grpc
:description: Bazel rules for building Protobuf and gRPC code and libraries from proto_library targets
:keywords: Bazel, Protobuf, gRPC, Protocol Buffers, Rules, Build, Starlark
Protobuf and gRPC rules for `Bazel <https://bazel.build>`_
==========================================================
`Bazel <https://bazel.build>`_ rules for building `Protobuf <https://developers.google.com/protocol-buffers>`_
and `gRPC <https://grpc.io>`_ code and libraries from
`proto_library <https://docs.bazel.build/versions/master/be/protocol-buffer.html#proto_library>`_
targets
.. image:: https://img.shields.io/github/v/tag/rules-proto-grpc/rules_proto_grpc?label=release&sort=semver&color=38a3a5
:alt: Latest Release
:target: https://github.com/rules-proto-grpc/rules_proto_grpc/releases
.. image:: https://badge.buildkite.com/a0c88e60f21c85a8bb53a8c73175aebd64f50a0d4bacbdb038.svg?branch=master
:alt: Buildkite Status
:target: https://buildkite.com/bazel/rules-proto-grpc-rules-proto-grpc
.. image:: https://github.com/rules-proto-grpc/rules_proto_grpc/workflows/CI/badge.svg
:alt: GitHub Actions Status
:target: https://github.com/rules-proto-grpc/rules_proto_grpc/actions
.. image:: https://img.shields.io/badge/bazelbuild-%23proto-38a3a5?logo=slack
:alt: Slack Channel
:target: https://bazelbuild.slack.com/archives/CKU1D04RM
Overview
--------
These rules provide `Protocol Buffers (Protobuf) <https://developers.google.com/protocol-buffers>`_
and `gRPC <https://grpc.io>`_ 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.
.. _sec_installation:
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.
.. code-block:: python
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()
.. toctree::
:caption: General
:hidden:
Overview <self>
example
developers
transitivity
changelog
.. toctree::
:caption: External
:hidden:
GitHub Repo <https://github.com/rules-proto-grpc/rules_proto_grpc>
Slack <https://bazelbuild.slack.com/archives/CKU1D04RM>
.. toctree::
:caption: Rules
:hidden:
lang/android
lang/buf
lang/c
lang/cpp
lang/csharp
lang/d
lang/doc
lang/go
lang/grpc-gateway
lang/java
lang/js
lang/objc
lang/php
lang/python
lang/ruby
lang/rust
lang/scala
lang/swift