#/======================================================================= # UCB VLSI FLOW: Makefile for riscv-bmarks/mt #----------------------------------------------------------------------- # Henry Cook (hcook@cs.berkeley.edu) # default: all bmarkdir = . common = ../benchmarks/common instname = riscv-bmarks-mt instbasedir = $(UCB_VLSI_HOME)/install #-------------------------------------------------------------------- # Sources #-------------------------------------------------------------------- bmarks_matmul = \ ad_matmul\ ae_matmul\ af_matmul\ ag_matmul\ ai_matmul\ ak_matmul\ al_matmul\ am_matmul\ an_matmul\ ap_matmul\ aq_matmul\ ar_matmul\ at_matmul\ av_matmul\ ay_matmul\ az_matmul\ bb_matmul\ bc_matmul\ bf_matmul\ bh_matmul\ bj_matmul\ bk_matmul\ bm_matmul\ bo_matmul\ br_matmul\ bs_matmul\ ce_matmul\ cf_matmul\ cg_matmul\ ci_matmul\ ck_matmul\ cl_matmul\ cm_matmul\ cs_matmul\ cv_matmul\ cy_matmul\ dc_matmul\ df_matmul\ dm_matmul\ do_matmul\ dr_matmul\ ds_matmul\ du_matmul\ dv_matmul\ bmarks_vvadd = \ vvadd0\ vvadd1\ vvadd2\ vvadd3\ vvadd4\ bmarks = $(bmarks_vvadd) $(bmarks_matmul) #-------------------------------------------------------------------- # Build rules #-------------------------------------------------------------------- RISCV_PREFIX=riscv64-unknown-elf- RISCV_GCC = $(RISCV_PREFIX)gcc RISCV_GCC_OPTS = -Wa,-march=RVIMAFDXhwacha -std=gnu99 -O2 -ffast-math RISCV_LINK = $(RISCV_GCC) -T $(common)/test.ld $(incs) RISCV_LINK_OPTS = -nostdlib -nostartfiles -ffast-math -lc RISCV_OBJDUMP = $(RISCV_PREFIX)objdump --disassemble-all --disassemble-zeroes --section=.text --section=.text.startup --section=.data RISCV_SIM = spike -p2 VPATH += $(common) $(common)/../mt-matmul $(common)/../mt-vvadd incs += -I. -I$(bmarkdir)/../env -I$(common) -I$(common)/../mt-matmul -I$(common)/../mt-vvadd objs := #include $(patsubst %, $(bmarkdir)/%/bmark.mk, $(bmarks)) #------------------------------------------------------------ # Build and run benchmarks on riscv simulator #------------------------------------------------------------ bmarks_riscv_obj = $(addsuffix .o, $(bmarks)) bmarks_riscv_matmul_bin = $(addsuffix .riscv, $(bmarks_matmul)) bmarks_riscv_vvadd_bin = $(addsuffix .riscv, $(bmarks_vvadd)) bmarks_riscv_dump = $(addsuffix .riscv.dump, $(bmarks)) bmarks_riscv_hex = $(addsuffix .riscv.hex, $(bmarks)) bmarks_riscv_out = $(addsuffix .riscv.out, $(bmarks)) bmarks_riscv_bin = $(bmarks_riscv_matmul_bin) $(bmarks_riscv_vvadd_bin) bmarks_defs = -DPREALLOCATE=1 -DHOST_DEBUG=0 bmarks_cycles = 80000 %.hex: % elf2hex 16 32768 $< > $@ $(bmarks_riscv_vvadd_bin): %.riscv: %.o mt-vvadd.o syscalls.o crt.o $(RISCV_LINK) $< mt-vvadd.o syscalls.o crt.o $(RISCV_LINK_OPTS) -o $@ $(bmarks_riscv_matmul_bin): %.riscv: %.o mt-matmul.o syscalls.o crt.o $(RISCV_LINK) $< mt-matmul.o syscalls.o crt.o $(RISCV_LINK_OPTS) -o $@ $(bmarks_riscv_dump): %.riscv.dump: %.riscv $(RISCV_OBJDUMP) $< > $@ $(bmarks_riscv_out): %.riscv.out: %.riscv $(RISCV_SIM) $< > $@ %.o: %.c $(RISCV_GCC) $(RISCV_GCC_OPTS) $(bmarks_defs) -D__ASSEMBLY__=1 \ -c $(incs) $< -o $@ %.o: %.S $(RISCV_GCC) $(RISCV_GCC_OPTS) $(bmarks_defs) \ -c $(incs) $< -o $@ riscv: $(bmarks_riscv_dump) $(bmarks_riscv_hex) run-riscv: $(bmarks_riscv_out) echo; perl -ne 'print " [$$1] $$ARGV \t$$2\n" if /\*{3}(.{8})\*{3}(.*)/' \ junk += $(bmarks_riscv_bin) $(bmarks_riscv_dump) $(bmarks_riscv_hex) $(bmarks_riscv_out) $(bmarks_riscv_obj) #------------------------------------------------------------ # Default all: riscv #------------------------------------------------------------ # Install date_suffix = $(shell date +%Y-%m-%d_%H-%M) install_dir = $(instbasedir)/$(instname)-$(date_suffix) latest_install = $(shell ls -1 -d $(instbasedir)/$(instname)* | tail -n 1) install: mkdir $(install_dir) cp -r $(bmarks_riscv_bin) $(bmarks_riscv_dump) $(install_dir) install-link: rm -rf $(instbasedir)/$(instname) ln -s $(latest_install) $(instbasedir)/$(instname) #------------------------------------------------------------ # Clean up clean: rm -rf $(objs) $(junk) syscall.o crt.o mt-matmul.o mt-vvadd.o