.. _module-pw_third_party_emboss:

======
Emboss
======
`Emboss <https://github.com/google/emboss>`_ is a tool for generating code to
safely read and write binary data structures.

The ``//third_party/emboss`` directory contains build system integration for
emboss libraries. The Emboss source code needs to be provided by the user.

------------------
Configuring Emboss
------------------
The recommended way to include the Emboss source code is to add it as a
Git submodule:

.. code-block:: console

   $ git submodule add https://github.com/google/emboss.git third_party/emboss/src

.. tab-set::

   .. tab-item:: GN

      Next, set the GN variable ``dir_pw_third_party_emboss`` to the path of
      your Emboss installation. If using the submodule path from above, add the
      following to the ``default_args`` of your project's ``.gn`` file:

      .. code-block::

         dir_pw_third_party_emboss = "//third_party/emboss/src"

      ..
         inclusive-language: disable

      Optionally, configure the Emboss defines documented at
      `dir_pw_third_party_emboss/runtime/cpp/emboss_defines.h
      <https://github.com/google/emboss/blob/master/runtime/cpp/emboss_defines.h>`_
      by setting the ``pw_third_party_emboss_CONFIG`` variable to a source set
      that includes a public config overriding the defines. By default, checks
      will use PW_DASSERT.

      ..
         inclusive-language: enable

   .. tab-item:: CMake

      Next, set the CMake variable ``dir_pw_third_party_emboss`` to the path of
      your Emboss installation. If using the submodule path from above, add the
      following to your project's ``CMakeLists.txt`` file:

      .. code-block::

         set(dir_pw_third_party_emboss "$ENV{PW_ROOT}/third_party/emboss/src" CACHE PATH "" FORCE)


------------
Using Emboss
------------
.. tab-set::

   .. tab-item:: GN

      Let's say you've authored an Emboss source file at
      ``//my-project/public/my-project/my-protocol.emb``.
      To generate its bindings, you can add the following to
      ``//my-project/BUILD.gn``:

      .. code-block::

         import("$pw_external_emboss/build_defs.gni")

         emboss_cc_library("emboss_protocol") {
            source = "public/my-project/my-protocol.emb"
         }

      This generates a source set of the same name as the target, in this case
      "emboss_protocol". To use the bindings, list this target as a dependency
      in GN:

      .. code-block::

         pw_test("emboss_test") {
            sources = [ "emboss_test.cc" ]
            deps = [
               ":emboss_protocol",
            ]
         }

   .. tab-item:: CMake

      Let's say you've authored an Emboss source file at
      ``my-project/public/my-project/my-protocol.emb``.
      To generate its bindings, you can add the following to
      ``my-project/CMakeLists.txt``:

      .. code-block::

         include($ENV{PW_ROOT}/third_party/emboss/emboss.cmake)

         emboss_cc_library(emboss_protocol
           SOURCES
             source = "public/my-project/my-protocol.emb"
         )

      This generates a library of the same name as the target, in this case
      "emboss_protocol". To use the bindings, list this target as a dependency
      in CMake:

      .. code-block::

         pw_add_test(emboss_test
            SOURCES
               emboss_test.cc
            PRIVATE_DEPS
               emboss_protocol
         )

Now just include the generated header by adding ``.h`` to the path of your
Emboss source file:

.. code-block:: c++

   #include <my-project/my-protocol.emb.h>
