.PHONY: check coverage fuzz fuzz-loop fuzz-minimize fuzz-seeds generate vectors
.DEFAULT_GOAL := check
FUZZ_TIME ?= 180
FUZZ_JOBS ?= $(shell nproc 2>/dev/null || sysctl -n hw.ncpu)
FUZZ_SANITIZER ?= none
HOST_MUSL = $(findstring musl,$(shell rustc -vV | sed -n 's/^host: //p'))
FUZZ_ENV = RUSTFLAGS='--cfg getrandom_backend="custom"$(if $(HOST_MUSL), -C target-feature=-crt-static)'
check:
cargo fmt --all -- --check
cargo clippy --all-features -- -D warnings
cargo doc --all-features --no-deps
cargo hack test --each-feature
cargo test --all-features
coverage:
rm -rf target/llvm-cov-target
cargo +nightly llvm-cov --html --open
fuzz-seeds:
rm -rf fuzz/seeds
WIRE_SEEDS=$(CURDIR)/fuzz/seeds cargo test --features fuzz --quiet
for target in $$(cargo +nightly fuzz list); do \
test -d fuzz/seeds/$$target || { echo "no seeds for $$target"; exit 1; }; \
done
fuzz:
for target in $$(cargo +nightly fuzz list); do \
mkdir -p fuzz/corpus/$$target; \
$(FUZZ_ENV) cargo +nightly fuzz run -s $(FUZZ_SANITIZER) -j $(FUZZ_JOBS) $$target fuzz/corpus/$$target fuzz/seeds/$$target -- -max_total_time=$(FUZZ_TIME) || exit 1; \
done
fuzz-minimize:
for target in $$(cargo +nightly fuzz list); do \
$(FUZZ_ENV) cargo +nightly fuzz cmin -s $(FUZZ_SANITIZER) $$target -- -set_cover_merge=1 || exit 1; \
done
fuzz-loop:
while true; do $(MAKE) --no-print-directory fuzz || exit 1; done
vectors:
rm -rf vectors/client
$(FUZZ_ENV) CARGO_TARGET_DIR=target/vectors \
WIRE_VECTORS=$(CURDIR)/vectors cargo test --quiet --features fuzz mock::server
generate:
cargo run --quiet --manifest-path generator/Cargo.toml
rustfmt --edition 2024 src/protocol/generated/*.rs