blob: 462bc87064bcd4c5a9c67f4c8050e9dca4965bf7 [file] [log] [blame]
.. _chapter-stm32f429i-disc1:
.. default-domain:: cpp
.. highlight:: sh
The STMicroelectronics STM32F429I-DISC1 development board is currently Pigweed's
primary target for on-device testing and development.
To build for this target, change the ``pw_target_config`` GN build arg to point
to this target's configuration file.
.. code:: sh
$ gn gen --args='pw_target_config = "//targets/stm32f429i-disc1/target_config.gni"' out/disco
$ ninja -C out/disco
.. code:: sh
$ gn gen out/disco
$ gn args
# Modify and save the args file to update the pw_target_config.
pw_target_config = "//targets/stm32f429i-disc1/target_config.gni"
$ ninja -C out/disco
The default Pigweed build target will build all Pigweed modules' unit tests.
These tests can be run on-device in a few different ways.
Run a unit test
If using ``out/disco`` as a build directory, tests will be located in
``out/disco/obj/[module name]/[test_name].elf``. To run these on device, the
stm32f429i-disc1 target provides a helper script that flashes the test to a
device and then runs it.
.. code:: sh
# Setup pigweed environment.
$ . pw_env_setup/
# Run test.
$ stm32f429i_disc1_unit_test_runner /path/to/binary
Run multiple tests
Running all tests one-by-one is rather tedious. To make running multiple
tests easier, use Pigweed's ``pw test`` command and pass it a path to the build
directory and the name of the test runner. By default, ``pw test`` will run all
tests, but it can be restricted it to specific ``pw_test_group`` targets using
the ``--group`` argument. Alternatively, individual test binaries can be
specified with the ``--test`` option.
.. code:: sh
# Setup Pigweed environment.
$ . pw_env_setup/
# Run test.
$ pw test --root out/disco/ --runner stm32f429i_disc1_unit_test_runner
Run tests affected by code changes
When writing code that will impact multiple modules, it's helpful to only run
all tests that are affected by a given code change. Thanks to the GN/Ninja
build, this is possible! This is done by using a ``pw_target_runner_server``
that Ninja can send the tests to as it rebuilds affected targets.
Additionally, this method enables distributed testing. If multiple devices are
connected, the tests will be run across all attached devices to further speed up
.. warning::
This requires that ``pw_target_runner_server`` and ``pw_target_runner_client``
have been built and are in your PATH. By default, you can find these binaries
in the `host_tools` directory of a host build (e.g. ``out/host/host_tools``).
Step 1: Start test server
To allow Ninja to properly serialize tests to run on an arbitrary number of
devices, Ninja will send test requests to a server running in the background.
The first step is to launch this server. By default, the script will attempt
to automatically detect all attached STM32f429I-DISC1 boards and use them for
testing. To override this behavior, provide a custom server configuration file
with ``--server-config``.
.. tip::
If you unplug or plug in any boards, you'll need to restart the test server
for hardware changes to properly be detected.
.. code:: sh
$ stm32f429i_disc1_test_server
Step 2: Configure GN
By default, this hardware target has incremental testing via
``pw_target_runner`` disabled. Enabling the ``pw_use_test_server`` build arg
tells GN to send requests to a running ``stm32f429i_disc1_test_server``.
.. code:: sh
$ gn args out/disco
# Modify and save the args file to use pw_target_runner.
pw_use_test_server = true
Step 3: Build changes
Whenever you run ``ninja -C out/disco``, affected tests will be built and run on
the attached device(s). Alternatively, you may use ``pw watch`` to set up
Pigweed to build/test whenever it sees changes to source files.