1CC ?= gcc
2PKG_CONFIG ?= pkg-config
3PREFIX ?= /usr/local
4VERSION := $(shell if [ -d .git ] && which git 2>&1 > /dev/null; then git describe --always | tail -c +2; else echo $$STANDALONE_VERSION; fi)
5CFLAGS += -Wall -g -DNMRPFLASH_VERSION=\"$(VERSION)\"
6LDFLAGS += -lpcap
7SUFFIX ?=
8
9ifeq ($(shell uname -s),Linux)
10	CFLAGS += $(shell $(PKG_CONFIG) libnl-route-3.0 --cflags)
11	LDFLAGS += $(shell $(PKG_CONFIG) libnl-route-3.0 --libs)
12endif
13
14ifeq ($(shell uname -s),Darwin)
15	AFL=afl-clang
16else
17	AFL=afl-gcc
18endif
19
20nmrpflash_OBJ = nmrp.o tftp.o ethsock.o main.o util.o
21
22.PHONY: clean install release release/macos release/linux release/win32
23
24nmrpflash$(SUFFIX): $(nmrpflash_OBJ)
25	$(CC) $(CFLAGS) -o nmrpflash$(SUFFIX) $(nmrpflash_OBJ) $(LDFLAGS)
26
27tftptest:
28	CFLAGS=-DNMRPFLASH_TFTP_TEST make clean nmrpflash
29
30%.o: %.c nmrpd.h
31	$(CC) -c $(CFLAGS) $< -o $@
32
33fuzz_nmrp: tftp.c util.c nmrp.c fuzz.c
34	$(AFL) $(CFLAGS) -DNMRPFLASH_FUZZ $^ -o $@
35
36fuzz_tftp: tftp.c util.c nmrp.c fuzz.c
37	$(AFL) $(CFLAGS) -DNMRPFLASH_FUZZ -DNMRPFLASH_FUZZ_TFTP $^ -o $@
38
39dofuzz_tftp: fuzz_tftp
40	echo core | sudo tee /proc/sys/kernel/core_pattern
41	echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
42	afl-fuzz -i fuzzin/tftp -o fuzzout/tftp -- ./fuzz_tftp fuzzin/tftp.bin
43	echo powersave | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
44
45clean:
46	rm -f $(nmrpflash_OBJ) nmrpflash nmrpflash.x86_64 nmrpflash.arm64 fuzz_nmrp fuzz_tftp
47
48install: nmrpflash
49	install -m 755 nmrpflash $(PREFIX)/bin
50
51release/macos:
52	CFLAGS="-target arm64-apple-macos11" SUFFIX=".arm64" make release
53	CFLAGS="-target x86_64-apple-macos10.8" SUFFIX=".x86_64" make release
54	lipo -create -output nmrpflash nmrpflash.x86_64 nmrpflash.arm64
55	zip nmrpflash-$(VERSION)-macos.zip nmrpflash
56
57release/linux: release
58	zip nmrpflash-$(VERSION)-linux.zip nmrpflash
59
60release/win32:
61	zip nmrpflash-$(VERSION)-win32.zip nmrpflash.exe
62
63release: clean nmrpflash$(SUFFIX)
64	strip nmrpflash$(SUFFIX)
65