Skip to content

Commit 931c59d

Browse files
committed
Add rv8-bench
1 parent d181b2e commit 931c59d

File tree

12 files changed

+13722
-3
lines changed

12 files changed

+13722
-3
lines changed

Makefile

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,26 +49,27 @@ all:
4949
$(Q)$(MAKE) -C src/asm-hello BUILD_DIR="$(BUILD_DIR)" RV32_EXT=$(RV32_EXT) OPT_LEVEL="$(OPT_LEVEL)" all
5050
$(Q)$(MAKE) -C src/cc BUILD_DIR="$(BUILD_DIR)" RV32_EXT=$(RV32_EXT) OPT_LEVEL="$(OPT_LEVEL)" all
5151
$(Q)$(MAKE) -C src/ansibench/nbench BUILD_DIR="$(BUILD_DIR)" RV32_EXT=$(RV32_EXT) OPT_LEVEL="$(OPT_LEVEL)" all
52+
$(Q)$(MAKE) -C src/rv8-bench BUILD_DIR="$(BUILD_DIR)" RV32_EXT=$(RV32_EXT) OPT_LEVEL="$(OPT_LEVEL)" all
5253

5354
include mk/common.mk
5455
include mk/toolchain.mk
5556

5657
build-O0: $(addprefix $(BUILD_DIR)/$(RV32_EXT)/O0/,$(EXECUTABLES))
5758

5859
$(BUILD_DIR)/$(RV32_EXT)/O0/%.elf: $(SRC_DIR)/%.c | build-toolchain
59-
$(VECHO) " RISCVCC\t$(patsubst $(abspath $(SRC_DIR)/..)/%,%,$@)\n"
60+
$(VECHO) " RISCVCC\t$(patsubst $(abspath $(BUILD_DIR)/..)/%,%,$@)\n"
6061
$(Q)$(CROSS_COMPILE) -o $@ -O0 $(CFLAGS) $< $(LDFLAGS)
6162

6263
build-O1: $(addprefix $(BUILD_DIR)/$(RV32_EXT)/O1/,$(EXECUTABLES))
6364

6465
$(BUILD_DIR)/$(RV32_EXT)/O1/%.elf: $(SRC_DIR)/%.c | build-toolchain
65-
$(VECHO) " RISCVCC\t$(patsubst $(abspath $(SRC_DIR)/..)/%,%,$@)\n"
66+
$(VECHO) " RISCVCC\t$(patsubst $(abspath $(BUILD_DIR)/..)/%,%,$@)\n"
6667
$(Q)$(CROSS_COMPILE) -o $@ -O1 $(CFLAGS) $< $(LDFLAGS)
6768

6869
build-O2: $(addprefix $(BUILD_DIR)/$(RV32_EXT)/O2/,$(EXECUTABLES))
6970

7071
$(BUILD_DIR)/$(RV32_EXT)/O2/%.elf: $(SRC_DIR)/%.c | build-toolchain
71-
$(VECHO) " RISCVCC\t$(patsubst $(abspath $(SRC_DIR)/..)/%,%,$@)\n"
72+
$(VECHO) " RISCVCC\t$(patsubst $(abspath $(BUILD_DIR)/..)/%,%,$@)\n"
7273
$(Q)$(CROSS_COMPILE) -o $@ -O2 $(CFLAGS) $< $(LDFLAGS)
7374

7475
clean:

mk/toolchain.mk

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,6 @@ build-toolchain:
1818
--disable-gdb
1919
$(MAKE) -C $(RISCV_TOOLCHAIN_DIR) clean all
2020
endif
21+
22+
CROSS_COMPILE := $(shell find $(RISCV_TOOLCHAIN_DIR)/build/$(RV32_EXT) -name $(RV32_PREFIX)gcc)
23+
RV32_PREFIX := $(patsubst %gcc,%,$(CROSS_COMPILE))

src/rv8-bench/Makefile

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
RV32_EXT ?= rv32gc
2+
OPT_LEVEL ?= 0 1 2
3+
4+
CURDIR := $(abspath $(dir $(lastword $(MAKEFILE_LIST))))
5+
SRC_DIR := $(CURDIR)/src
6+
7+
CFLAGS := -std=c99
8+
CXXFLAGS :=
9+
LDFLAGS := -lm
10+
11+
# prevent lazy set
12+
ifeq ($(BUILD_DIR),)
13+
BUILD_DIR := $(CURDIR)/build
14+
endif
15+
16+
SRCS := \
17+
aes.c \
18+
dhrystone.c \
19+
miniz.c \
20+
norx.c \
21+
primes.c \
22+
qsort.c \
23+
sha512.c
24+
25+
EXECUTABLES := $(SRCS:%.c=%.elf)
26+
27+
SHELL_HACK := $(shell mkdir -p $(foreach LEVEL,$(OPT_LEVEL),$(BUILD_DIR)/$(RV32_EXT)/O$(LEVEL)/rv8-bench))
28+
29+
.PHONY: all clean build-O0 build-O1 build-O2
30+
31+
ifneq ($(filter $(OPT_LEVEL), 0),)
32+
all: build-O0 $(BUILD_DIR)/$(RV32_EXT)/O0/rv8-bench/bigint.elf
33+
endif
34+
35+
ifneq ($(filter $(OPT_LEVEL), 1),)
36+
all: build-O1 $(BUILD_DIR)/$(RV32_EXT)/O1/rv8-bench/bigint.elf
37+
endif
38+
39+
ifneq ($(filter $(OPT_LEVEL), 2),)
40+
all: build-O2 $(BUILD_DIR)/$(RV32_EXT)/O2/rv8-bench/bigint.elf
41+
endif
42+
43+
include ../../mk/common.mk
44+
include ../../mk/toolchain.mk
45+
46+
build-O0: $(addprefix $(BUILD_DIR)/$(RV32_EXT)/O0/rv8-bench/,$(EXECUTABLES))
47+
48+
$(BUILD_DIR)/$(RV32_EXT)/O0/rv8-bench/%.elf: $(SRC_DIR)/%.c | build-toolchain
49+
$(VECHO) " RISCVCC\t$(patsubst $(abspath $(BUILD_DIR)/..)/%,%,$@)\n"
50+
$(Q)$(CROSS_COMPILE) -o $@ -O0 $(CFLAGS) $< $(LDFLAGS)
51+
52+
$(BUILD_DIR)/$(RV32_EXT)/O0/rv8-bench/bigint.elf: $(SRC_DIR)/bigint.cc | build-toolchain
53+
$(VECHO) " RISCVCXX\t$(patsubst $(abspath $(BUILD_DIR)/..)/%,%,$@)\n"
54+
$(Q)$(RV32_PREFIX)g++ -o $@ -O0 $(CXXFLAGS) $<
55+
56+
build-O1: $(addprefix $(BUILD_DIR)/$(RV32_EXT)/O1/rv8-bench/,$(EXECUTABLES))
57+
58+
$(BUILD_DIR)/$(RV32_EXT)/O1/rv8-bench/%.elf: $(SRC_DIR)/%.c | build-toolchain
59+
$(VECHO) " RISCVCC\t$(patsubst $(abspath $(BUILD_DIR)/..)/%,%,$@)\n"
60+
$(Q)$(CROSS_COMPILE) -o $@ -O1 $(CFLAGS) $< $(LDFLAGS)
61+
62+
$(BUILD_DIR)/$(RV32_EXT)/O1/rv8-bench/bigint.elf: $(SRC_DIR)/bigint.cc | build-toolchain
63+
$(VECHO) " RISCVCXX\t$(patsubst $(abspath $(BUILD_DIR)/..)/%,%,$@)\n"
64+
$(Q)$(RV32_PREFIX)g++ -o $@ -O1 $(CXXFLAGS) $<
65+
66+
build-O2: $(addprefix $(BUILD_DIR)/$(RV32_EXT)/O2/rv8-bench/,$(EXECUTABLES))
67+
68+
$(BUILD_DIR)/$(RV32_EXT)/O2/rv8-bench/%.elf: $(SRC_DIR)/%.c | build-toolchain
69+
$(VECHO) " RISCVCC\t$(patsubst $(abspath $(BUILD_DIR)/..)/%,%,$@)\n"
70+
$(Q)$(CROSS_COMPILE) -o $@ -O2 $(CFLAGS) $< $(LDFLAGS)
71+
72+
$(BUILD_DIR)/$(RV32_EXT)/O2/rv8-bench/bigint.elf: $(SRC_DIR)/bigint.cc | build-toolchain
73+
$(VECHO) " RISCVCXX\t$(patsubst $(abspath $(BUILD_DIR)/..)/%,%,$@)\n"
74+
$(Q)$(RV32_PREFIX)g++ -o $@ -O2 $(CXXFLAGS) $<
75+
76+
clean:
77+
$(RM) $(foreach LEVEL,$(OPT_LEVEL),$(BUILD_DIR)/$(RV32_EXT)/O$(LEVEL)/rv8-bench/*)

src/rv8-bench/README.md

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
rv8-bench
2+
===============
3+
4+
The rv8 benchmark suite contains a small set of currently integer
5+
centric benchmarks for regression testing of the rv8 binary
6+
translation engine. The suite contains the following test programs:
7+
8+
- qsort
9+
- aes
10+
- norx
11+
- dhrystone
12+
- primes
13+
- miniz
14+
- sha512
15+
16+
## Dependencies
17+
18+
rv8-bench depends on the following software:
19+
20+
- [rv8](https://github.com/rv8-io/rv8/)
21+
- [riscv-qemu](https://github.com/riscv/riscv-qemu/)
22+
- [musl-riscv-toolchain-7.1.0-2](https://github.com/rv8-io/musl-riscv-toolchain/releases/tag/v7.1.0-2)
23+
- [Node.js](https://nodejs.org/)
24+
25+
_Installing Node.js on macOS with brew_
26+
```
27+
brew install node
28+
```
29+
30+
_Installing Node.js on Debian Stretch_
31+
```
32+
sudo apt-get install nodejs
33+
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
34+
```
35+
36+
_Installing musl-riscv-toolchain_
37+
```
38+
git clone https://github.com/rv8-io/musl-riscv-toolchain.git
39+
cd musl-riscv-toolchain
40+
for i in riscv32 riscv64 i386 x86_64 arm aarch64; do sh bootstrap.sh $i ; done
41+
```
42+
43+
_Installing rv8_
44+
```
45+
git clone https://github.com/rv8-io/rv8.git
46+
cd rv8
47+
git submodule update --init
48+
make -j4 && sudo make install
49+
```
50+
51+
_Installing riscv-qemu_
52+
```
53+
git clone https://github.com/riscv/riscv-qemu.git
54+
cd riscv-qemu
55+
git submodule update --init
56+
./configure --target-list=riscv64-softmmu,riscv32-softmmu
57+
make -j4 && sudo make install
58+
```
59+
60+
## Building
61+
62+
To build the rv8 benchmarks for riscv32, riscv64, i386 and
63+
x86_64 run `make` in the rv8-bench directory:
64+
65+
```
66+
cd rv8-bench
67+
make
68+
```
69+
70+
## Running
71+
72+
To see how to run the benchmarks execute `npm start` for usage instructions:
73+
74+
```
75+
npm start bench <benchmark> <target> <opt> <runs>
76+
npm start gather
77+
```

0 commit comments

Comments
 (0)