diff --git a/Makefile b/Makefile index 32de8af..e391390 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,7 @@ # Version ########################################################################### -Makefile_Version := 1.0.2 +Makefile_Version := 1.0.3 $(info ISE Makefile Version: $(Makefile_Version)) ########################################################################### @@ -39,7 +39,8 @@ endif TOPLEVEL ?= $(PROJECT) CONSTRAINTS ?= $(PROJECT).ucf -BITFILE ?= build/$(PROJECT).bit +BUILD_DIR ?= working +BITFILE ?= $(BUILD_DIR)/$(PROJECT).bit COMMON_OPTS ?= -intstyle xflow XST_OPTS ?= @@ -82,10 +83,10 @@ else endif TEST_NAMES = $(foreach file,$(VTEST) $(VHDTEST),$(basename $(file))) -TEST_EXES = $(foreach test,$(TEST_NAMES),build/isim_$(test)$(EXE)) +TEST_EXES = $(foreach test,$(TEST_NAMES),$(BUILD_DIR)/isim_$(test)$(EXE)) RUN = @echo "\n\e[1;33m============ $(1) ============\e[m\n"; \ - cd build && $(XILINX)/bin/$(XILINX_PLATFORM)/$(1) + cd $(BUILD_DIR) && $(XILINX)/bin/$(XILINX_PLATFORM)/$(1) # isim executables don't work without this export XILINX @@ -104,7 +105,7 @@ $(foreach src,$(1),\ $(eval filepath=$(word 2,$(lib_and_path))) \ $(if $(filepath),,$(eval filepath=$(libname)) $(eval libname=work)) \ $(eval $(2) += $(libname)) \ - $(eval $(3) += $(filepath)) \ + $(eval $(3) += ../$(filepath)) \ ) endef @@ -120,25 +121,25 @@ $(eval $(call process_sources,$(VSOURCE),V_LIBS,V_PATHS)) default: $(BITFILE) clean: - rm -rf build + rm -rf $(BUILD_DIR) -build/$(PROJECT).prj: project.cfg +$(BUILD_DIR)/$(PROJECT).prj: ../project.cfg @echo "Updating $@" - @mkdir -p build + @mkdir -p $(BUILD_DIR) @rm -f $@ @$(foreach idx,$(shell seq 1 $(words $(V_PATHS))),echo "verilog $(word $(idx),$(V_LIBS)) \"../$(word $(idx),$(V_PATHS))\"" >> $@;) @$(foreach idx,$(shell seq 1 $(words $(VHD_PATHS))),echo "vhdl $(word $(idx),$(VHD_LIBS)) \"../$(word $(idx),$(VHD_PATHS))\"" >> $@;) -build/$(PROJECT)_sim.prj: build/$(PROJECT).prj - @cp build/$(PROJECT).prj $@ - @$(foreach file,$(VTEST),echo "verilog work \"../$(file)\"" >> $@;) - @$(foreach file,$(VHDTEST),echo "vhdl work \"../$(file)\"" >> $@;) +$(BUILD_DIR)/$(PROJECT)_sim.prj: $(BUILD_DIR)/$(PROJECT).prj + @cp $(BUILD_DIR)/$(PROJECT).prj $@ + @$(foreach file,$(VTEST),echo "verilog work \"../../$(file)\"" >> $@;) + @$(foreach file,$(VHDTEST),echo "vhdl work \"../../$(file)\"" >> $@;) @echo "verilog work $(XILINX)/verilog/src/glbl.v" >> $@ -build/$(PROJECT).scr: project.cfg +$(BUILD_DIR)/$(PROJECT).scr: ../project.cfg @echo "Updating $@" - @mkdir -p build + @mkdir -p $(BUILD_DIR) @rm -f $@ @echo "run" \ "-ifn $(PROJECT).prj" \ @@ -148,14 +149,14 @@ build/$(PROJECT).scr: project.cfg "-top $(TOPLEVEL)" \ "-ofmt NGC" \ "-p $(TARGET_PART)" \ - > build/$(PROJECT).scr + > $(BUILD_DIR)/$(PROJECT).scr -$(BITFILE): project.cfg $(V_PATHS) $(VHD_PATHS) $(CONSTRAINTS) build/$(PROJECT).prj build/$(PROJECT).scr - @mkdir -p build +$(BITFILE): ../project.cfg $(V_PATHS) $(VHD_PATHS) ../$(CONSTRAINTS) $(BUILD_DIR)/$(PROJECT).prj $(BUILD_DIR)/$(PROJECT).scr + @mkdir -p $(BUILD_DIR) $(call RUN,xst) $(COMMON_OPTS) \ -ifn $(PROJECT).scr $(call RUN,ngdbuild) $(COMMON_OPTS) $(NGDBUILD_OPTS) \ - -p $(TARGET_PART) -uc ../$(CONSTRAINTS) \ + -p $(TARGET_PART) -uc ../../$(CONSTRAINTS) \ $(PROJECT).ngc $(PROJECT).ngd $(call RUN,map) $(COMMON_OPTS) $(MAP_OPTS) \ -p $(TARGET_PART) \ @@ -167,13 +168,13 @@ $(BITFILE): project.cfg $(V_PATHS) $(VHD_PATHS) $(CONSTRAINTS) build/$(PROJECT). @echo "\e[1;32m============ OK ============\e[m\n\n" @echo "\e[1;33m============ Reports.. ===========\e[m\n" @echo "\e[1;97m==== Synthesis Summary Report ====\e[m" - @echo "\e[1;35m ./build/$(PROJECT).srp\e[m\n" + @echo "\e[1;35m ./$(BUILD_DIR)/$(PROJECT).srp\e[m\n" @echo "\e[1;97m======= Map Summary Report =======\e[m" - @echo "\e[1;35m ./build/$(PROJECT).map.mrp\e[m\n" + @echo "\e[1;35m ./$(BUILD_DIR)/$(PROJECT).map.mrp\e[m\n" @echo "\e[1;97m======= PAR Summary Report =======\e[m" - @echo "\e[1;35m ./build/$(PROJECT).par\e[m\n" + @echo "\e[1;35m ./$(BUILD_DIR)/$(PROJECT).par\e[m\n" @echo "\e[1;97m===== Pinout Summary Report ======\e[m" - @echo "\e[1;35m ./build/$(PROJECT)_pad.txt\e[m\n" + @echo "\e[1;35m ./$(BUILD_DIR)/$(PROJECT)_pad.txt\e[m\n" @@ -181,30 +182,30 @@ $(BITFILE): project.cfg $(V_PATHS) $(VHD_PATHS) $(CONSTRAINTS) build/$(PROJECT). # Testing (work in progress) ########################################################################### -trace: project.cfg $(BITFILE) +trace: ../project.cfg $(BITFILE) $(call RUN,trce) $(COMMON_OPTS) $(TRACE_OPTS) \ $(PROJECT).ncd $(PROJECT).pcf @echo "\n\e[1;33m============ Reports.. ===========\e[m\n" @echo "\e[1;97m===== Timing Summary Report ======\e[m" - @echo "\e[1;35m ./build/$(PROJECT).twr\e[m\n" + @echo "\e[1;35m ./$(BUILD_DIR)/$(PROJECT).twr\e[m\n" test: $(TEST_EXES) -build/isim_%$(EXE): $(V_PATHS) $(VHD_PATHS) build/$(PROJECT)_sim.prj $(VTEST) $(VHDTEST) +$(BUILD_DIR)/isim_%$(EXE): $(V_PATHS) $(VHD_PATHS) $(BUILD_DIR)/$(PROJECT)_sim.prj $(VTEST) $(VHDTEST) $(call RUN,fuse) $(COMMON_OPTS) $(FUSE_OPTS) \ -prj $(PROJECT)_sim.prj \ -o isim_$*$(EXE) \ work.$* work.glbl -isim: build/isim_$(TB)$(EXE) - @grep --no-filename --no-messages 'ISIM:' $(TB).{v,vhd} | cut -d: -f2 > build/isim_$(TB).cmd - @echo "run all" >> build/isim_$(TB).cmd - cd build ; ./isim_$(TB)$(EXE) -tclbatch isim_$(TB).cmd +isim: $(BUILD_DIR)/isim_$(TB)$(EXE) + @grep --no-filename --no-messages 'ISIM:' $(TB).{v,vhd} | cut -d: -f2 > $(BUILD_DIR)/isim_$(TB).cmd + @echo "run all" >> $(BUILD_DIR)/isim_$(TB).cmd + cd $(BUILD_DIR) ; ./isim_$(TB)$(EXE) -tclbatch isim_$(TB).cmd -isimgui: build/isim_$(TB)$(EXE) - @grep --no-filename --no-messages 'ISIM:' $(TB).{v,vhd} | cut -d: -f2 > build/isim_$(TB).cmd - @echo "run all" >> build/isim_$(TB).cmd - cd build ; ./isim_$(TB)$(EXE) -gui -tclbatch isim_$(TB).cmd +isimgui: $(BUILD_DIR)/isim_$(TB)$(EXE) + @grep --no-filename --no-messages 'ISIM:' $(TB).{v,vhd} | cut -d: -f2 > $(BUILD_DIR)/isim_$(TB).cmd + @echo "run all" >> $(BUILD_DIR)/isim_$(TB).cmd + cd $(BUILD_DIR) ; ./isim_$(TB)$(EXE) -gui -tclbatch isim_$(TB).cmd ###########################################################################