Makefile 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. PROJECT = max80
  2. QU = quartus
  3. .SUFFIXES:
  4. .SECONDARY:
  5. .DELETE_ON_ERROR:
  6. # Common options for all Quartus tools
  7. QPRI = --lower_priority
  8. QCPF = $(QU)_cpf $(QPRI)
  9. QSH = $(QU)_sh $(QPRI)
  10. QSTA = $(QU)_sta $(QPRI)
  11. QPGM = $(QU)_pgm $(QPRI)
  12. # Common options for Quartus in-flow tools
  13. QOPT = --write_settings_files=off $(QPRI)
  14. QMAP = $(QU)_map $(QOPT)
  15. QFIT = $(QU)_fit $(QOPT)
  16. QCDB = $(QU)_cdb $(QOPT)
  17. QASM = $(QU)_asm $(QOPT)
  18. QPOW = $(QU)_pow $(QOPT)
  19. PERL = perl
  20. SUBDIRS = usb
  21. outdir = output_files
  22. alltarg := sof jic pow.rpt sta.rpt
  23. allout = $(foreach p,$(1),$(foreach o,$(alltarg),$(outdir)/$(p).$(o)))
  24. all:
  25. $(MAKE) prereq
  26. $(MAKE) targets
  27. targets: $(call allout,$(PROJECT))
  28. $(outdir)/%.map.rpt: %.qsf
  29. $(QMAP) $*
  30. $(outdir)/%.fit.rpt: $(outdir)/%.map.rpt
  31. $(QFIT) $*
  32. $(outdir)/%.mif_update.rpt: $(outdir)/%.fit.rpt
  33. $(QCDB) --update_mif $*
  34. $(outdir)/%.sof: $(outdir)/%.mif_update.rpt
  35. $(QASM) $*
  36. $(outdir)/%.sta.rpt: $(outdir)/%.fit.rpt | $(outdir)/%.sof
  37. $(QSTA) $*
  38. $(outdir)/%.pow.rpt: $(outdir)/%.sta.rpt
  39. $(QPOW) $*
  40. # XXX: do all .sof -> conversions using quartus_cpf
  41. $(outdir)/%.jic: %jic.cof $(outdir)/%.sof ../rv32/dram.hex
  42. $(QCPF) --convert $<
  43. # Prerequisite directories
  44. prereq:
  45. for d in $(SUBDIRS); do $(MAKE) -C $$d; done
  46. # Clean out SignalTap
  47. signalclean:
  48. $(PERL) -ne 'print unless (/(SIGNALTAP_FILE\b|\bENABLE_SIGNALTAP\b|\bSLD_FILE\b|SLD_NODE_)/);' < max80.qsf > max80.qsf.tmp
  49. mv -f max80.qsf.tmp max80.qsf
  50. # Programming targets. Environment JTAG_CABLE can override the default,
  51. # which is otherwise the first cable found.
  52. rpar := )
  53. JTAG_CABLE ?= $(shell jtagconfig --enum | sed -ne 's/^1$(rpar) //p')
  54. # Transient programming
  55. program:
  56. $(QPGM) -c '$(JTAG_CABLE)' -m JTAG -o 'p;$(outdir)/$(PROJECT).sof'
  57. # Permanent programming in flash
  58. flash:
  59. $(QPGM) -c '$(JTAG_CABLE)' -m JTAG -i -o 'pvbi;$(outdir)/$(PROJECT).jic'
  60. %.deps: %.qsf scripts/qsfdeps.pl
  61. $(PERL) scripts/qsfdeps.pl $< $* > $@
  62. clean:
  63. for d in $(SUBDIRS); do $(MAKE) -C $$d clean; done
  64. rm -rf db incremental_db simulation/modelsim \
  65. greybox_tmp */greybox_tmp iodevs.vh \
  66. $(outdir)/*.rpt $(outdir)/*.rpt \
  67. $(outdir)/*.summary $(outdir)/*.smsg \
  68. $(outdir)/*.htm $(outdir)/*.htm_files \
  69. $(outdir)/*.map $(outdir)/*.eqn $(outdir)/*.sld \
  70. $(outdir)/*.done
  71. spotless:
  72. for d in $(SUBDIRS); do $(MAKE) -C $$d spotless; done
  73. rm -rf $(outdir)
  74. iodevs.vh: ../iodevs.conf ../tools/iodevs.pl
  75. $(PERL) ../tools/iodevs.pl v $< $@
  76. # Verilog header dependencies
  77. max80.sv: iodevs.vh
  78. -include $(PROJECT).deps