Building & testing

Every build and test configuration lives in CMakePresets.json (plus tests/cmake/presets-linux.json), so a CI step and a local reproduction are the same command. The thin wrapper scripts/ci.sh bundles the common ones.

One preset, end to end

$ scripts/ci.sh ci p256_stack
# equivalent to:
$ cmake --preset p256_stack
$ cmake --build --preset p256_stack
$ ctest --preset p256_stack

List every preset with scripts/ci.sh list (or cmake --list-presets). Preset names follow <suite-family>_<memory-backend> — e.g. p384_heap or mlkem512_custom.

Whole matrix and instrumentation

$ scripts/ci.sh matrix        # build + test every functional preset
$ scripts/ci.sh coverage      # gcov + gcovr report
$ scripts/ci.sh sanitizers    # ASan + UBSan
$ scripts/ci.sh valgrind      # memcheck + DRD (all suites incl. PQC)
$ scripts/ci.sh fuzz 60       # libFuzzer targets, 60 s each
$ scripts/ci.sh format --check

Zephyr benchmark

The ZTEST benchmark under tests/zephyr runs the full handshake per cipher suite and memory backend on native_sim:

$ west twister -T tests/zephyr -p native_sim -W --inline-logs