Go to file
Alexei Frolov ea39552467 pw_unit_test: Start documentation
This change adds some initial documentation for the unit test module.

Change-Id: Icc9eaa67c11766af8eb3921c9079771efe152af8
2020-03-13 23:25:52 +00:00
docs pw_unit_test: Start documentation 2020-03-13 23:25:52 +00:00
pw_assert pw_assert: Expand documentation coverage 2020-03-03 19:38:56 +00:00
pw_assert_basic pw_assert: Expand documentation coverage 2020-03-03 19:38:56 +00:00
pw_base64 Roll GN to 239533d 2020-02-28 01:33:18 +00:00
pw_bloat Update docs target to only use ARM size reports 2020-03-04 01:13:34 +00:00
pw_boot_armv7m Update docs target to only use ARM size reports 2020-03-04 01:13:34 +00:00
pw_build docs: Extend readme, more docs 2020-03-12 18:00:44 +00:00
pw_checksum Add or expand docs.rst 2020-03-05 02:00:04 +00:00
pw_cli pw_cli: Make process.py faster 2020-03-13 19:36:59 +00:00
pw_containers pw_containers: Vector copy and move constructors 2020-03-12 17:20:53 +00:00
pw_cpu_exception Roll GN to 239533d 2020-02-28 01:33:18 +00:00
pw_cpu_exception_armv7m pw_cpu_exception_armv7m: Unit test updates 2020-03-12 15:57:17 +00:00
pw_docgen Roll GN to 239533d 2020-02-28 01:33:18 +00:00
pw_doctor pw_doctor: check for pre-push hook 2020-03-13 18:29:00 +00:00
pw_env_setup roll: host_tools 2020-03-13 15:30:26 +00:00
pw_kvs pw_kvs: Small test cleanup 2020-03-13 09:19:23 -07:00
pw_log Roll GN to 239533d 2020-02-28 01:33:18 +00:00
pw_log_basic Rename pw_dumb_io to pw_sys_io 2020-03-03 18:19:17 +00:00
pw_minimal_cpp_stdlib Roll GN to 239533d 2020-02-28 01:33:18 +00:00
pw_module pw_module: module-check with multiple modules 2020-03-04 16:26:32 -08:00
pw_polyfill Roll GN to 239533d 2020-02-28 01:33:18 +00:00
pw_preprocessor Roll GN to 239533d 2020-02-28 01:33:18 +00:00
pw_presubmit pw_env_setup: Initial pass at prettier Windows UI 2020-03-10 14:51:53 -07:00
pw_protobuf pw_presubmit: Enable mypy and get it passing 2020-03-06 23:13:35 +00:00
pw_protobuf_compiler pw_cli: Make process.py faster 2020-03-13 19:36:59 +00:00
pw_span pw_span: Fix deduction guides for containers 2020-02-28 11:09:37 -08:00
pw_status Roll GN to 239533d 2020-02-28 01:33:18 +00:00
pw_string Add or expand docs.rst 2020-03-05 02:00:04 +00:00
pw_sys_io Rename pw_dumb_io to pw_sys_io 2020-03-03 18:19:17 +00:00
pw_sys_io_baremetal_stm32f429 Rename pw_dumb_io to pw_sys_io 2020-03-03 18:19:17 +00:00
pw_sys_io_stdio Rename pw_dumb_io to pw_sys_io 2020-03-03 18:19:17 +00:00
pw_target_runner Roll GN to 239533d 2020-02-28 01:33:18 +00:00
pw_tokenizer docs: Extend readme, more docs 2020-03-12 18:00:44 +00:00
pw_toolchain pw_toolchain: Fix Mac host GN build 2020-03-04 16:05:44 -08:00
pw_unit_test pw_unit_test: Start documentation 2020-03-13 23:25:52 +00:00
pw_varint Add or expand docs.rst 2020-03-05 02:00:04 +00:00
pw_watch docs: Extend readme, more docs 2020-03-12 18:00:44 +00:00
targets pw_cli: Make process.py faster 2020-03-13 19:36:59 +00:00
.clang-format Add preprocessor and unit_test modules 2019-11-04 16:07:34 -08:00
.gitignore pw_env_setup: variable files now consistent 2020-03-12 15:51:37 +00:00
.gn Expand Windows environment setup 2020-01-23 20:29:41 +00:00
.pylintrc pw_tokenizer: Python package 2020-01-09 23:18:10 +00:00
activate.bat env_setup: Split activate and bootstrap on Windows 2020-03-11 16:32:26 +00:00
activate.sh Move bootstrap.sh to root 2020-03-10 18:45:09 +00:00
AUTHORS
bootstrap.bat env_setup: Split activate and bootstrap on Windows 2020-03-11 16:32:26 +00:00
bootstrap.sh pw_env_setup: variable files now consistent 2020-03-12 15:51:37 +00:00
BUILD Remove SUBDIRS from BUILD. (Apparently unused.) 2019-11-19 18:28:54 +00:00
BUILD.gn Rename pw_dumb_io to pw_sys_io 2020-03-03 18:19:17 +00:00
BUILDCONFIG.gn Build with -g by default 2020-01-28 01:52:44 +00:00
CMakeLists.txt Rename pw_dumb_io to pw_sys_io 2020-03-03 18:19:17 +00:00
CODE_OF_CONDUCT.md Update Pigweed README and add CODE OF CONDUCT 2020-01-23 19:18:23 +00:00
CONTRIBUTING.md Fix copyright notices 2019-11-27 22:34:02 +00:00
LICENSE
modules.gni docs: Extend readme, more docs 2020-03-12 18:00:44 +00:00
pw_vars_default.gni Rename pw_dumb_io to pw_sys_io 2020-03-03 18:19:17 +00:00
README.md docs: Extend readme, more docs 2020-03-12 18:00:44 +00:00
WORKSPACE Add bazel build system files. 2019-11-14 07:16:44 -08:00

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.

Pigweed is in the early stages of development, and should be considered experimental. Were continuing to evolve the platform and add new modules. We value developer feedback along the way.

Pigweed is an open source project with a code of conduct that we expect everyone who interacts with the project to respect.

Getting Started

If you'd like to get set up with Pigweed, please visit the setup guide, and then check out the Pigweed developer's guide for more information on how to get the most out of Pigweed.

What does Pigweed offer?

There are many modules in Pigweed, and this section only showcases a small selection that happen to produce visual output. For more information about the different Pigweed module offerings, refer to "modules" section in the full documentation.

pw_watch

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 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.

pw watch running on-device tests

pw_presubmit

Presubmit checks are essential tools, but they take work to set up, and projects dont always get around to it. The pw_presubmit module provides tools for setting up high quality presubmit checks for any project. We use this framework to run Pigweeds 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 its simple to add support for new languages.

pw presubmit demo

pw_env_setup

A classic problem in the embedded space is reducing the time from git clone to having a binary executing on a device. The issue is that an entire suite of tools is needed for non-trivial production embedded projects. 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, in our experience 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.

env_setup is our compromise solution for this problem that works on Mac, Windows, and Linux. It leverages the Chrome packaging 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.

pw_unit_test

Unit testing is important, and Pigweed offers a portable library thats broadly compatible with Google Test. Unlike Google Test, 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.

pw_status test run natively on host

And more!

  • pw_cpu_exception_armv7m: 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!

  • 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.

  • pw_minimal_cpp_stdlib: An entirely incomplete implementation of the C++17 standard library, that provides some of the primitives needed by Pigweed itself. Useful for projects that want to use Pigweed, but dont enable the typical standard C++ libraries like GNUs libstdc++ or LLVMs libc++. Dont use this module unless you know what you are doing.

  • 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.

  • 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.