# ------------------------------------------------- # User options # ------------------------------------------------- # SRCS # WITH_VCD # WITH_GHW TARGET ?= default ENTITY ?= default WORK_LIB ?= work LANG_STD ?= 93c IEEE_STD ?= standard RUN_TIME ?= 1000ns # Build path BUILD_DIR ?= build/$(TARGET) WORK_DIR ?= $(BUILD_DIR)/$(WORK_LIB) # Can be pre-initialized by user RUN_OPTS += --stop-time=$(RUN_TIME) GHDL_OPTS += --work=$(WORK_LIB) --workdir=$(WORK_DIR) --std=$(LANG_STD) --ieee=$(IEEE_STD) # ------------------------------------------------- # GHDL binary GHDL := ghdl GHDL_GCC := ghdl-gcc # Output stuff SIM_FILE-$(WITH_VCD) := $(BUILD_DIR)/$(TARGET).vcd SIM_FILE-$(WITH_FST) := $(BUILD_DIR)/$(TARGET).fst SIM_FILE-$(WITH_GHW) := $(BUILD_DIR)/$(TARGET).ghw GTK_OPTS-$(WITH_VCD) := --vcd=$(SIM_FILE-y) GTK_OPTS-$(WITH_FST) := --fst=$(SIM_FILE-y) GTK_OPTS-$(WITH_GHW) := --wave=$(SIM_FILE-y) # Targets all: analyze $(WORK_DIR): mkdir -p $@ syntax: $(GHDL) -s $(GHDL_OPTS) $(SRCS) import: $(GHDL) -i $(GHDL_OPTS) $(SRCS) analyze: $(WORK_DIR) $(SRCS) $(GHDL) -a $(GHDL_OPTS) $(SRCS) anaborate: $(WORK_DIR) $(SRCS) $(GHDL) -c $(GHDL_OPTS) -o $(BUILD_DIR)/$(TARGET) $(SRCS) -e $(ENTITY) makeunit: analyze $(GHDL) -m $(GHDL_OPTS) $(ENTITY) elaborate: analyze $(GHDL) -e $(GHDL_OPTS) $(ENTITY) run: analyze $(GHDL) -r $(GHDL_OPTS) $(ENTITY) $(RUN_OPTS) run_show: analyze $(GHDL) -r $(GHDL_OPTS) $(ENTITY) $(RUN_OPTS) $(GTK_OPTS-y) >$(BUILD_DIR)/$(TARGET).log synth: analyze $(GHDL) --synth $(GHDL_OPTS) $(ENTITY) show: run_show exec gtkwave -f $(SIM_FILE-y) -a $(BUILD_DIR)/$(TARGET).gtkw & clean: rm -rf $(WORK_DIR) rm -f $(BUILD_DIR)/$(TARGET)*.vcd rm -f $(BUILD_DIR)/$(TARGET)*.fst rm -f $(BUILD_DIR)/$(TARGET)*.ghw rm -f $(BUILD_DIR)/$(TARGET)*.log rm -f $(BUILD_DIR)/$(TARGET)*.o mrproper: rm -rf $(BUILD_DIR)