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.
This commit is contained in:
2024-03-10 16:05:19 +01:00
parent 5e8553d8af
commit 796bfaf493

View File

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