.. highlight:: sh

.. toctree::
  :maxdepth: 1
  :hidden:

  Home <self>
  docs/getting_started
  Source Code <https://cs.opensource.google/pigweed/pigweed>
  Code Reviews <https://pigweed-review.googlesource.com>
  Mailing List <https://groups.google.com/forum/#!forum/pigweed>
  Chat Room <https://discord.gg/M9NSeTA>
  Issue Tracker <https://bugs.pigweed.dev/>
  docs/contributing
  docs/code_of_conduct
  docs/embedded_cpp_guide
  Code Style <docs/style_guide>
  docs/os_abstraction_layers
  targets
  Build System <build_system>
  FAQ <docs/faq>
  docs/module_structure
  module_guides

=======
Pigweed
=======
Pigweed is an open source collection of embedded-targeted libraries--or as we
like to call them, modules. These modules are building blocks and
infrastructure that enable faster and more reliable development on
small-footprint MMU-less 32-bit microcontrollers like the STMicroelectronics
STM32L452 or the Nordic nRF52832.

.. attention::

  Pigweed is in **early access**; though many modules are shipping in
  production already. If you're interested in using Pigweed, please reach out
  in our `chat room <https://discord.gg/M9NSeTA>`_ or on the `mailing list
  <https://groups.google.com/forum/#!forum/pigweed>`_.

Getting Started
---------------
If you'd like to get set up with Pigweed, please visit the
:ref:`docs-getting-started` guide.

What does Pigweed offer?
------------------------
There are many modules in Pigweed; this section showcases a selection that
produce visual output. For more information about the different Pigweed module
offerings, refer to :ref:`docs-module-guides` section.

``pw_watch`` - Build, flash, run, & test on save
------------------------------------------------
In the web development space, file system watchers are prevalent. These
watchers trigger a web server reload on source change, making development much
faster. In the embedded space, file system watchers are less prevalent;
however, they are no less useful! The Pigweed watcher module makes it easy to
instantly compile, flash, and run tests upon save. Combined with the GN-based
build which expresses the full dependency tree, only the exact tests affected
by a file change are run on saves.

The demo below shows `pw_watch <module-pw_watch>`_ building for a
STMicroelectronics STM32F429I-DISC1 development board, flashing the board with
the affected test, and verifying the test runs as expected. Once this is set
up, you can attach multiple devices to run tests in a distributed manner to
reduce the time it takes to run tests.

.. image:: docs/images/pw_watch_on_device_demo.gif
  :width: 800
  :alt: pw watch running on-device tests

``pw_presubmit`` - Vacuum lint on every commit
----------------------------------------------
Presubmit checks are essential tools, but they take work to set up, and
projects don’t always get around to it. The
`pw_presubmit <module-pw_presubmit>`_ module provides tools for setting up high
quality presubmit checks for any project. We use this framework to run
Pigweed’s presubmit on our workstations and in our automated building tools.

The ``pw_presubmit`` module includes ``pw format``, a tool that provides a
unified interface for automatically formatting code in a variety of languages.
With ``pw format``, you can format C, C++, Python, GN, and Go code according to
configurations defined by your project. ``pw format`` leverages existing tools
like ``clang-format``, and it’s simple to add support for new languages.

.. image:: pw_presubmit/docs/pw_presubmit_demo.gif
  :width: 800
  :alt: pw presubmit demo

``pw_env_setup`` - Cross platform embedded compiler setup
---------------------------------------------------------
A classic problem in the embedded space is reducing the **time from git clone
to having a binary executing on a device**. An entire suite of tools is needed
for building non-trivial production embedded projects, and need to be
installed. For example:

- A C++ compiler for your target device, and also for your host
- A build system or three; for example, GN, Ninja, CMake, Bazel
- A code formatting program like clang-format
- A debugger like OpenOCD to flash and debug your embedded device
- A known Python version with known modules installed for scripting
- A Go compiler for the Go-based command line tools
- ... and so on

In the server space, container solutions like Docker or Podman solve this;
however, container solutions are a mixed bag for embedded systems development
where one frequently needs access to native system resources like USB devices,
or must operate on Windows.

`pw_env_setup <module-pw_env_setup>`_ is our compromise solution for this
problem that works on Mac, Windows, and Linux. It leverages the Chrome
Infrastructure Packaging Deployment system (CIPD) to bootstrap a Python
installation, which in turn inflates a virtual environment. The tooling is
installed into your workspace, and makes no changes to your system. This
tooling is designed to be reused by any project.

.. image:: docs/images/pw_env_setup_demo.gif
  :width: 800
  :alt: pw environment setup demo

``pw_unit_test`` - Embedded testing for MCUs
--------------------------------------------
Unit testing is important, and Pigweed offers a portable library that’s broadly
compatible with `Google Test <https://github.com/google/googletest>`_. Unlike
Google Test, `pw_unit_test <module-pw_unit_test>`_ is built on top of embedded
friendly primitives; for example, it does not use dynamic memory allocation.
Additionally, it is easy to port to new target platforms by implementing the
`test event handler interface <https://cs.opensource.google/pigweed/pigweed/+/main:pw_unit_test/public/pw_unit_test/event_handler.h>`_.

Like other modules in Pigweed, ``pw_unit_test`` is designed for use in
established codebases with their own build system, without the rest of Pigweed
or the Pigweed integrated GN build. However, when combined with Pigweed's
build, the result is a flexible and powerful setup that enables easily
developing code on your desktop (with tests), then running the same tests
on-device.

.. image:: docs/images/pw_status_test.png
  :width: 800
  :alt: pw_status test run natively on host

And more!
---------
Here is a selection of interesting modules:

 - :ref:`module-pw_cpu_exception_cortex_m` - Robust low level hardware fault
   handler for ARM Cortex-M; the handler even has unit tests written in
   assembly to verify nested-hardware-fault handling!

 - :ref:`module-pw_polyfill` - Similar to JavaScript “polyfill” libraries, this
   module provides selected C++17 standard library components that are
   compatible with C++11 and C++14.

 - :ref:`module-pw_tokenizer` - Replace string literals from log statements
   with 32-bit tokens, to reduce flash use, reduce logging bandwidth, and save
   formatting cycles from log statements at runtime.

 - :ref:`module-pw_kvs` - A key-value-store implementation for flash-backed
   persistent storage with integrated wear levelling. This is a lightweight
   alternative to a file system for embedded devices.

 - :ref:`module-pw_protobuf` - An early preview of our wire-format-oriented
   protocol buffer implementation. This protobuf compiler makes a different set
   of implementation tradeoffs than the most popular protocol buffer library in
   this space, nanopb.

See the :ref:`docs-module-guides` for the complete list of modules and their
documentation.
