59 lines
2.0 KiB
Makefile
59 lines
2.0 KiB
Makefile
# Host-side tests for obu-firmware. See README.md: needs gcc and make on PATH (MSYS2 UCRT64), and
|
|||
|
|
# asn1tools under `py -3.11` for the replay check.
|
||
|
|
#
|
||
|
|
# make build and run everything: chain, replay, fuzz
|
||
|
|
# make chain | replay | fuzz one of them
|
||
|
|
# make fuzz FUZZ_ITER=50000000 FUZZ_SEED=7 a longer or different fuzz run
|
||
|
|
# make clean remove build/
|
||
|
|
#
|
||
|
|
# The firmware sources are compiled straight from ../../main, never copied.
|
||
|
|
|
||
|
|
CC = gcc
|
||
|
|
PYTHON = python
|
||
|
|
PYTHON_ASN1 = py -3.11
|
||
|
|
FW = ../../main
|
||
|
|
BUILD = build
|
||
|
|
EXE = $(if $(filter Windows_NT,$(OS)),.exe,)
|
||
|
|
RECORDINGS = $(wildcard ../../../its-g5-receiver-firmware/recordings/*.pcap)
|
||
|
|
FUZZ_ITER = 2000000
|
||
|
|
FUZZ_SEED = 1
|
||
|
|
|
||
|
|
# -Werror: these sources must stay warning-free on the host compiler too.
|
||
|
|
# UBSan in trap mode needs no runtime library, so it works on MinGW; a trap shows up as a crash.
|
||
|
|
CFLAGS = -std=c11 -O2 -g -Wall -Wextra -Wpedantic -Werror -I$(FW) \
|
||
|
|
-fsanitize=undefined -fsanitize-undefined-trap-on-error
|
||
|
|
|
||
|
|
FW_SRCS = $(FW)/geonet.c $(FW)/dot11p.c $(FW)/gn_unwrap.c
|
||
|
|
DEPS = test_util.c test_util.h $(FW_SRCS) $(wildcard $(FW)/*.h)
|
||
|
|
|
||
|
|
.PHONY: all check chain replay fuzz clean
|
||
|
|
|
||
|
|
all: check
|
||
|
|
|
||
|
|
check: chain replay fuzz
|
||
|
|
|
||
|
|
$(BUILD):
|
||
|
|
mkdir -p $@
|
||
|
|
|
||
|
|
$(BUILD)/%$(EXE): %.c $(DEPS) | $(BUILD)
|
||
|
|
$(CC) $(CFLAGS) -o $@ $< test_util.c $(FW_SRCS)
|
||
|
|
|
||
|
|
# The pcap goes through pcap_gn_tally.py as a second, independent parser of the same frames.
|
||
|
|
chain: $(BUILD)/test_chain$(EXE)
|
||
|
|
$(BUILD)/test_chain$(EXE) $(BUILD)/test_chain.pcap
|
||
|
|
$(PYTHON) ../pcap_gn_tally.py $(BUILD)/test_chain.pcap
|
||
|
|
|
||
|
|
replay: $(BUILD)/test_replay$(EXE)
|
||
|
|
ifeq ($(RECORDINGS),)
|
||
|
|
@echo "replay: no recordings in ../../../its-g5-receiver-firmware/recordings, skipped"
|
||
|
|
else
|
||
|
|
$(BUILD)/test_replay$(EXE) $(BUILD)/replay.tsv $(RECORDINGS)
|
||
|
|
$(PYTHON_ASN1) check_replay.py $(BUILD)/replay.tsv $(RECORDINGS)
|
||
|
|
endif
|
||
|
|
|
||
|
|
fuzz: $(BUILD)/fuzz_gn_unwrap$(EXE)
|
||
|
|
$(BUILD)/fuzz_gn_unwrap$(EXE) $(FUZZ_ITER) $(FUZZ_SEED) $(RECORDINGS)
|
||
|
|
|
||
|
|
clean:
|
||
|
|
rm -rf $(BUILD)
|