## Xilinx ISE Makefile ## ## To the extent possible under law, the author(s) have dedicated all copyright ## and related and neighboring rights to this software to the public domain ## worldwide. This software is distributed without any warranty. include project.cfg ifndef XILINX $(error XILINX must be defined) endif ifndef PROJECT $(error PROJECT must be defined) endif ifndef TARGET_PART $(error TARGET_PART must be defined) endif TOPLEVEL ?= $(PROJECT) CONSTRAINTS ?= $(PROJECT).ucf BITFILE ?= build/$(PROJECT).bit COMMON_OPTS ?= -intstyle xflow XST_OPTS ?= NGDBUILD_OPTS ?= MAP_OPTS ?= PAR_OPTS ?= BITGEN_OPTS ?= PROGRAMMER ?= none IMPACT_OPTS ?= -batch impact.cmd DJTG_EXE ?= djtgcfg DJTG_DEVICE ?= DJTG_DEVICE-NOT-SET DJTG_INDEX ?= 0 XC3SPROG_EXE ?= xc3sprog XC3SPROG_CABLE ?= -c none XC3SPROG_OPTS ?= ########################################################################### RUN = @echo -ne "\n\n\e[1;33m======== $(1) ========\e[m\n\n"; \ cd build && $(XILINX)/$(1) default: $(BITFILE) clean: rm -rf build build/$(PROJECT).prj: project.cfg @echo "Updating $@" @mkdir -p build @rm -f $@ @$(foreach file,$(VSOURCE),echo "verilog work \"../$(file)\"" >> $@;) @$(foreach file,$(VHDSOURCE),echo "vhdl work \"../$(file)\"" >> $@;) build/$(PROJECT).scr: project.cfg @echo "Updating $@" @mkdir -p build @rm -f $@ @echo "run" \ "-ifn $(PROJECT).prj" \ "-ofn $(PROJECT).ngc" \ "-ifmt mixed" \ "$(XST_OPTS)" \ "-top $(TOPLEVEL)" \ "-ofmt NGC" \ "-p $(TARGET_PART)" \ > build/$(PROJECT).scr $(BITFILE): project.cfg $(VSOURCE) $(CONSTRAINTS) build/$(PROJECT).prj build/$(PROJECT).scr @mkdir -p build $(call RUN,xst) $(COMMON_OPTS) \ -ifn $(PROJECT).scr $(call RUN,ngdbuild) $(COMMON_OPTS) $(NGDBUILD_OPTS) \ -p $(TARGET_PART) -uc ../$(CONSTRAINTS) \ $(PROJECT).ngc $(PROJECT).ngd $(call RUN,map) $(COMMON_OPTS) $(MAP_OPTS) \ -p $(TARGET_PART) \ -w $(PROJECT).ngd -o $(PROJECT).map.ncd $(PROJECT).pcf $(call RUN,par) $(COMMON_OPTS) $(PAR_OPTS) \ -w $(PROJECT).map.ncd $(PROJECT).ncd $(PROJECT).pcf $(call RUN,bitgen) $(COMMON_OPTS) $(BITGEN_OPTS) \ -w $(PROJECT).ncd $(PROJECT).bit @echo -ne "\e[1;32m======== OK ========\e[m\n" ifeq ($(PROGRAMMER), impact) prog: $(BITFILE) $(XILINX)/impact -batch $(IMPACT_OPTS) endif ifeq ($(PROGRAMMER), digilent) prog: $(BITFILE) $(DJTG_EXE) prog -d $(DJTG_DEVICE) -i $(DJTG_INDEX) -f $(BITFILE) endif ifeq ($(PROGRAMMER), xc3sprog) prog: $(BITFILE) $(XC3SPROG_EXE) $(XC3SPROG_CABLE) $(XC3SPROG_OPTS) $(BITFILE) endif ifeq ($(PROGRAMMER), none) prog: $(error PROGRAMMER must be set to use 'make prog') endif # vim: set filetype=make: #