From 796bfaf493bd4e9d4d9ca6f1dd824ea7fb90c55d Mon Sep 17 00:00:00 2001 From: Max P Date: Sun, 10 Mar 2024 16:05:19 +0100 Subject: [PATCH] Update Makefile to version 1.0.3 with revised build paths Improved the build directory management by introducing a new variable `BUILD_DIR`, set to `working`, for a more flexible directory handling. This change ensures that all build artifacts are now generated in a designated directory, which can be easily modified. Adjusted relative paths reference this new directory, ensuring compatibility with the updated structure. The version bump to 1.0.3 reflects these enhancements and potential future improvements in the build process. --- Makefile | 67 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 34 insertions(+), 33 deletions(-) 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 ###########################################################################