aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKito Cheng <kito.cheng@sifive.com>2020-11-05 10:46:39 +0800
committerGitHub <noreply@github.com>2020-11-05 10:46:39 +0800
commite723045eacace08004066ee5fa1b39b80b9e98cd (patch)
tree5c60276746ea5a7dec6ab08a89ab5033b2b1150d
parent8b7811aafcbd06a202c659cf9a3937746f715b18 (diff)
parent5678d6adc4f9962ba0faff835b4b10c1c2453d44 (diff)
downloadriscv-gnu-toolchain-e723045eacace08004066ee5fa1b39b80b9e98cd.zip
riscv-gnu-toolchain-e723045eacace08004066ee5fa1b39b80b9e98cd.tar.gz
riscv-gnu-toolchain-e723045eacace08004066ee5fa1b39b80b9e98cd.tar.bz2
Merge pull request #761 from riscv/extra-sim
Support spike as simulator to run gcc testsuite
-rw-r--r--Makefile.in122
-rw-r--r--README.md16
l---------scripts/wrapper/spike/riscv32-unknown-elf-run1
l---------scripts/wrapper/spike/riscv32-unknown-linux-gnu-run1
l---------scripts/wrapper/spike/riscv64-unknown-elf-run1
-rwxr-xr-xscripts/wrapper/spike/riscv64-unknown-linux-gnu-run7
6 files changed, 119 insertions, 29 deletions
diff --git a/Makefile.in b/Makefile.in
index d3c4e92..b2d2deb 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -10,6 +10,12 @@ MUSL_SRCDIR := @with_musl_src@
LINUX_HEADERS_SRCDIR := @with_linux_headers_src@
GDB_SRCDIR := @with_gdb_src@
+SIM:=qemu
+
+# Default branch for proxy kernel and spike
+SPIKE_BRANCH:=master
+PK_BRANCH:=master
+
ifeq ($(srcdir)/riscv-gcc,$(GCC_SRCDIR))
# We need a relative source dir for the gcc configure, to make msys2 mingw64
# builds work. Mayberelsrcdir is relative if a relative path was used to run
@@ -148,6 +154,35 @@ report-binutils: report-binutils-@default_target@
.PHONY: report-gdb
report-gdb: report-gdb-@default_target@
+.PHONY: build-sim
+build-sim:
+ifeq ($(SIM),qemu)
+SIM_PATH:=$(srcdir)/scripts/wrapper/qemu
+SIM_PREPARE:=PATH="$(SIM_PATH):$(INSTALL_DIR)/bin:$(PATH)" RISC_V_SYSROOT="$(SYSROOT)"
+build-sim: stamps/build-qemu
+else
+ifeq ($(SIM),spike)
+# Using spike simulator.
+SIM_PATH:=$(srcdir)/scripts/wrapper/spike
+SIM_PREPARE:=PATH="$(SIM_PATH):$(INSTALL_DIR)/bin:$(PATH)" PK_PATH="$(INSTALL_DIR)/$(NEWLIB_TUPLE)/bin/"
+build-sim: stamps/build-spike
+ifneq (,$(findstring rv32,$(NEWLIB_MULTILIB_NAMES)))
+build-sim: stamps/build-pk32
+endif
+ifneq (,$(findstring rv64,$(NEWLIB_MULTILIB_NAMES)))
+build-sim: stamps/build-pk64
+endif
+else
+ifeq ($(SIM),gdb)
+# Using gdb simulator.
+SIM_PATH:=$(INSTALL_DIR)/bin
+SIM_PREPARE:=
+else
+$(error "Only support SIM=spike, SIM=gdb or SIM=qemu (default).")
+endif
+endif
+endif
+
stamps/check-write-permission:
mkdir -p $(INSTALL_DIR)/.test || \
(echo "Sorry, you don't have permission to write to" \
@@ -688,6 +723,45 @@ stamps/build-gcc-musl-stage2: $(GCC_SRCDIR) stamps/build-musl-linux \
cp -a $(INSTALL_DIR)/$(MUSL_TUPLE)/lib* $(SYSROOT)
mkdir -p $(dir $@) && touch $@
+spike-src:
+ git clone https://github.com/riscv/riscv-isa-sim.git -b $(SPIKE_BRANCH) $@
+
+pk-src:
+ git clone https://github.com/riscv/riscv-pk.git -b $(PK_BRANCH) $@
+
+stamps/build-spike: spike-src
+ rm -rf $@ $(notdir $@)
+ mkdir $(notdir $@)
+ cd $(notdir $@) && ../$</configure \
+ --prefix=$(INSTALL_DIR)
+ $(MAKE) -C $(notdir $@)
+ $(MAKE) -C $(notdir $@) install
+ mkdir -p $(dir $@)
+ date > $@
+
+stamps/build-pk32: pk-src stamps/build-gcc-newlib-stage2
+ rm -rf $@ $(notdir $@)
+ mkdir $(notdir $@)
+ cd $(notdir $@) && ../$</configure \
+ --prefix=$(INSTALL_DIR) \
+ --host=$(NEWLIB_TUPLE) \
+ --with-arch=rv32gc
+ $(MAKE) -C $(notdir $@)
+ cp $(notdir $@)/pk $(INSTALL_DIR)/$(NEWLIB_TUPLE)/bin/pk32
+ mkdir -p $(dir $@)
+ date > $@
+
+stamps/build-pk64: pk-src stamps/build-gcc-newlib-stage2
+ rm -rf $@ $(notdir $@)
+ mkdir $(notdir $@)
+ cd $(notdir $@) && ../$</configure \
+ --prefix=$(INSTALL_DIR) \
+ --host=$(NEWLIB_TUPLE) \
+ --with-arch=rv64gc
+ $(MAKE) -C $(notdir $@)
+ cp $(notdir $@)/pk $(INSTALL_DIR)/$(NEWLIB_TUPLE)/bin/pk64
+ mkdir -p $(dir $@)
+ date > $@
stamps/build-qemu: $(srcdir)/qemu
rm -rf $@ $(notdir $@)
@@ -712,18 +786,18 @@ stamps/build-dejagnu: $(srcdir)/riscv-dejagnu
mkdir -p $(dir $@)
date > $@
-stamps/check-gcc-newlib: stamps/build-gcc-newlib-stage2 stamps/build-qemu stamps/build-dejagnu
- PATH="$(srcdir)/scripts/wrapper/qemu:$(INSTALL_DIR)/bin:$(PATH)" RISC_V_SYSROOT="$(SYSROOT)" $(MAKE) -C build-gcc-newlib-stage2 check-gcc "RUNTESTFLAGS=--target_board='$(NEWLIB_TARGET_BOARDS)'"
+stamps/check-gcc-newlib: stamps/build-gcc-newlib-stage2 build-sim stamps/build-dejagnu
+ $(SIM_PREPARE) $(MAKE) -C build-gcc-newlib-stage2 check-gcc "RUNTESTFLAGS=--target_board='$(NEWLIB_TARGET_BOARDS)'"
mkdir -p $(dir $@)
date > $@
-stamps/check-gcc-newlib-nano: stamps/build-gcc-newlib-stage2 stamps/build-qemu stamps/build-dejagnu
- PATH="$(srcdir)/scripts/wrapper/qemu:$(INSTALL_DIR)/bin:$(PATH)" RISC_V_SYSROOT="$(SYSROOT)" $(MAKE) -C build-gcc-newlib-stage2 check-gcc "RUNTESTFLAGS=--target_board='$(NEWLIB_NANO_TARGET_BOARDS)'"
+stamps/check-gcc-newlib-nano: stamps/build-gcc-newlib-stage2 build-sim stamps/build-dejagnu
+ $(SIM_PREPARE) $(MAKE) -C build-gcc-newlib-stage2 check-gcc "RUNTESTFLAGS=--target_board='$(NEWLIB_NANO_TARGET_BOARDS)'"
mkdir -p $(dir $@)
date > $@
-stamps/check-gcc-linux: stamps/build-gcc-linux-stage2 stamps/build-qemu stamps/build-dejagnu
- PATH="$(srcdir)/scripts/wrapper/qemu:$(INSTALL_DIR)/bin:$(PATH)" RISC_V_SYSROOT="$(SYSROOT)" $(MAKE) -C build-gcc-linux-stage2 check-gcc "RUNTESTFLAGS=--target_board='$(GLIBC_TARGET_BOARDS)'"
+stamps/check-gcc-linux: stamps/build-gcc-linux-stage2 build-sim stamps/build-dejagnu
+ $(SIM_PREPARE) $(MAKE) -C build-gcc-linux-stage2 check-gcc "RUNTESTFLAGS=--target_board='$(GLIBC_TARGET_BOARDS)'"
mkdir -p $(dir $@)
date > $@
@@ -733,56 +807,56 @@ check-dhrystone-newlib-nano: $(patsubst %,stamps/check-dhrystone-newlib-nano-%,$
stamps/check-dhrystone-newlib-%: \
stamps/build-gcc-newlib-stage2 \
- stamps/build-qemu \
+ build-sim \
$(wildcard $(srcdir)/test/benchmarks/dhrystone/*)
$(eval $@_ARCH := $(word 4,$(subst -, ,$@)))
$(eval $@_ABI := $(word 5,$(subst -, ,$@)))
$(eval $@_XLEN := $(patsubst rv32%,32,$(patsubst rv64%,64,$($@_ARCH))))
- PATH="$(srcdir)/scripts/wrapper/qemu:$(INSTALL_DIR)/bin:$(PATH)" RISC_V_SYSROOT="$(SYSROOT)" $(srcdir)/test/benchmarks/dhrystone/check -march=$($@_ARCH) -mabi=$($@_ABI) -cc=riscv$(XLEN)-unknown-elf-gcc -objdump=riscv$(XLEN)-unknown-elf-objdump -sim=riscv$($@_XLEN)-unknown-elf-run -out=$@ $(filter %.c,$^) || true
+ $(SIM_PREPARE) $(srcdir)/test/benchmarks/dhrystone/check -march=$($@_ARCH) -mabi=$($@_ABI) -cc=riscv$(XLEN)-unknown-elf-gcc -objdump=riscv$(XLEN)-unknown-elf-objdump -sim=riscv$($@_XLEN)-unknown-elf-run -out=$@ $(filter %.c,$^) || true
stamps/check-dhrystone-newlib-nano-%: \
stamps/build-gcc-newlib-stage2 \
- stamps/build-qemu \
+ build-sim \
$(wildcard $(srcdir)/test/benchmarks/dhrystone/*)
$(eval $@_ARCH := $(word 5,$(subst -, ,$@)))
$(eval $@_ABI := $(word 6,$(subst -, ,$@)))
$(eval $@_XLEN := $(patsubst rv32%,32,$(patsubst rv64%,64,$($@_ARCH))))
- PATH="$(srcdir)/scripts/wrapper/qemu:$(INSTALL_DIR)/bin:$(PATH)" RISC_V_SYSROOT="$(SYSROOT)" $(srcdir)/test/benchmarks/dhrystone/check -march=$($@_ARCH) -mabi=$($@_ABI) -specs=nano.specs -cc=riscv$(XLEN)-unknown-elf-gcc -objdump=riscv$(XLEN)-unknown-elf-objdump -sim=riscv$($@_XLEN)-unknown-elf-run -out=$@ $(filter %.c,$^) || true
+ $(SIM_PREPARE) $(srcdir)/test/benchmarks/dhrystone/check -march=$($@_ARCH) -mabi=$($@_ABI) -specs=nano.specs -cc=riscv$(XLEN)-unknown-elf-gcc -objdump=riscv$(XLEN)-unknown-elf-objdump -sim=riscv$($@_XLEN)-unknown-elf-run -out=$@ $(filter %.c,$^) || true
.PHONY: check-dhrystone-linux
check-dhrystone-linux: $(patsubst %,stamps/check-dhrystone-linux-%,$(GLIBC_MULTILIB_NAMES))
stamps/check-dhrystone-linux-%: \
stamps/build-gcc-linux-stage2 \
- stamps/build-qemu \
+ build-sim \
$(wildcard $(srcdir)/test/benchmarks/dhrystone/*)
$(eval $@_ARCH := $(word 4,$(subst -, ,$@)))
$(eval $@_ABI := $(word 5,$(subst -, ,$@)))
$(eval $@_XLEN := $(patsubst rv32%,32,$(patsubst rv64%,64,$($@_ARCH))))
- PATH="$(srcdir)/scripts/wrapper/qemu:$(INSTALL_DIR)/bin:$(PATH)" RISC_V_SYSROOT="$(SYSROOT)" $(srcdir)/test/benchmarks/dhrystone/check -march=$($@_ARCH) -mabi=$($@_ABI) -cc=riscv$(XLEN)-unknown-elf-gcc -objdump=riscv$(XLEN)-unknown-elf-objdump -sim=riscv$($@_XLEN)-unknown-elf-run -out=$@ $(filter %.c,$^) || true
+ $(SIM_PREPARE) $(srcdir)/test/benchmarks/dhrystone/check -march=$($@_ARCH) -mabi=$($@_ABI) -cc=riscv$(XLEN)-unknown-elf-gcc -objdump=riscv$(XLEN)-unknown-elf-objdump -sim=riscv$($@_XLEN)-unknown-elf-run -out=$@ $(filter %.c,$^) || true
-stamps/check-binutils-newlib: stamps/build-gcc-newlib-stage2 stamps/build-qemu stamps/build-dejagnu
- PATH="$(srcdir)/scripts/wrapper/qemu:$(INSTALL_DIR)/bin:$(PATH)" RISC_V_SYSROOT="$(SYSROOT)" $(MAKE) -C build-binutils-newlib check-binutils check-gas check-ld -k "RUNTESTFLAGS=--target_board='$(NEWLIB_TARGET_BOARDS)'" || true
+stamps/check-binutils-newlib: stamps/build-gcc-newlib-stage2 build-sim stamps/build-dejagnu
+ $(SIM_PREPARE) $(MAKE) -C build-binutils-newlib check-binutils check-gas check-ld -k "RUNTESTFLAGS=--target_board='$(NEWLIB_TARGET_BOARDS)'" || true
date > $@
-stamps/check-binutils-newlib-nano: stamps/build-gcc-newlib-stage2 stamps/build-qemu stamps/build-dejagnu
- PATH="$(srcdir)/scripts/wrapper/qemu:$(INSTALL_DIR)/bin:$(PATH)" RISC_V_SYSROOT="$(SYSROOT)" $(MAKE) -C build-binutils-newlib check-binutils check-gas check-ld -k "RUNTESTFLAGS=--target_board='$(NEWLIB_NANO_TARGET_BOARDS)'" || true
+stamps/check-binutils-newlib-nano: stamps/build-gcc-newlib-stage2 build-sim stamps/build-dejagnu
+ $(SIM_PREPARE) $(MAKE) -C build-binutils-newlib check-binutils check-gas check-ld -k "RUNTESTFLAGS=--target_board='$(NEWLIB_NANO_TARGET_BOARDS)'" || true
date > $@
-stamps/check-binutils-linux: stamps/build-gcc-linux-stage2 stamps/build-qemu stamps/build-dejagnu
- PATH="$(srcdir)/scripts/wrapper/qemu:$(INSTALL_DIR)/bin:$(PATH)" RISC_V_SYSROOT="$(SYSROOT)" $(MAKE) -C build-binutils-linux check-binutils check-gas check-ld -k "RUNTESTFLAGS=--target_board='$(GLIBC_TARGET_BOARDS)'" || true
+stamps/check-binutils-linux: stamps/build-gcc-linux-stage2 build-sim stamps/build-dejagnu
+ $(SIM_PREPARE) $(MAKE) -C build-binutils-linux check-binutils check-gas check-ld -k "RUNTESTFLAGS=--target_board='$(GLIBC_TARGET_BOARDS)'" || true
date > $@
-stamps/check-gdb-newlib: stamps/build-gcc-newlib-stage2 stamps/build-gdb-newlib stamps/build-qemu stamps/build-dejagnu
- PATH="$(srcdir)/scripts/wrapper/qemu:$(INSTALL_DIR)/bin:$(PATH)" RISC_V_SYSROOT="$(SYSROOT)" $(MAKE) -C build-gdb-newlib check-gdb -k "RUNTESTFLAGS=--target_board='$(NEWLIB_TARGET_BOARDS)'" || true
+stamps/check-gdb-newlib: stamps/build-gcc-newlib-stage2 stamps/build-gdb-newlib build-sim stamps/build-dejagnu
+ $(SIM_PREPARE) $(MAKE) -C build-gdb-newlib check-gdb -k "RUNTESTFLAGS=--target_board='$(NEWLIB_TARGET_BOARDS)'" || true
date > $@
-stamps/check-gdb-newlib-nano: stamps/build-gcc-newlib-stage2 stamps/build-gdb-newlib stamps/build-qemu stamps/build-dejagnu
- PATH="$(srcdir)/scripts/wrapper/qemu:$(INSTALL_DIR)/bin:$(PATH)" RISC_V_SYSROOT="$(SYSROOT)" $(MAKE) -C build-gdb-newlib check-gdb -k "RUNTESTFLAGS=--target_board='$(NEWLIB_NANO_TARGET_BOARDS)'" || true
+stamps/check-gdb-newlib-nano: stamps/build-gcc-newlib-stage2 stamps/build-gdb-newlib build-sim stamps/build-dejagnu
+ $(SIM_PREPARE) $(MAKE) -C build-gdb-newlib check-gdb -k "RUNTESTFLAGS=--target_board='$(NEWLIB_NANO_TARGET_BOARDS)'" || true
date > $@
-stamps/check-gdb-linux: stamps/build-gcc-linux-stage2 stamps/build-gdb-linux stamps/build-qemu stamps/build-dejagnu
- PATH="$(srcdir)/scripts/wrapper/qemu:$(INSTALL_DIR)/bin:$(PATH)" RISC_V_SYSROOT="$(SYSROOT)" $(MAKE) -C build-gdb-linux check-gdb -k "RUNTESTFLAGS=--target_board='$(GLIBC_TARGET_BOARDS)'" || true
+stamps/check-gdb-linux: stamps/build-gcc-linux-stage2 stamps/build-gdb-linux build-sim stamps/build-dejagnu
+ $(SIM_PREPARE) $(MAKE) -C build-gdb-linux check-gdb -k "RUNTESTFLAGS=--target_board='$(GLIBC_TARGET_BOARDS)'" || true
date > $@
.PHONY: report-gcc-newlib report-gcc-newlib-nano
diff --git a/README.md b/README.md
index ace2b99..1f3cc89 100644
--- a/README.md
+++ b/README.md
@@ -129,15 +129,21 @@ configure. See './configure --help' for more details.
### Test Suite
-The DejaGnu test suite has been ported to RISC-V. This can run with GDB
-simulator for elf toolchain or Qemu for linux toolchain, and GDB simulator
-doesn't support floating-point.
+The Dejagnu test suite has been ported to RISC-V. This can be run with a
+simulator for the elf and linux toolchains. The simulator can be selected
+by the SIM variable in the Makefile, e.g. SIM=qemu, SIM=gdb, or SIM=spike
+(experimental). However, the testsuite allowlist is only mintained for qemu.
+Other simulators might get extra failures.
To test GCC, run the following commands:
./configure --prefix=$RISCV --disable-linux --with-arch=rv64ima # or --with-arch=rv32ima
make newlib
- make report-newlib
+ make report-newlib SIM=gdb # Run with gdb simulator
./configure --prefix=$RISCV
make linux
- make report-linux
+ make report-linux SIM=qemu # Run with qemu
+
+Note:
+- spike only support rv64* bare-metal/elf toolchain.
+- gdb simulator only support bare-metal/elf toolchain.
diff --git a/scripts/wrapper/spike/riscv32-unknown-elf-run b/scripts/wrapper/spike/riscv32-unknown-elf-run
new file mode 120000
index 0000000..58669de
--- /dev/null
+++ b/scripts/wrapper/spike/riscv32-unknown-elf-run
@@ -0,0 +1 @@
+riscv64-unknown-linux-gnu-run \ No newline at end of file
diff --git a/scripts/wrapper/spike/riscv32-unknown-linux-gnu-run b/scripts/wrapper/spike/riscv32-unknown-linux-gnu-run
new file mode 120000
index 0000000..58669de
--- /dev/null
+++ b/scripts/wrapper/spike/riscv32-unknown-linux-gnu-run
@@ -0,0 +1 @@
+riscv64-unknown-linux-gnu-run \ No newline at end of file
diff --git a/scripts/wrapper/spike/riscv64-unknown-elf-run b/scripts/wrapper/spike/riscv64-unknown-elf-run
new file mode 120000
index 0000000..58669de
--- /dev/null
+++ b/scripts/wrapper/spike/riscv64-unknown-elf-run
@@ -0,0 +1 @@
+riscv64-unknown-linux-gnu-run \ No newline at end of file
diff --git a/scripts/wrapper/spike/riscv64-unknown-linux-gnu-run b/scripts/wrapper/spike/riscv64-unknown-linux-gnu-run
new file mode 100755
index 0000000..14a5b00
--- /dev/null
+++ b/scripts/wrapper/spike/riscv64-unknown-linux-gnu-run
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+xlen="$(readelf -h $1 | grep 'Class' | cut -d: -f 2 | xargs echo | sed 's/^ELF//')"
+
+spike \
+ --isa=RV${xlen}GC \
+ ${PK_PATH}/pk${xlen} "$@"