.. _chapter-pw-protobuf-compiler:

.. default-domain:: py

.. highlight:: py

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

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

Language support
================

Protobuf code generation is currently supported for the following languages:

+----------+--------+----------------------------------------------------------+
| Language | Code   | Notes                                                    |
+----------+--------+----------------------------------------------------------+
| C++      | ``cc`` | Currently only supports using ``pw_protobuf``.           |
|          |        |                                                          |
|          |        | Support for other libraries such as ``nanopb`` is        |
|          |        | planned.                                                 |
+----------+--------+----------------------------------------------------------+
| Go       | ``go`` | Compiles using the standard Go protobuf plugin with gRPC |
|          |        | service support.                                         |
+----------+--------+----------------------------------------------------------+

The build variable ``pw_protobuf_langs`` tells the module the languages for
which it should compile code. It is defined as a list of language 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 language. A different target is created for each language, with the
language's code appended as a suffix to the template's target name.

For example, given the definitions:

.. code::

  pw_protobuf_langs = [ "cc", "py" ]

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

Two targets are created, named ``test_protos_cc`` and ``test_protos_py``,
containing the generated code for their respective languages.

**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",
    ]
  }
