blob: 0a291612588e468a3bc55932c537c739019635fa [file] [view]
# Usage
openprot is built with Bazel and driven through Pigweed's workflow launcher.
The repository is a Bazel module (`MODULE.bazel`); there is no Cargo
workspace. All everyday tasks go through either `./pw <group>` or `bazel`
directly.
## Workflow launcher (`./pw`)
`./pw` is a thin wrapper around `bazelisk run //:pw -- "$@"`. It dispatches
to one of the named groups defined in `workflows.json`:
```bash
./pw presubmit # format check + presubmit_checks analyzer + clippy
./pw format # apply rustfmt / black / buildifier / clang-format
./pw default # wildcard build (//... minus //third_party/caliptra/...)
./pw ci # run CI tests (skips hardware + verilator targets)
./pw upstream_pigweed # ci tests + Earlgrey verilator tests
```
`./pw presubmit` is what you run before every commit. It is also the gate
on CI.
## Building and testing with Bazel directly
Use `bazelisk` (the wrapper accepts every standard `bazel` flag).
```bash
bazel test //... # host tests
bazel build //... --build_tag_filters=-hardware,-disabled # practical build
bazel build //... --build_tag_filters=-hardware,-disabled,-verilator
bazel test //path/to:target_name # single target
```
The tag filters above are not optional for a wildcard build: `//...` includes
hardware-only and verilator targets that will fail on a developer machine
without the matching environment. The `ci` and `default` workflows already
apply these filters.
Note that `//third_party/caliptra/...` is intentionally excluded from
wildcard builds (see `workflows.json:34`, `:55`, `:78`). The Caliptra
crate-universe workspaces collide with the host workspace when both are
built unconditionally; build into Caliptra paths explicitly when you need
them.
## Clippy
Clippy runs as a `rules_rust` aspect, not as a separate target:
```bash
bazelisk build \
--aspects=@rules_rust//rust:defs.bzl%rust_clippy_aspect \
--output_groups=clippy_checks \
//... -//third_party/caliptra/...
```
`./pw presubmit` invokes the same aspect via the `clippy` build entry.
## Documentation
mdbook sources live under `docs/`. Build with:
```bash
bazel build //docs
```
## Tag reference
Targets can carry tags that gate which environment they run in. The common
ones used in this tree are:
- `hardware` — requires real silicon; never built locally.
- `verilator` — requires a verilator simulator install.
- `disabled` — temporarily excluded.
- `manual` — never built by `//...`; only when explicitly named.
- `kernel` — `pw_kernel`-bound system images and supporting targets.
Combine these via `--build_tag_filters` (build-time) and `--test_tag_filters`
(test-time). The `workflows.json` file is the canonical reference for which
filters each workflow applies.