summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile58
1 files changed, 51 insertions, 7 deletions
diff --git a/Makefile b/Makefile
index 1292b22..15b5ed0 100644
--- a/Makefile
+++ b/Makefile
@@ -5,8 +5,13 @@ COV_DIR := cov
RTL_DIR := rtl
TB_DIR := tb
SIM_DIR := sim
+DEMO_DIR := demo
+DIST_DIR := dist
TB_SIM_DIR := $(TB_DIR)/sim
SIM_OBJ_DIR := $(OBJ_DIR)/$(TOP)/sim
+DEMO_OBJ_DIR := $(OBJ_DIR)/$(TOP)/demo
+DIST_OBJ_DIR := $(OBJ_DIR)/$(TOP)/dist
+RBF_OUT_DIR := output_files
VERILATOR ?= verilator
GENHTML ?= genhtml
CROSS_CC := $(CROSS_COMPILE)gcc
@@ -18,13 +23,20 @@ ifdef FASTER_IS_BETTER
DISABLE_COV := 1
DISABLE_RAND := 1
DISABLE_TRACE := 1
+
+ CXXFLAGS += -O3 -flto
+ LDFLAGS += -O3 -flto
endif
+export CXXFLAGS LDFLAGS
+
X_MODE := $(if $(DISABLE_RAND),fast,unique)
+CC_CPU := -mcpu=arm810
+
VFLAGS ?= \
--x-assign $(X_MODE) --x-initial $(X_MODE) \
- $(if $(DISABLE_THREADS),,--threads $(shell nproc)) \
+ $(if $(ENABLE_THREADS),--threads $(shell nproc)) \
$(if $(DISABLE_TRACE),,--trace) \
$(if $(DISABLE_COV),,--coverage)
@@ -37,7 +49,19 @@ SIMS := $(patsubst $(TB_SIM_DIR)/%.py,%,$(wildcard $(TB_SIM_DIR)/*.py))
all: sim
clean:
- rm -rf $(OBJ_DIR) $(VCD_DIR) $(COV_DIR)
+ rm -rf $(DIST_DIR) $(OBJ_DIR) $(VCD_DIR) $(COV_DIR)
+
+dist: $(if $(DISABLE_COV),,cov)
+ @mkdir -p $(DIST_DIR)
+ @rm -rf $(DIST_OBJ_DIR) && mkdir -p $(DIST_OBJ_DIR)/{bin,bitstream,doc,results,src}
+ @git ls-files | xargs cp --parents -rvt $(DIST_OBJ_DIR)/src
+ @mv -vt $(DIST_OBJ_DIR) $(DIST_OBJ_DIR)/src/README.md
+ @$(if $(DISABLE_COV),,cp -rvt $(DIST_OBJ_DIR)/results $(COV_DIR))
+ @[ -f $(RBF_OUT_DIR)/$(TOP).rbf ] \
+ && cp -vt $(DIST_OBJ_DIR)/bitstream $(RBF_OUT_DIR)/$(TOP).rbf \
+ || echo "Warning: missing bitstream at $(RBF_OUT_DIR)/$(TOP).rbf" >&2
+ cd $(DIST_OBJ_DIR) && zip -qr \
+ $(shell pwd)/$(DIST_DIR)/$(TOP)-$(shell git rev-parse --short HEAD)-$(shell date +'%Y%m%d-%H%M%S').zip *
trace: trace/$(TOP)
@@ -55,7 +79,10 @@ sim/%: $(SIM_DIR)/sim.py $(TB_SIM_DIR)/%.py exe/$(TOP) $(SIM_OBJ_DIR)/%.bin
$(if $(DISABLE_COV),,$(SIM_OBJ_DIR)/$*.cov)
vmlaunch: $(SIM_DIR)/sim.py $(SIM_DIR)/gdbstub.py exe/$(TOP)
- @$< $(SIM_DIR)/gdbstub.py $(OBJ_DIR)/$(TOP)/V$(TOP) build/u-boot.bin
+ @ENABLE_VIDEO=1 $< $(SIM_DIR)/gdbstub.py $(OBJ_DIR)/$(TOP)/V$(TOP) build/u-boot.bin
+
+demo: $(SIM_DIR)/sim.py $(SIM_DIR)/gdbstub.py exe/$(TOP) $(DEMO_OBJ_DIR)/demo.bin
+ @START_HALTED=0 $< $(SIM_DIR)/gdbstub.py $(OBJ_DIR)/$(TOP)/V$(TOP) $(DEMO_OBJ_DIR)/demo.bin
ifndef DISABLE_COV
$(COV_DIR): $(OBJ_DIR)/$(TOP)/cov.info
@@ -66,19 +93,34 @@ $(COV_DIR)/%: $(SIM_OBJ_DIR)/%.cov
$(SIM_OBJ_DIR)/%.cov: sim/%
-$(OBJ_DIR)/$(TOP)/cov.info: $(patsubst %,$(SIM_OBJ_DIR)/%.cov,$(SIMS))
+$(OBJ_DIR)/$(TOP)/cov.info: $(patsubst %,sim/%,$(SIMS))
$(VERILATOR)_coverage -write-info $@ $(SIM_OBJ_DIR)/*.cov
endif
-$(SIM_OBJ_DIR)/%.bin: $(SIM_OBJ_DIR)/%
+%.bin: %
$(CROSS_OBJCOPY) -O binary --only-section=._img $< $@
$(SIM_OBJ_DIR)/%: $(SIM_OBJ_DIR)/%.o $(SIM_OBJ_DIR)/start.o
$(CROSS_CC) $(CROSS_LDFLAGS) -o $@ -g -T $(SIM_DIR)/link.ld -nostartfiles -nostdlib $^
+$(OBJ_DIR)/%.bin: $(SIM_OBJ_DIR)/%
+ $(CROSS_OBJCOPY) -O binary --only-section=._img $< $@
+
+$(DEMO_OBJ_DIR)/demo: $(DEMO_DIR)/link.ld $(patsubst $(DEMO_DIR)/%,$(DEMO_OBJ_DIR)/%.o,\
+ $(basename $(wildcard $(DEMO_DIR)/*.c) $(wildcard $(DEMO_DIR)/*.S)))
+ $(CROSS_CC) $(CROSS_LDFLAGS) -o $@ -g -nostartfiles -nostdlib -T $^
+
+$(DEMO_OBJ_DIR)/%.o: $(DEMO_DIR)/%.c $(wildcard $(DEMO_DIR)/*.h)
+ @mkdir -p $(DEMO_OBJ_DIR)
+ $(CROSS_CC) $(CROSS_CFLAGS) -o $@ -g -c $< $(CC_CPU)
+
+$(DEMO_OBJ_DIR)/%.o: $(DEMO_DIR)/%.S
+ @mkdir -p $(DEMO_OBJ_DIR)
+ $(CROSS_CC) $(CROSS_CFLAGS) -o $@ -g -c $<
+
$(SIM_OBJ_DIR)/%.o: $(TB_SIM_DIR)/%.c
@mkdir -p $(SIM_OBJ_DIR)
- $(CROSS_CC) $(CROSS_CFLAGS) -o $@ -g -c $< -mcpu=arm810
+ $(CROSS_CC) $(CROSS_CFLAGS) -o $@ -g -c $< $(CC_CPU)
$(SIM_OBJ_DIR)/%.o: $(TB_SIM_DIR)/%.S
@mkdir -p $(SIM_OBJ_DIR)
@@ -93,7 +135,9 @@ exe: exe/$(TOP)
exe/%: $(OBJ_DIR)/%/V%.mk
$(MAKE) -C $(OBJ_DIR)/$* -f V$*.mk
-.PRECIOUS: $(SIM_OBJ_DIR)/% $(SIM_OBJ_DIR)/%.o $(SIM_OBJ_DIR)/%.bin $(SIM_OBJ_DIR)/%.cov
+.PRECIOUS: $(SIM_OBJ_DIR)/% $(SIM_OBJ_DIR)/%.o $(SIM_OBJ_DIR)/%.cov %.bin
+.PHONY: all clean dist demo sim
+
.SECONDEXPANSION:
$(OBJ_DIR)/%.mk: \