| .. _module-pw_watch: |
| |
| -------- |
| pw_watch |
| -------- |
| ``pw_watch`` is similar to file system watchers found in the web development |
| space. These watchers trigger a web server reload on source change, increasing |
| iteration. In the embedded space, file system watchers are less prevalent but no |
| less useful! The Pigweed watcher module makes it easy to instantly compile, |
| flash, and run tests upon save. |
| |
| .. image:: doc_resources/pw_watch_on_device_demo.gif |
| |
| .. note:: |
| |
| ``pw_watch`` currently only works with Pigweed's GN and CMake builds. |
| |
| Module Usage |
| ============ |
| The simplest way to get started with ``pw_watch`` is to launch it from a shell |
| using the Pigweed environment as ``pw watch``. By default, ``pw_watch`` watches |
| for repository changes and triggers the default Ninja build target for an |
| automatically located build directory (typically ``$PW_ROOT/out``). To override |
| this behavior, provide the ``-C`` argument to ``pw watch``. |
| |
| .. code:: sh |
| |
| # Find a build directory and build the default target |
| pw watch |
| |
| # Find a build directory and build the stm32f429i target |
| pw watch python.lint stm32f429i |
| |
| # Build pw_run_tests.modules in the out/cmake directory |
| pw watch -C out/cmake pw_run_tests.modules |
| |
| # Build the default target in out/ and pw_apps in out/cmake |
| pw watch -C out -C out/cmake pw_apps |
| |
| # Find a directory and build python.tests, and build pw_apps in out/cmake |
| pw watch python.tests -C out/cmake pw_apps |
| |
| # Build the default target, but only run up to 8 jobs in parallel. |
| pw watch -j8 |
| |
| # Build the default target and start a docs server on http://127.0.0.1:8000 |
| pw watch --serve-docs |
| |
| # Build the default target and start a docs server on http://127.0.0.1:5555 |
| pw watch --serve-docs --serve-docs-port=5555 |
| |
| ``pw watch`` only rebuilds when a file that is not ignored by Git changes. |
| Adding exclusions to a ``.gitignore`` causes 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. |
| |
| By default, ``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. |
| |
| See ``pw watch -h`` for the full list of command line arguments. |
| |
| 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 |
| :ref:`target documentation<docs-targets>`. |