.. 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
  Style Guide <docs/style_guide>
  Automated Analysis <automated_analysis>
  docs/os_abstraction_layers
  targets
  Build System <build_system>
  docs/size_optimizations
  FAQ <docs/faq>
  docs/module_structure
  module_guides
  third_party_support

=======
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 :ref:`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 :ref:`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.

:ref:`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, :ref:`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++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.
