Zephyr Firmware Standard

The zephyr-firmware profile covers Wavenumber-owned Zephyr application repositories and west workspaces. It inherits the native C/C++ policy, then narrows signoff to owned application code first.

default_zephyr_standard

Returns the current Zephyr firmware profile.

render_zephyr_standard

Renders the Zephyr firmware profile as text or JSON.

Scope

Signoff scans owned application source roots. Zephyr, west modules, generated files, vendor trees, build outputs, temporary files, and captured hardware artifacts are excluded unless a project explicitly opts them in.

Build Loop

Projects should expose simple app-local build scripts that enable CMAKE_EXPORT_COMPILE_COMMANDS=ON. The normal loop runs prebuild signoff before west build and postbuild signoff after the compile database is fresh.

Native Signoff

Zephyr projects use signoff.toml to configure Lizard, clang-format, and clang-tidy. Canonical new-code limits are max_file_lines = 2200, max_function_lines = 220, and max_cyclomatic_complexity = 10. Existing projects may carry a baseline so current debt is visible without permitting new debt.

[limits]
max_file_lines = 2200
max_function_lines = 220
max_cyclomatic_complexity = 10

[tools]
lizard = "fail"
clang_format = "report"
clang_tidy = "report"

Target Toolchains

clang-tidy runs against the active compile database. If the target requires a clang backend that is not installed, such as Xtensa on a host LLVM build, the project should report that limitation and keep the gate non-blocking until a matching clang toolchain is installed.

Setup Documentation

docs/setup.html or a project setup document must list west, Zephyr SDK, board SDKs, dtc, LLVM tools, Python dependencies, flashing tools, and any hardware required for release signoff.