Makefile 1.9 KB

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