.. default-domain:: py
.. highlight:: py

.. _chapter-pw-protobuf-compiler:

--------------------
pw_protobuf_compiler
--------------------

The Protobuf compiler module provides build system integration and wrapper
scripts for generating source code for Protobuf definitions.

Generator support
=================

Protobuf code generation is currently supported for the following generators:

+-------------+------------+---------------------------------------------------+
| Generator   | Code       | Notes                                             |
+-------------+------------+---------------------------------------------------+
| pw_protobuf | ``pwpb``   | Compiles using ``pw_protobuf``.                   |
+-------------+------------+---------------------------------------------------+
| Go          | ``go``     | Compiles using the standard Go protobuf plugin    |
|             |            | with gRPC service support.                        |
+-------------+------------+---------------------------------------------------+
| Nanopb      | ``nanopb`` | Compiles using Nanopb. The build variable         |
|             |            | ``dir_third_party_nanopb`` must be set to point   |
|             |            | to a local nanopb installation.                   |
+-------------+------------+---------------------------------------------------+

The build variable ``pw_protobuf_generators`` tells the module the generators
for which it should compile code. It is defined as a list of generator codes.

GN template
===========

The ``pw_proto_library`` GN template is provided by the module.

It tells the build system to compile a set of source proto files to a library in
each chosen generator. A different target is created for each generator, with
the generator's code appended as a suffix to the template's target name.

For example, given the definitions:

.. code::

  pw_protobuf_generators = [ "pwpb", "py" ]

  pw_proto_library("test_protos") {
    sources = [ "test.proto" ]
  }

Two targets are created, named ``test_protos_pwpb`` and ``test_protos_py``,
containing the generated code from their respective generators.

**Arguments**

* ``sources``: List of ``.proto`` files.
* ``deps``: Other ``pw_proto_library`` targets that this one depends on.

**Example**

.. code::

  import("$dir_pw_protobuf_compiler/proto.gni")

  pw_proto_library("my_protos") {
    sources = [
      "foo.proto",
      "bar.proto",
    ]
  }

  pw_proto_library("my_other_protos") {
    sources = [
      "baz.proto", # imports foo.proto
    ]
    deps = [
      ":my_protos",
    ]
  }

  source_set("my_cc_code") {
    sources = [
      "foo.cc",
      "bar.cc",
      "baz.cc",
    ]
    deps = [
      ":my_other_protos_cc",
    ]
  }
