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:
67
Makefile
67
Makefile
@@ -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
|
||||||
|
|
||||||
|
|
||||||
###########################################################################
|
###########################################################################
|
||||||
|
Reference in New Issue
Block a user