Clean up benchmarks build
[riscv-tests.git] / benchmarks / Makefile
index 220a03360f4c0231061d8719346192c4f4b1b8a9..ca201c9ab2f1ac12ecec73fd64f5982fadba108e 100644 (file)
@@ -4,9 +4,11 @@
 # Yunsup Lee (yunsup@cs.berkeley.edu)
 #
 
+XLEN ?= 64
+
 default: all
 
-bmarkdir = .
+src_dir = .
 
 instname = riscv-bmarks
 instbasedir = $(UCB_VLSI_HOME)/install
@@ -18,105 +20,56 @@ instbasedir = $(UCB_VLSI_HOME)/install
 bmarks = \
        median \
        qsort \
+       rsort \
        towers \
        vvadd \
        multiply \
-       dgemm \
+       mm \
        dhrystone \
        spmv \
-       vec-vvadd \
-       vec-cmplxmult \
-       vec-matmul \
        mt-vvadd \
        mt-matmul \
 
-bmarks_host = \
-       median \
-       qsort \
-       towers \
-       vvadd \
-       multiply \
-       dgemm \
-       spmv \
-       vec-vvadd \
-       vec-cmplxmult \
-       vec-matmul \
-
 #--------------------------------------------------------------------
 # Build rules
 #--------------------------------------------------------------------
 
-HOST_OPTS = -std=gnu99 -DPREALLOCATE=0 -DHOST_DEBUG=1
-HOST_COMP = gcc $(HOST_OPTS)
-
-RISCV_GCC = riscv-gcc
-RISCV_GCC_OPTS = -std=gnu99 -DSET_STATS -O2 -nostdlib -nostartfiles -ffast-math
-RISCV_LINK = riscv-gcc -T $(bmarkdir)/common/test.ld
-RISCV_LINK_MT = riscv-gcc -T $(bmarkdir)/common/test-mt.ld
-RISCV_LINK_OPTS = -lc
-RISCV_LINK_SYSCALL = $(bmarkdir)/common/syscalls.c -lc
-RISCV_OBJDUMP = riscv-objdump --disassemble-all --disassemble-zeroes --section=.text --section=.text.startup --section=.data
-RISCV_SIM = spike
+RISCV_PREFIX ?= riscv$(XLEN)-unknown-elf-
+RISCV_GCC ?= $(RISCV_PREFIX)gcc
+RISCV_GCC_OPTS ?= -DPREALLOCATE=1 -mcmodel=medany -static -std=gnu99 -O2 -ffast-math -fno-common -fno-builtin-printf
+RISCV_LINK ?= $(RISCV_GCC) -T $(src_dir)/common/test.ld $(incs)
+RISCV_LINK_OPTS ?= -static -nostdlib -nostartfiles -lgcc -T $(src_dir)/common/test.ld
+RISCV_OBJDUMP ?= $(RISCV_PREFIX)objdump --disassemble-all --disassemble-zeroes --section=.text --section=.text.startup --section=.data
+RISCV_SIM ?= spike --isa=rv$(XLEN)gc
 
-VPATH += $(addprefix $(bmarkdir)/, $(bmarks))
-VPATH += $(bmarkdir)/common
-
-incs  += -I$(bmarkdir)/common $(addprefix -I$(bmarkdir)/, $(bmarks))
+incs  += -I$(src_dir)/../env -I$(src_dir)/common $(addprefix -I$(src_dir)/, $(bmarks))
 objs  :=
 
-include $(patsubst %, $(bmarkdir)/%/bmark.mk, $(bmarks))
+define compile_template
+$(1).riscv: $(wildcard $(src_dir)/$(1)/*) $(wildcard $(src_dir)/common/*)
+       $$(RISCV_GCC) $$(incs) $$(RISCV_GCC_OPTS) $$(RISCV_LINK_OPTS) -o $$@ $(wildcard $(src_dir)/$(1)/*.c) $(wildcard $(src_dir)/common/*.c) $(wildcard $(src_dir)/common/*.S)
+endef
+
+$(foreach bmark,$(bmarks),$(eval $(call compile_template,$(bmark))))
 
 #------------------------------------------------------------
 # Build and run benchmarks on riscv simulator
 
 bmarks_riscv_bin  = $(addsuffix .riscv,  $(bmarks))
 bmarks_riscv_dump = $(addsuffix .riscv.dump, $(bmarks))
-bmarks_riscv_hex = $(addsuffix .riscv.hex, $(bmarks))
 bmarks_riscv_out  = $(addsuffix .riscv.out,  $(bmarks))
 
-bmarks_defs   = -DPREALLOCATE=1 -DHOST_DEBUG=0
-bmarks_cycles = 80000
-
-%.hex: %
-       elf2hex 16 32768 $< > $@
-
 $(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) \
-                    -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}(.*)/' \
-              $(bmarks_riscv_out); echo;
+riscv: $(bmarks_riscv_dump)
+run: $(bmarks_riscv_out)
 
 junk += $(bmarks_riscv_bin) $(bmarks_riscv_dump) $(bmarks_riscv_hex) $(bmarks_riscv_out)
 
-#------------------------------------------------------------
-# Build and run benchmarks on host machine
-
-bmarks_host_bin = $(addsuffix .host, $(bmarks_host))
-bmarks_host_out = $(addsuffix .host.out, $(bmarks_host))
-
-$(bmarks_host_out): %.host.out: %.host
-       ./$< > $@
-
-host: $(bmarks_host_bin)
-run-host: $(bmarks_host_out)
-       echo; perl -ne 'print "  [$$1] $$ARGV \t$$2\n" if /\*{3}(.{8})\*{3}(.*)/' \
-              $(bmarks_host_out); echo;
-
-junk += $(bmarks_host_bin) $(bmarks_host_out)
-
 #------------------------------------------------------------
 # Default