Example project of the Pigweed kernel running on the OpenTitan Earl Grey chip.
To build the IPC test, run:
.. code-block:: console
bazelisk build //target/earlgrey/ipc/user:ipc
To run the IPC test, run
.. tab-set::
.. tab-item:: CW310
.. code-block:: console
bazelisk run //target/earlgrey/ipc/user:ipc_runner_hyper310
.. tab-item:: CW340
.. code-block:: console
bazelisk run //target/earlgrey/ipc/user:ipc_runner_hyper340
.. tab-item:: Verilator
.. code-block:: console
bazelisk run //target/earlgrey/ipc/user:ipc_runner_verilator
.. tab-item:: QEMU
.. code-block:: console
bazelisk run //target/earlgrey/tests/ipc/user:ipc_runner_qemu_test
To run the unittests, run
.. tab-set::
.. tab-item:: CW310
.. code-block:: console
bazelisk test --test_output=all --cache_test_results=no //target/earlgrey/unittest_runner:hyper310_test
.. tab-item:: CW340
.. code-block:: console
bazelisk test --test_output=all --cache_test_results=no //target/earlgrey/unittest_runner:hyper340_test
.. tab-item:: QEMU
.. code-block:: console
bazelisk test //target/earlgrey/tests/ipc/user:ipc_runner_qemu_test
This test runs in approximately 2.6 seconds under QEMU.
It is included in the ``earlgrey_qemu_tests`` workflow and runs on every PR via the ``ci`` group.
Confirm an existing verilator target — find the opentitan_test (or opentitan_runner) rule with interface = "verilator" in the target's BUILD.bazel.
Add a sibling QEMU test target in the same BUILD.bazel:
.. code-block:: python
opentitan_test(
name = "<test>_qemu_test",
interface = "qemu",
tags = ["qemu"],
target = ":<image_target>",
timeout = "moderate",
)
Omit ecdsa_key, spx_key, and nightly_test — those are not needed for QEMU tests.
No workflow wiring needed. The earlgrey_qemu_tests build uses --build_tag_filters=+qemu --test_tag_filters=+qemu and targets //target/earlgrey/..., so any opentitan_test target tagged qemu under target/earlgrey/ is automatically picked up and run on every PR via the ci group.
Canonical example: target/earlgrey/tests/ipc/user/BUILD.bazel — see the ipc_runner_qemu_test target.
.. _rust-analyzer: https://rust-analyzer.github.io/
.. code-block:: console
bazelisk run @rules_rust//tools/rust_analyzer:gen_rust_project -- //target/...