default: test

config_file = ../.config
ifeq ($(config_file),$(wildcard $(config_file)))
include $(config_file)
endif

PROJECT=tc-fpga

XST := $(XILINXDIR)xst
NGDBUILD = $(XILINXDIR)ngdbuild
MAP = $(XILINXDIR)map
PAR = $(XILINXDIR)par
TRCE = $(XILINXDIR)trce
BITGEN = $(XILINXDIR)bitgen
PROMGEN = $(XILINXDIR)promgen
IMPACT = $(XILINXDIR)impact

core_sources = \
	       tc-fpga.v

tc-fpga_test_sources = $(core_sources) test.v xilinx_buf.v

dist_sources = $(core_sources) tc-fpga.v tc-fpga.ucf config.v

PHONY += test
test: tc-fpga-test

PHONY += svf
svf: $(PROJECT).svf

PHONY += bit
bit: $(PROJECT).bit

PHONY += fpga
fpga: $(PROJECT).bit
	fpga-setup
	xc3sprog -c xpc -p 0 "$<"

PHONY += help
help:
	@echo  'Cleaning targets:'
	@echo  '  clean		  - Remove most generated files'
	@echo  ''
	@echo  'Other generic targets:'
	@echo  '* test		  - test module'
	@echo  '  bit             - generate program for FPGA'
	@echo  '  fpga            - upload module to FPGA'
	@echo  ''
	@echo  'Execute "make" to build all targets marked with [*] '

PHONY += tc-fpga-test
tc-fpga-test:
	@cver -q $(tc-fpga_test_sources)

SECONDARY += $(PROJECT).synth
$(PROJECT).synth: $(PROJECT).xst $(core_sources) $(PROJECT).prj $(PROJECT).v
	@echo "XST	$(PROJECT).syr"
	@../scripts/xst $(XST) $(@D) $(PROJECT) $^
	@touch "$@"

$(PROJECT).syr $(PROJECT).ngc $(PROJECT).ngr: $(PROJECT).synth	;

$(PROJECT).ngd: $(PROJECT).ngc $(PROJECT).ucf
	@echo "NGDBUILD	$(PROJECT).ngd"
	@../scripts/ngdbuild $(NGDBUILD) $(@D) $(PROJECT) $(FPGA_CHIP) $^

SECONDARY += $(PROJECT).map
$(PROJECT).map: $(PROJECT).ngd
	@echo "MAP	$(PROJECT).pcf"
	@../scripts/map $(MAP) $(@D) $(PROJECT) $(FPGA_CHIP) $^

$(PROJECT)_map.ncd $(PROJECT).pcf: $(PROJECT).map


$(PROJECT).ncd: $(PROJECT)_map.ncd $(PROJECT).pcf
	@echo "PAR	$(PROJECT).ncd"
	@../scripts/par $(PAR) $(@D) $(PROJECT) $(FPGA_CHIP) $^

$(PROJECT).twx: $(PROJECT).ncd $(PROJECT).pcf
	@echo "TRCE	$(PROJECT).twx"
	@../scripts/trce $(TRCE) $(@D) $(PROJECT) $(FPGA_CHIP) $^

$(PROJECT).bit: $(PROJECT).ncd $(PROJECT).twx $(PROJECT).ut
	@echo "BITGEN	$(PROJECT).bit"
	@../scripts/bitgen $(BITGEN) $(@D) $(PROJECT) $(FPGA_CHIP) $^

$(PROJECT).mcs: $(PROJECT).bit
	@echo "PROMGEN	$(PROJECT).mcs"
	@../scripts/promgen $(PROMGEN) $(@D) $(PROJECT) $(FLASH_CHIP) $^

$(PROJECT).svf: $(PROJECT).mcs $(PROJECT).bit $(PROJECT).cmd
	@echo "IMPACT	$(PROJECT).svf"
	@../scripts/impact $(IMPACT) $(@D) $(PROJECT) $^

PHONY += clean
clean:
	@rm -f \
		$(PROJECT).svf \
		$(PROJECT).mcs \
		$(PROJECT).bit \
		$(PROJECT).twx \
		$(PROJECT).ncd \
		$(PROJECT).map \
		$(PROJECT)_map.ncd \
		$(PROJECT).pcf \
		$(PROJECT).ngd \
		$(PROJECT).syr \
		$(PROJECT).ngc \
		$(PROJECT).ngr \
		$(PROJECT).synth \
		logs/*.log

PHONY += distdir
distdir:
	$(INSTALL) -m 644 $(dist_sources) $(DESTDIR)

.SECONDARY: $(SECONDARY)
.PHONY: $(PHONY)
