110 lines
3.6 KiB
Makefile
110 lines
3.6 KiB
Makefile
# SPDX-License-Identifier: BSD-3-Clause
|
|
# Copyright (C) 2023 by NanoXplore, France - all rights reserved
|
|
|
|
# Needed by timing test
|
|
export PROJECT := angie_bitstream
|
|
TARGET_PART := xc6slx9-2tqg144
|
|
export TOPLEVEL := S609
|
|
|
|
# Detects the ROOT dir from the .git marker
|
|
sp :=
|
|
sp +=
|
|
_walk = $(if $1,$(wildcard /$(subst $(sp),/,$1)/$2) $(call _walk,$(wordlist 2,$(words $1),x $1),$2))
|
|
_find = $(firstword $(call _walk,$(strip $(subst /, ,$1)),$2))
|
|
_ROOT := $(patsubst %/.git,%,$(call _find,$(CURDIR),.git))
|
|
|
|
SHELL := /bin/bash
|
|
TOP_DIR := $(realpath $(_ROOT))
|
|
HDL_DIR := $(CURDIR)
|
|
SRC_DIR := $(HDL_DIR)/src
|
|
TOOLS_DIR := $(TOP_DIR)/tools/build
|
|
COMMON_DIR := $(TOP_DIR)/common/hdl
|
|
COMMON_HDL_DIR := $(COMMON_DIR)/src
|
|
COMMON_LIBS := $(COMMON_DIR)/libs
|
|
HDL_BUILD_DIR := $(HDL_DIR)/build
|
|
OUTPUT_DIR ?= $(HDL_BUILD_DIR)/output
|
|
FINAL_OUTPUT_DIR := $(OUTPUT_DIR)/$(PROJECT)
|
|
|
|
# Tools
|
|
MKDIR := mkdir -p
|
|
CP := cp -f
|
|
|
|
HDL_SRC_PATH := $(addprefix $(COMMON_DIR)/ips/, $(HDL_IPS)) $(HDL_DIR)
|
|
VHDSOURCE += $(foreach ip,$(HDL_SRC_PATH),$(wildcard $(ip)/src/*.vhd))
|
|
VSOURCE += $(foreach ip,$(HDL_SRC_PATH),$(wildcard $(ip)/src/*.v))
|
|
VSOURCE += $(foreach ip,$(HDL_SRC_PATH),$(wildcard $(ip)/src/*.vh))
|
|
|
|
CONSTRAINTS ?= $(SRC_DIR)/$(PROJECT).ucf
|
|
|
|
COMMON_OPTS := -intstyle xflow
|
|
XST_OPTS :=
|
|
NGDBUILD_OPTS :=
|
|
MAP_OPTS := -mt 2
|
|
PAR_OPTS := -mt 4
|
|
BITGEN_OPTS := -g Binary:Yes
|
|
|
|
XILINX_PLATFORM := lin64
|
|
PATH := $(PATH):$(XILINX_HOME)/bin/$(XILINX_PLATFORM)
|
|
|
|
RUN = @echo -ne "\n\n\e[1;33m======== $(1) ========\e[m\n\n"; \
|
|
cd $(HDL_BUILD_DIR) && $(XILINX_HOME)/bin/$(XILINX_PLATFORM)/$(1)
|
|
|
|
compile: $(HDL_BUILD_DIR)/$(PROJECT).bin
|
|
|
|
install: $(HDL_BUILD_DIR)/$(PROJECT).bin
|
|
$(MKDIR) $(FINAL_OUTPUT_DIR)
|
|
$(CP) $(HDL_BUILD_DIR)/$(PROJECT).bin $(FINAL_OUTPUT_DIR)
|
|
|
|
clean:
|
|
rm -rf $(HDL_BUILD_DIR)
|
|
|
|
$(HDL_BUILD_DIR)/$(PROJECT).bin: $(HDL_BUILD_DIR)/$(PROJECT).ncd
|
|
$(call RUN,bitgen) $(COMMON_OPTS) $(BITGEN_OPTS) \
|
|
-w $(PROJECT).ncd $(PROJECT).bit
|
|
|
|
$(HDL_BUILD_DIR)/$(PROJECT).ncd: $(HDL_BUILD_DIR)/$(PROJECT).map.ncd
|
|
$(call RUN,par) $(COMMON_OPTS) $(PAR_OPTS) \
|
|
-w $(PROJECT).map.ncd $(PROJECT).ncd $(PROJECT).pcf
|
|
|
|
$(HDL_BUILD_DIR)/$(PROJECT).map.ncd: $(HDL_BUILD_DIR)/$(PROJECT).ngd
|
|
$(call RUN,map) $(COMMON_OPTS) $(MAP_OPTS) \
|
|
-p $(TARGET_PART) \
|
|
-w $(PROJECT).ngd -o $(PROJECT).map.ncd $(PROJECT).pcf
|
|
|
|
$(HDL_BUILD_DIR)/$(PROJECT).ngd: $(HDL_BUILD_DIR)/$(PROJECT).ngc
|
|
$(call RUN,ngdbuild) $(COMMON_OPTS) $(NGDBUILD_OPTS) \
|
|
-p $(TARGET_PART) -uc $(CONSTRAINTS) \
|
|
$(PROJECT).ngc $(PROJECT).ngd
|
|
|
|
$(HDL_BUILD_DIR)/$(PROJECT).ngc: $(HDL_BUILD_DIR)/$(PROJECT).prj $(HDL_BUILD_DIR)/$(PROJECT).scr
|
|
$(call RUN,xst) $(COMMON_OPTS) -ifn $(PROJECT).scr
|
|
|
|
$(HDL_BUILD_DIR)/$(PROJECT).scr: | $(HDL_BUILD_DIR)
|
|
@echo "Updating $@"
|
|
@mkdir -p $(HDL_BUILD_DIR)
|
|
@rm -f $@
|
|
@echo "run" \
|
|
"-ifn $(PROJECT).prj" \
|
|
"-ofn $(PROJECT).ngc" \
|
|
"-ifmt mixed" \
|
|
"$(XST_OPTS)" \
|
|
"-top $(TOPLEVEL)" \
|
|
"-ofmt NGC" \
|
|
"-p $(TARGET_PART)" \
|
|
> $(HDL_BUILD_DIR)/$(PROJECT).scr
|
|
|
|
$(HDL_BUILD_DIR)/$(PROJECT).prj: | $(HDL_BUILD_DIR)
|
|
@echo "Updating $@"
|
|
@rm -f $@
|
|
@$(foreach file,$(VSOURCE),echo "verilog work \"$(file)\"" >> $@;)
|
|
@$(foreach file,$(VHDSOURCE),echo "vhdl work \"$(file)\"" >> $@;)
|
|
@$(foreach lib,$(HDL_LIBS),$(foreach file,$(wildcard $(COMMON_LIBS)/$(lib)/src/*.vhd),echo "vhdl $(lib) \"$(file)\"" >> $@;))
|
|
@$(foreach lib,$(HDL_LIBS),$(foreach file,$(wildcard $(COMMON_LIBS)/$(lib)/src/*.v),echo "verilog $(lib) \"$(file)\"" >> $@;))
|
|
@$(foreach lib,$(HDL_LIBS),$(foreach file,$(wildcard $(COMMON_LIBS)/$(lib)/src/*.vh),echo "verilog $(lib) \"$(file)\"" >> $@;))
|
|
|
|
$(HDL_BUILD_DIR):
|
|
$(MKDIR) $(HDL_BUILD_DIR)
|
|
|
|
.PHONY: clean compile install
|
|
|