Makefile 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. MAKEFLAGS += -R -r
  2. PROJECT := max80
  3. SUBDIRS := esp32 tools rv32 fpga
  4. REVISIONS := v1 v2 bypass
  5. GIT_DIR ?= .git
  6. TEMP ?= /tmp
  7. MAX80_IP ?= max80
  8. CURL = curl
  9. PERL = perl
  10. ESPTOOL ?= esptool
  11. all clean spotless :
  12. $(MAKE) local.$@ $(SUBDIRS) goal=$@
  13. prefpga:
  14. $(MAKE) local.all $(filter-out fpga,$(SUBDIRS)) goal=all
  15. $(REVISIONS): prefpga
  16. $(MAKE) -C fpga $@
  17. .PHONY: $(SUBDIRS)
  18. $(SUBDIRS):
  19. $(MAKE) -C $@ $(goal)
  20. .PHONY: version.mk
  21. version.mk:
  22. if git log -n 1 --date=iso --pretty="format:\
  23. PROJECT=$(PROJECT)%n\
  24. COMMIT_VERSION=%(describe:abbrev=6)%n\
  25. COMMIT_ID=%H%nCOMMIT_MAGIC=%h%n\
  26. COMMIT_DATE=%ci%n\
  27. COMMIT_TIME=%ct%n\
  28. COMMIT_AUTHOR=%an <%ae>%n\
  29. " > '$@.tmp' 2>/dev/null && \
  30. ! cmp -s '$@' '$@.tmp' 2>/dev/null; then \
  31. mv -f '$@.tmp' '$@'; else rm -f '$@.tmp'; fi
  32. version.%: version.mk version.%.sed
  33. sed -f $@.sed $< > $@
  34. .PHONY: version
  35. version: version.mk version.h version.vh
  36. $(SUBDIRS): version.mk
  37. esp32: version.h
  38. rv32: version.h | tools
  39. fpga: version.vh | rv32 esp32
  40. local.all:
  41. local.clean:
  42. rm -f *~ ./\#* \# *.bak *.tmp stamp_*.bin
  43. local.spotless: local.clean
  44. rm -f version.h version.vh
  45. if [ -d .git ]; then rm -f version.mk; fi
  46. # Obsolete target, need version
  47. program flash:
  48. @echo 'Please specify one of: $(foreach rev,$(REVISIONS),$@-$(rev))' 1>&2
  49. @false
  50. # FPGA-specific targets
  51. program-% flash-%: prefpga
  52. $(MAKE) -C fpga $@
  53. # ESP update by USB or serial port
  54. upload-esp:
  55. $(MAKE) -C esp32 upload
  56. # Update via HTTP or serial port
  57. ip = $(MAX80_IP)
  58. upload-v%:
  59. if [ -z '$(PORT)' ]; then \
  60. $(CURL) -v --data-binary @fpga/output/v$*.fw http://$(ip)/sys/fwupdate ; \
  61. else \
  62. $(PERL) ./esp32/flashesp.pl fpga/output/v$*.fw '$(PORT)' $(FLASHOPT); \
  63. fi
  64. # Set board revision in flash
  65. WRITEFLASH = [ ! -z '$(PORT)' ] && $(ESPTOOL) --before default_reset --after hard_reset --port $(PORT) write_flash -z
  66. stamp_max80_v%.bin:
  67. $(PERL) -e '$$m = "MAX80 v$*\0"; print $$m, "\xff" x (4096 - length ($$m));' > $@
  68. setver-v%: stamp_max80_v%.bin
  69. if [ -z '$(PORT)' ]; then echo 'Set PORT for this command' 2>&1; exit 1; fi
  70. $(WRITEFLASH) 0 $< || sleep 1; $(WRITEFLASH) 0 $<