pw_watch how-to guide#

pw_watch: Embedded development file system watcher

This guide shows you how to do common pw_watch tasks.

See Build system for an overview of Pigweed’s approach to build systems.

Set up your Pigweed environment#

See Activate your Pigweed environment if you see an error like this:

pw watch
bash: pw: command not found

Ninja#

This section contains common use cases for GN users.

Set up a custom build directory#

Before running any command that uses a custom build directory, you need to run gn gen <dir>, where <dir> is a placeholder for the name of your custom build directory.

For example, before running this command:

pw watch -C out2

You need to run this command:

gn gen out2

Build the default target and use the default build directory#

pw watch

The default build directory is out.

Customize the build directory#

This section assumes you have completed Set up a custom build directory.

pw watch -C out2

This builds the default target in out2.

Build two targets#

pw watch stm32f429i python.lint

The stm32f429i and python.lint targets are both built in the default build directory (out).

Build the same target in different build directories#

This section assumes you have completed Set up a custom build directory.

pw watch -C out1 -C out2

This example builds the default target in both out1 and out2.

Build different targets in different build directories#

This section assumes you have completed Set up a custom build directory.

pw watch stm32f429i -C out2 python.lint

The stm32f429i target is built in the default build directory (out). The python.lint target is built in the custom build directory (out2).

Unit test integration#

Thanks to GN’s understanding of the full dependency tree, only the tests affected by a file change are run when pw_watch triggers a build. By default, host builds using pw_watch will run unit tests. To run unit tests on a device as part of pw_watch, refer to your device’s target documentation.

Build-system-agnostic guides#

This section discusses general use cases that all apply to all pw watch usage. In other words, these use cases are not affected by whether you’re using GN, Bazel, and so on.

Ignore files#

pw watch only rebuilds when a file that is not ignored by Git changes. Adding exclusions to a .gitignore causes pw watch to ignore them, even if the files were forcibly added to a repo. By default, only files matching certain extensions are applied, even if they’re tracked by Git. The --patterns and --ignore-patterns arguments can be used to include or exclude specific patterns. These patterns do not override Git’s ignoring logic.

The --exclude-list argument can be used to exclude directories from being watched. This decreases the number of files monitored with inotify in Linux.

Automatically reload docs#

When using --serve-docs, by default the docs will be rebuilt when changed, just like code files. However, you will need to manually reload the page in your browser to see changes.

Disable automatic rebuilds#

pw watch automatically restarts an ongoing build when files change. This can be disabled with the --no-restart option. While running pw watch, you may also press Enter to immediately restart a build.