Clean up bmarks build
authorAndrew Waterman <andrew@sifive.com>
Wed, 22 Mar 2017 01:12:45 +0000 (18:12 -0700)
committerAndrew Waterman <andrew@sifive.com>
Wed, 22 Mar 2017 01:12:45 +0000 (18:12 -0700)
14 files changed:
benchmarks/Makefile
benchmarks/common/crt.S
benchmarks/common/test.ld
benchmarks/dhrystone/bmark.mk [deleted file]
benchmarks/median/bmark.mk [deleted file]
benchmarks/mm/bmark.mk [deleted file]
benchmarks/mt-matmul/bmark.mk [deleted file]
benchmarks/mt-vvadd/bmark.mk [deleted file]
benchmarks/multiply/bmark.mk [deleted file]
benchmarks/qsort/bmark.mk [deleted file]
benchmarks/rsort/bmark.mk [deleted file]
benchmarks/spmv/bmark.mk [deleted file]
benchmarks/towers/bmark.mk [deleted file]
benchmarks/vvadd/bmark.mk [deleted file]

index 15509d02e37692768245ee2a45dae5406f6a3469..28ba2b785c28f7ccfd19f33cd1af261fefb6e483 100644 (file)
@@ -36,20 +36,21 @@ bmarks = \
 
 RISCV_PREFIX ?= riscv$(XLEN)-unknown-elf-
 RISCV_GCC ?= $(RISCV_PREFIX)gcc
-RISCV_GCC_OPTS ?= -mcmodel=medany -static -std=gnu99 -O2 -ffast-math -fno-common -fno-builtin-printf
+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_MT ?= $(RISCV_GCC) -T $(src_dir)/common/test-mt.ld
-RISCV_LINK_OPTS ?= -static -nostdlib -nostartfiles -lgcc
+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 $(src_dir)/, $(bmarks))
-VPATH += $(src_dir)/common
-
 incs  += -I$(src_dir)/../env -I$(src_dir)/common $(addprefix -I$(src_dir)/, $(bmarks))
 objs  :=
 
-include $(patsubst %, $(src_dir)/%/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
@@ -58,25 +59,14 @@ bmarks_riscv_bin  = $(addsuffix .riscv,  $(bmarks))
 bmarks_riscv_dump = $(addsuffix .riscv.dump, $(bmarks))
 bmarks_riscv_out  = $(addsuffix .riscv.out,  $(bmarks))
 
-bmarks_defs   = -DPREALLOCATE=1
-bmarks_cycles = 80000
-
 $(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) -D__ASSEMBLY__=1 \
-                    -c $(incs) $< -o $@
-
 riscv: $(bmarks_riscv_dump)
-run-riscv: $(bmarks_riscv_out)
+run: $(bmarks_riscv_out)
        echo; perl -ne 'print "  [$$1] $$ARGV \t$$2\n" if /\*{3}(.{8})\*{3}(.*)/' \
               $(bmarks_riscv_out); echo;
 
index a821769c152d8cfe2d91e374e0e46d809d0839e5..38b963dedb7dda0b787f433baf3e4fce3ae1616f 100644 (file)
@@ -12,7 +12,7 @@
 # define REGBYTES 4
 #endif
 
-  .text
+  .section ".text.init"
   .globl _start
 _start:
   la t0, trap_entry
index dd32bb12fe168ca55536cb857c21799ccdb5658f..8141dda44cdef51c9f80f2610a15d67bac6f5e06 100644 (file)
@@ -22,7 +22,7 @@ SECTIONS
 
   /* text: test code section */
   . = 0x80000000;
-  .text.init : { crt.o(.text) }
+  .text.init : { *(.text.init) }
 
   .tohost ALIGN(0x1000) : { *(.tohost) }
 
@@ -48,14 +48,14 @@ SECTIONS
   .tdata :
   {
     _tls_data = .;
-    crt.o(.tdata.begin)
+    *(.tdata.begin)
     *(.tdata)
-    crt.o(.tdata.end)
+    *(.tdata.end)
   }
   .tbss :
   {
     *(.tbss)
-    crt.o(.tbss.end)
+    *(.tbss.end)
   }
 
   /* End of uninitalized data segement */
diff --git a/benchmarks/dhrystone/bmark.mk b/benchmarks/dhrystone/bmark.mk
deleted file mode 100644 (file)
index 06b4ab8..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-#=======================================================================
-# UCB CS250 Makefile fragment for benchmarks
-#-----------------------------------------------------------------------
-#
-# Each benchmark directory should have its own fragment which
-# essentially lists what the source files are and how to link them
-# into an riscv and/or host executable. All variables should include
-# the benchmark name as a prefix so that they are unique.
-#
-
-dhrystone_c_src = \
-       dhrystone_main.c \
-       dhrystone.c \
-       syscalls.c \
-
-dhrystone_riscv_src = \
-       crt.S \
-
-dhrystone_c_objs     = $(patsubst %.c, %.o, $(dhrystone_c_src))
-dhrystone_riscv_objs = $(patsubst %.S, %.o, $(dhrystone_riscv_src))
-
-dhrystone_host_bin = dhrystone.host
-$(dhrystone_host_bin): $(dhrystone_c_src)
-       $(HOST_COMP) $^ -o $(dhrystone_host_bin)
-
-dhrystone_riscv_bin = dhrystone.riscv
-$(dhrystone_riscv_bin): $(dhrystone_c_objs) $(dhrystone_riscv_objs)
-       $(RISCV_LINK) $(dhrystone_c_objs) $(dhrystone_riscv_objs) \
-    -o $(dhrystone_riscv_bin) $(RISCV_LINK_OPTS)
-
-junk += $(dhrystone_c_objs) $(dhrystone_riscv_objs) \
-        $(dhrystone_host_bin) $(dhrystone_riscv_bin)
diff --git a/benchmarks/median/bmark.mk b/benchmarks/median/bmark.mk
deleted file mode 100644 (file)
index b489a67..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-#=======================================================================
-# UCB CS250 Makefile fragment for benchmarks
-#-----------------------------------------------------------------------
-#
-# Each benchmark directory should have its own fragment which
-# essentially lists what the source files are and how to link them
-# into an riscv and/or host executable. All variables should include
-# the benchmark name as a prefix so that they are unique.
-#
-
-median_c_src = \
-       median_main.c \
-       median.c \
-       syscalls.c \
-
-median_riscv_src = \
-       crt.S \
-
-median_c_objs     = $(patsubst %.c, %.o, $(median_c_src))
-median_riscv_objs = $(patsubst %.S, %.o, $(median_riscv_src))
-
-median_host_bin = median.host
-$(median_host_bin): $(median_c_src)
-       $(HOST_COMP) $^ -o $(median_host_bin)
-
-median_riscv_bin = median.riscv
-$(median_riscv_bin): $(median_c_objs) $(median_riscv_objs)
-       $(RISCV_LINK) $(median_c_objs) $(median_riscv_objs) -o $(median_riscv_bin) $(RISCV_LINK_OPTS)
-
-junk += $(median_c_objs) $(median_riscv_objs) \
-        $(median_host_bin) $(median_riscv_bin)
diff --git a/benchmarks/mm/bmark.mk b/benchmarks/mm/bmark.mk
deleted file mode 100644 (file)
index ec8fd16..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-#=======================================================================
-# UCB CS250 Makefile fragment for benchmarks
-#-----------------------------------------------------------------------
-#
-# Each benchmark directory should have its own fragment which
-# essentially lists what the source files are and how to link them
-# into an riscv and/or host executable. All variables should include
-# the benchmark name as a prefix so that they are unique.
-#
-
-mm_c_src = \
-       mm_main.c \
-       mm.c \
-       syscalls.c \
-
-mm_riscv_src = \
-       crt.S \
-
-mm_c_objs     = $(patsubst %.c, %.o, $(mm_c_src))
-mm_riscv_objs = $(patsubst %.S, %.o, $(mm_riscv_src))
-
-mm_host_bin = mm.host
-$(mm_host_bin) : $(mm_c_src)
-       $(HOST_COMP) $^ -o $(mm_host_bin)
-
-mm_riscv_bin = mm.riscv
-$(mm_riscv_bin) : $(mm_c_objs) $(mm_riscv_objs)
-       $(RISCV_LINK) $(mm_c_objs) $(mm_riscv_objs) -o $(mm_riscv_bin) $(RISCV_LINK_OPTS)
-
-junk += $(mm_c_objs) $(mm_riscv_objs) \
-        $(mm_host_bin) $(mm_riscv_bin)
diff --git a/benchmarks/mt-matmul/bmark.mk b/benchmarks/mt-matmul/bmark.mk
deleted file mode 100644 (file)
index 6a7140f..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-#=======================================================================
-# UCB CS250 Makefile fragment for benchmarks
-#-----------------------------------------------------------------------
-#
-# Each benchmark directory should have its own fragment which
-# essentially lists what the source files are and how to link them
-# into an riscv and/or host executable. All variables should include
-# the benchmark name as a prefix so that they are unique.
-#
-
-mt_matmul_c_src = \
-       mt-matmul.c \
-       matmul.c \
-       syscalls.c \
-
-mt_matmul_riscv_src = \
-       crt.S \
-
-mt_matmul_c_objs     = $(patsubst %.c, %.o, $(mt_matmul_c_src))
-mt_matmul_riscv_objs = $(patsubst %.S, %.o, $(mt_matmul_riscv_src))
-
-mt_matmul_host_bin = mt-matmul.host
-$(mt_matmul_host_bin) : $(mt_matmul_c_src)
-       $(HOST_COMP) $^ -o $(mt_matmul_host_bin)
-
-mt_matmul_riscv_bin = mt-matmul.riscv
-$(mt_matmul_riscv_bin) : $(mt_matmul_c_objs) $(mt_matmul_riscv_objs)
-       $(RISCV_LINK) $(mt_matmul_c_objs) $(mt_matmul_riscv_objs) $(RISCV_LINK_OPTS) -o $(mt_matmul_riscv_bin)
-
-junk += $(mt_matmul_c_objs) $(mt_matmul_riscv_objs) \
-        $(mt_matmul_host_bin) $(mt_matmul_riscv_bin)
diff --git a/benchmarks/mt-vvadd/bmark.mk b/benchmarks/mt-vvadd/bmark.mk
deleted file mode 100644 (file)
index ff969c1..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-#=======================================================================
-# UCB CS250 Makefile fragment for benchmarks
-#-----------------------------------------------------------------------
-#
-# Each benchmark directory should have its own fragment which
-# essentially lists what the source files are and how to link them
-# into an riscv and/or host executable. All variables should include
-# the benchmark name as a prefix so that they are unique.
-#
-
-mt_vvadd_c_src = \
-       mt-vvadd.c \
-       vvadd.c \
-       syscalls.c \
-
-mt_vvadd_riscv_src = \
-       crt.S \
-
-mt_vvadd_c_objs     = $(patsubst %.c, %.o, $(mt_vvadd_c_src))
-mt_vvadd_riscv_objs = $(patsubst %.S, %.o, $(mt_vvadd_riscv_src))
-
-mt_vvadd_host_bin = mt-vvadd.host
-$(mt_vvadd_host_bin) : $(mt_vvadd_c_src)
-       $(HOST_COMP) $^ -o $(mt_vvadd_host_bin)
-
-mt_vvadd_riscv_bin = mt-vvadd.riscv
-$(mt_vvadd_riscv_bin) : $(mt_vvadd_c_objs) $(mt_vvadd_riscv_objs)
-       $(RISCV_LINK) $(mt_vvadd_c_objs) $(mt_vvadd_riscv_objs) $(RISCV_LINK_OPTS) -o $(mt_vvadd_riscv_bin)
-
-junk += $(mt_vvadd_c_objs) $(mt_vvadd_riscv_objs) \
-        $(mt_vvadd_host_bin) $(mt_vvadd_riscv_bin)
diff --git a/benchmarks/multiply/bmark.mk b/benchmarks/multiply/bmark.mk
deleted file mode 100644 (file)
index 93ba67f..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-#=======================================================================
-# UCB CS250 Makefile fragment for benchmarks
-#-----------------------------------------------------------------------
-#
-# Each benchmark directory should have its own fragment which 
-# essentially lists what the source files are and how to link them
-# into an riscv and/or host executable. All variables should include 
-# the benchmark name as a prefix so that they are unique.
-#
-
-multiply_c_src = \
-       multiply_main.c \
-       multiply.c \
-       syscalls.c \
-
-multiply_riscv_src = \
-       crt.S \
-
-multiply_c_objs     = $(patsubst %.c, %.o, $(multiply_c_src))
-multiply_riscv_objs = $(patsubst %.S, %.o, $(multiply_riscv_src))
-
-multiply_host_bin = multiply.host
-$(multiply_host_bin): $(multiply_c_src)
-       $(HOST_COMP) $^ -o $(multiply_host_bin)
-
-multiply_riscv_bin = multiply.riscv
-$(multiply_riscv_bin): $(multiply_c_objs) $(multiply_riscv_objs)
-       $(RISCV_LINK) $(multiply_c_objs) $(multiply_riscv_objs) -o $(multiply_riscv_bin) $(RISCV_LINK_OPTS)
-
-junk += $(multiply_c_objs) $(multiply_riscv_objs) \
-        $(multiply_host_bin) $(multiply_riscv_bin)
diff --git a/benchmarks/qsort/bmark.mk b/benchmarks/qsort/bmark.mk
deleted file mode 100644 (file)
index 4b39d96..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-#=======================================================================
-# UCB CS250 Makefile fragment for benchmarks
-#-----------------------------------------------------------------------
-#
-# Each benchmark directory should have its own fragment which
-# essentially lists what the source files are and how to link them
-# into an riscv and/or host executable. All variables should include
-# the benchmark name as a prefix so that they are unique.
-#
-
-qsort_c_src = \
-       qsort_main.c \
-       syscalls.c \
-
-qsort_riscv_src = \
-       crt.S \
-
-qsort_c_objs     = $(patsubst %.c, %.o, $(qsort_c_src))
-qsort_riscv_objs = $(patsubst %.S, %.o, $(qsort_riscv_src))
-
-qsort_host_bin = qsort.host
-$(qsort_host_bin) : $(qsort_c_src)
-       $(HOST_COMP) $^ -o $(qsort_host_bin)
-
-qsort_riscv_bin = qsort.riscv
-$(qsort_riscv_bin) : $(qsort_c_objs) $(qsort_riscv_objs)
-       $(RISCV_LINK) $(qsort_c_objs) $(qsort_riscv_objs) -o $(qsort_riscv_bin) $(RISCV_LINK_OPTS)
-
-junk += $(qsort_c_objs) $(qsort_riscv_objs) \
-        $(qsort_host_bin) $(qsort_riscv_bin)
diff --git a/benchmarks/rsort/bmark.mk b/benchmarks/rsort/bmark.mk
deleted file mode 100644 (file)
index 0fa713c..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-#=======================================================================
-# UCB CS250 Makefile fragment for benchmarks
-#-----------------------------------------------------------------------
-#
-# Each benchmark directory should have its own fragment which
-# essentially lists what the source files are and how to link them
-# into an riscv and/or host executable. All variables should include
-# the benchmark name as a prefix so that they are unique.
-#
-
-rsort_c_src = \
-       rsort.c \
-       syscalls.c \
-
-rsort_riscv_src = \
-       crt.S \
-
-rsort_c_objs     = $(patsubst %.c, %.o, $(rsort_c_src))
-rsort_riscv_objs = $(patsubst %.S, %.o, $(rsort_riscv_src))
-
-rsort_host_bin = rsort.host
-$(rsort_host_bin) : $(rsort_c_src)
-       $(HOST_COMP) $^ -o $(rsort_host_bin)
-
-rsort_riscv_bin = rsort.riscv
-$(rsort_riscv_bin) : $(rsort_c_objs) $(rsort_riscv_objs)
-       $(RISCV_LINK) $(rsort_c_objs) $(rsort_riscv_objs) -o $(rsort_riscv_bin) $(RISCV_LINK_OPTS)
-
-junk += $(rsort_c_objs) $(rsort_riscv_objs) \
-        $(rsort_host_bin) $(rsort_riscv_bin)
diff --git a/benchmarks/spmv/bmark.mk b/benchmarks/spmv/bmark.mk
deleted file mode 100644 (file)
index dcfdb19..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-#=======================================================================
-# UCB CS250 Makefile fragment for benchmarks
-#-----------------------------------------------------------------------
-#
-# Each benchmark directory should have its own fragment which
-# essentially lists what the source files are and how to link them
-# into an riscv and/or host executable. All variables should include
-# the benchmark name as a prefix so that they are unique.
-#
-
-spmv_c_src = \
-       spmv_main.c \
-       syscalls.c \
-
-spmv_riscv_src = \
-       crt.S \
-
-spmv_c_objs     = $(patsubst %.c, %.o, $(spmv_c_src))
-spmv_riscv_objs = $(patsubst %.S, %.o, $(spmv_riscv_src))
-
-spmv_host_bin = spmv.host
-$(spmv_host_bin) : $(spmv_c_src)
-       $(HOST_COMP) $^ -o $(spmv_host_bin)
-
-spmv_riscv_bin = spmv.riscv
-$(spmv_riscv_bin) : $(spmv_c_objs) $(spmv_riscv_objs)
-       $(RISCV_LINK) $(spmv_c_objs) $(spmv_riscv_objs) -o $(spmv_riscv_bin) $(RISCV_LINK_OPTS)
-
-junk += $(spmv_c_objs) $(spmv_riscv_objs) \
-        $(spmv_host_bin) $(spmv_riscv_bin)
diff --git a/benchmarks/towers/bmark.mk b/benchmarks/towers/bmark.mk
deleted file mode 100644 (file)
index b16bf04..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-#=======================================================================
-# UCB CS250 Makefile fragment for benchmarks
-#-----------------------------------------------------------------------
-#
-# Each benchmark directory should have its own fragment which
-# essentially lists what the source files are and how to link them
-# into an riscv and/or host executable. All variables should include
-# the benchmark name as a prefix so that they are unique.
-#
-
-towers_c_src = \
-       towers_main.c \
-       syscalls.c \
-
-towers_riscv_src = \
-       crt.S \
-
-towers_c_objs     = $(patsubst %.c, %.o, $(towers_c_src))
-towers_riscv_objs = $(patsubst %.S, %.o, $(towers_riscv_src))
-
-towers_host_bin = towers.host
-$(towers_host_bin) : $(towers_c_src)
-       $(HOST_COMP) $^ -o $(towers_host_bin)
-
-towers_riscv_bin = towers.riscv
-$(towers_riscv_bin) : $(towers_c_objs) $(towers_riscv_objs)
-       $(RISCV_LINK) $(towers_c_objs) $(towers_riscv_objs) -o $(towers_riscv_bin) $(RISCV_LINK_OPTS)
-
-junk += $(towers_c_objs) $(towers_riscv_objs) \
-        $(towers_host_bin) $(towers_riscv_bin)
diff --git a/benchmarks/vvadd/bmark.mk b/benchmarks/vvadd/bmark.mk
deleted file mode 100644 (file)
index 5ab99de..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-#=======================================================================
-# UCB CS250 Makefile fragment for benchmarks
-#-----------------------------------------------------------------------
-#
-# Each benchmark directory should have its own fragment which
-# essentially lists what the source files are and how to link them
-# into an riscv and/or host executable. All variables should include
-# the benchmark name as a prefix so that they are unique.
-#
-
-vvadd_c_src = \
-       vvadd_main.c \
-       syscalls.c \
-
-vvadd_riscv_src = \
-       crt.S \
-
-vvadd_c_objs     = $(patsubst %.c, %.o, $(vvadd_c_src))
-vvadd_riscv_objs = $(patsubst %.S, %.o, $(vvadd_riscv_src))
-
-vvadd_host_bin = vvadd.host
-$(vvadd_host_bin) : $(vvadd_c_src)
-       $(HOST_COMP) $^ -o $(vvadd_host_bin)
-
-vvadd_riscv_bin = vvadd.riscv
-$(vvadd_riscv_bin) : $(vvadd_c_objs) $(vvadd_riscv_objs)
-       $(RISCV_LINK) $(vvadd_c_objs) $(vvadd_riscv_objs) -o $(vvadd_riscv_bin) $(RISCV_LINK_OPTS)
-
-junk += $(vvadd_c_objs) $(vvadd_riscv_objs) \
-        $(vvadd_host_bin) $(vvadd_riscv_bin)