mirror of
https://git.freebsd.org/ports.git
synced 2025-04-28 01:26:39 -04:00
emulators/rvvm: RISC-V Virtual Machine
RVVM is a virtual machine / emulator for RISC-V guests, which emphasizes on performance, security, lean code and portability. It already runs a lot of guest operating systems, including Linux, Haiku, FreeBSD, OpenBSD, etc. It also aims to run RISC-V applications on a foreign-arch host without full OS guest & isolation (Userland emulation). WWW: https://github.com/LekKit/RVVM
This commit is contained in:
parent
5bf2f84176
commit
5912458941
7 changed files with 210 additions and 0 deletions
|
@ -128,6 +128,7 @@
|
||||||
SUBDIR += riscv-isa-sim
|
SUBDIR += riscv-isa-sim
|
||||||
SUBDIR += rpcs3
|
SUBDIR += rpcs3
|
||||||
SUBDIR += rubygem-fission
|
SUBDIR += rubygem-fission
|
||||||
|
SUBDIR += rvvm
|
||||||
SUBDIR += sameboy
|
SUBDIR += sameboy
|
||||||
SUBDIR += simh
|
SUBDIR += simh
|
||||||
SUBDIR += simh-hp2100
|
SUBDIR += simh-hp2100
|
||||||
|
|
79
emulators/rvvm/Makefile
Normal file
79
emulators/rvvm/Makefile
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
PORTNAME= RVVM
|
||||||
|
DISTVERSIONPREFIX= v
|
||||||
|
DISTVERSION= 0.6
|
||||||
|
CATEGORIES= emulators
|
||||||
|
MASTER_SITES= https://github.com/LekKit/patches-misc/releases/download/rvvm-uboot-2024.7/:fw \
|
||||||
|
https://github.com/LekKit/riscv-tests/releases/download/rvvm-tests/:tests
|
||||||
|
DISTFILES= ${FWFILES:.bin=.bin:fw} riscv-tests.tar.gz:tests
|
||||||
|
DIST_SUBDIR= rvvm-${DISTVERSION}
|
||||||
|
EXTRACT_ONLY= ${DISTFILE_DEFAULT}
|
||||||
|
|
||||||
|
MAINTAINER= fuz@FreeBSD.org
|
||||||
|
COMMENT= RISC-V Virtual Machine
|
||||||
|
|
||||||
|
LICENSE= GPLv2 GPLv3 MPL20
|
||||||
|
LICENSE_COMB= multi
|
||||||
|
LICENSE_FILE_GPLv3= ${WRKSRC}/LICENSE-GPL
|
||||||
|
LICENSE_FILE_MPL20= ${WRKSRC}/LICENSE-MPL
|
||||||
|
LICENSE_DISTFILES_GPLv2= ${FWFILES}
|
||||||
|
LICENSE_DISTFILES_GPLv3= ${DISTFILE_DEFAULT}
|
||||||
|
LICENSE_DISTFILES_MPL20= ${DISTFILE_DEFAULT}
|
||||||
|
|
||||||
|
FLAVORS= x11 nox11
|
||||||
|
FLAVOR?= ${FLAVORS:[1]}
|
||||||
|
nox11_PKGNAMESUFFIX= -nox11
|
||||||
|
|
||||||
|
USES= gmake localbase:ldflags
|
||||||
|
USE_GITHUB= yes
|
||||||
|
GH_ACCOUNT= LekKit
|
||||||
|
USE_LDCONFIG= yes
|
||||||
|
|
||||||
|
BUILDDIR= ${WRKDIR}/.build
|
||||||
|
MAKE_ENV+= BUILDDIR=${BUILDDIR}
|
||||||
|
TEST_TARGET= test
|
||||||
|
SUB_FILES= pkg-message
|
||||||
|
|
||||||
|
OPTIONS_DEFINE= FDT FPU JIT JNI SPINLOCK_DEBUG NET PCI RV64
|
||||||
|
OPTIONS_DEFAULT= FDT FPU JIT JNI SPINLOCK_DEBUG NET PCI RV64
|
||||||
|
FDT_DESC= enable automatic FDT generation
|
||||||
|
FPU_DESC= enable floating point (F/D) CPU extension
|
||||||
|
JIT_DESC= enable RVJIT accelerator
|
||||||
|
JNI_DESC= include native JNI bindings in shared librvvm
|
||||||
|
NET_DESC= enable unprivileged userland networking stack
|
||||||
|
PCI_DESC= enable PCI support in ATA, etc devices
|
||||||
|
RV64_DESC= enable riscv64 CPU support
|
||||||
|
SPINLOCK_DEBUG_DESC= enable deadlock debugging (minimal runtime overhead)
|
||||||
|
|
||||||
|
FWFILES= fw_jump.bin fw_payload.bin
|
||||||
|
|
||||||
|
.for o in ${OPTIONS_DEFINE}
|
||||||
|
$o_MAKE_ENV= USE_$o=1
|
||||||
|
$o_MAKE_ENV_OFF= USE_$o=0
|
||||||
|
.endfor
|
||||||
|
|
||||||
|
.if ${FLAVOR} == x11
|
||||||
|
MAKE_ENV+= USE_FB=1 USE_XSHM=1
|
||||||
|
USES+= xorg
|
||||||
|
USE_XORG+= x11 xext
|
||||||
|
.else
|
||||||
|
MAKE_ENV+= USE_FB=0 USE_XSHM=0
|
||||||
|
.endif
|
||||||
|
|
||||||
|
.include <bsd.port.pre.mk>
|
||||||
|
|
||||||
|
.if defined(WITH_DEBUG)
|
||||||
|
MAKE_ENV+= USE_DEBUG=1
|
||||||
|
.endif
|
||||||
|
|
||||||
|
post-install:
|
||||||
|
${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/rvvm
|
||||||
|
${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/librvvm.so
|
||||||
|
${MKDIR} ${STAGEDIR}${DATADIR}
|
||||||
|
.for f in ${FWFILES}
|
||||||
|
${INSTALL_DATA} ${_DISTDIR}/$f ${STAGEDIR}${DATADIR}/
|
||||||
|
.endfor
|
||||||
|
|
||||||
|
pre-test:
|
||||||
|
${LN} -sf ${_DISTDIR}/riscv-tests.tar.gz ${BUILDDIR}/
|
||||||
|
|
||||||
|
.include <bsd.port.post.mk>
|
9
emulators/rvvm/distinfo
Normal file
9
emulators/rvvm/distinfo
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
TIMESTAMP = 1737591303
|
||||||
|
SHA256 (rvvm-0.6/fw_jump.bin) = 60f5aedaf90be271eef9e4f1a479171c183987f97f86208811e9212b121d5b45
|
||||||
|
SIZE (rvvm-0.6/fw_jump.bin) = 136776
|
||||||
|
SHA256 (rvvm-0.6/fw_payload.bin) = d97321ca71be85a98dcc1757b721616d6ed68304afe853336273cb19b424da6c
|
||||||
|
SIZE (rvvm-0.6/fw_payload.bin) = 2958016
|
||||||
|
SHA256 (rvvm-0.6/riscv-tests.tar.gz) = f0e888a8db158b1e82ac09cebd01d8e1d5913477d1515c41286fae5e309e5322
|
||||||
|
SIZE (rvvm-0.6/riscv-tests.tar.gz) = 87062
|
||||||
|
SHA256 (rvvm-0.6/LekKit-RVVM-v0.6_GH0.tar.gz) = 97e98c95d8785438758b81fb5c695b8eafb564502c6af7f52555b056e3bb7d7a
|
||||||
|
SIZE (rvvm-0.6/LekKit-RVVM-v0.6_GH0.tar.gz) = 313342
|
75
emulators/rvvm/files/patch-Makefile
Normal file
75
emulators/rvvm/files/patch-Makefile
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
--- Makefile.orig 2024-03-18 16:11:18 UTC
|
||||||
|
+++ Makefile
|
||||||
|
@@ -33,7 +33,7 @@ BOLD := $(shell tput md $(NULL_STDERR) || tput bo
|
||||||
|
SPACE :=
|
||||||
|
ifneq (,$(TERM))
|
||||||
|
BOLD := $(shell tput md $(NULL_STDERR) || tput bold $(NULL_STDERR) || printf "\033[1m" $(NULL_STDERR))
|
||||||
|
-RESET := $(shell tput me $(NULL_STDERR) || tput sgr0 $(NULL_STDERR) || printf "\033[0m" $(NULL_STDERR))$(BOLD)
|
||||||
|
+RESET := $(shell tput me $(NULL_STDERR) || tput sgr0 $(NULL_STDERR) || printf "\033[0m" $(NULL_STDERR))
|
||||||
|
RED := $(shell tput AF 1 $(NULL_STDERR) || tput setaf 1 $(NULL_STDERR) || printf "\033[31m" $(NULL_STDERR))$(BOLD)
|
||||||
|
GREEN := $(shell tput AF 2 $(NULL_STDERR) || tput setaf 2 $(NULL_STDERR) || printf "\033[32m" $(NULL_STDERR))$(BOLD)
|
||||||
|
YELLOW := $(shell tput AF 3 $(NULL_STDERR) || tput setaf 3 $(NULL_STDERR) || printf "\033[33m" $(NULL_STDERR))$(BOLD)
|
||||||
|
@@ -231,8 +231,8 @@ endif
|
||||||
|
|
||||||
|
# Warning options (Strict safety/portability, stack/object size limits)
|
||||||
|
# -Wbad-function-cast, -Wcast-align, -Wdouble-promotion need fixes in codebase
|
||||||
|
-WARN_OPTS := -Wall -Wextra -Wshadow -Wvla -Wpointer-arith -Walloca -Wduplicated-cond \
|
||||||
|
--Wtrampolines -Wlarger-than=1048576 -Wframe-larger-than=32768 -Werror=return-type
|
||||||
|
+WARN_OPTS := -Wall -Wextra -Wshadow -Wvla -Wpointer-arith -Walloca \
|
||||||
|
+-Wlarger-than=1048576 -Wframe-larger-than=32768 -Werror=return-type
|
||||||
|
|
||||||
|
# Compiler-specific options
|
||||||
|
ifeq ($(CC_TYPE),gcc)
|
||||||
|
@@ -467,13 +467,11 @@ endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Do not pass lib-related flags for dev/cli/test builds (Faster)
|
||||||
|
-ifneq (,$(findstring lib, $(MAKECMDGOALS))$(findstring install, $(MAKECMDGOALS)))
|
||||||
|
override CFLAGS += -DUSE_LIB -fPIC -ffat-lto-objects
|
||||||
|
# Build JNI bindings inside librvvm dynlib
|
||||||
|
ifeq ($(USE_JNI),1)
|
||||||
|
SRC += $(SRCDIR)/bindings/jni/rvvm_jni.c
|
||||||
|
endif
|
||||||
|
-endif
|
||||||
|
|
||||||
|
# CPU interpreter sources
|
||||||
|
SRC += $(wildcard $(SRCDIR)/cpu/riscv_*.c)
|
||||||
|
@@ -583,10 +581,10 @@ test: $(BINARY)
|
||||||
|
@echo
|
||||||
|
@echo "[$(YELLOW)INFO$(RESET)] Running RISC-V Tests (RV32)"
|
||||||
|
@echo
|
||||||
|
- @for file in $(BUILDDIR)/riscv-tests/rv32*.bin; do \
|
||||||
|
+ @for file in $(BUILDDIR)/riscv-tests/rv32*; do \
|
||||||
|
result=$$($(BINARY) $$file -nogui -rv32 | tr -d '\0'); \
|
||||||
|
result="$${result##* }"; \
|
||||||
|
- if [[ "$$result" == "0" ]]; then \
|
||||||
|
+ if [ "$$result" -eq "0" ]; then \
|
||||||
|
echo "[$(GREEN)PASS$(RESET)] $$file"; \
|
||||||
|
else \
|
||||||
|
echo "[$(RED)FAIL: $$result$(RESET)] $$file"; \
|
||||||
|
@@ -596,10 +594,10 @@ ifeq ($(USE_RV64),1)
|
||||||
|
@echo
|
||||||
|
@echo "[$(YELLOW)INFO$(RESET)] Running RISC-V Tests (RV64)"
|
||||||
|
@echo
|
||||||
|
- @for file in $(BUILDDIR)/riscv-tests/rv64*.bin; do \
|
||||||
|
+ @for file in $(BUILDDIR)/riscv-tests/rv64*; do \
|
||||||
|
result=$$($(BINARY) $$file -nogui -rv64 | tr -d '\0'); \
|
||||||
|
result="$${result##* }"; \
|
||||||
|
- if [[ "$$result" == "0" ]]; then \
|
||||||
|
+ if [ "$$result" -eq "0" ]; then \
|
||||||
|
echo "[$(GREEN)PASS$(RESET)] $$file"; \
|
||||||
|
else \
|
||||||
|
echo "[$(RED)FAIL: $$result$(RESET)] $$file"; \
|
||||||
|
@@ -647,11 +645,10 @@ ifeq ($(HOST_POSIX),1)
|
||||||
|
@install -Dm755 $(BINARY) $(DESTDIR)$(bindir)/rvvm
|
||||||
|
@install -Dm755 $(SHARED) $(DESTDIR)$(libdir)/librvvm$(LIB_EXT)
|
||||||
|
@install -Dm644 $(STATIC) $(DESTDIR)$(libdir)/librvvm_static.a
|
||||||
|
+ @install -d $(DESTDIR)$(includedir)/rvvm
|
||||||
|
@install -Dm644 $(SRCDIR)/rvvmlib.h $(DESTDIR)$(includedir)/rvvm/rvvmlib.h
|
||||||
|
@install -Dm644 $(SRCDIR)/fdtlib.h $(DESTDIR)$(includedir)/rvvm/fdtlib.h
|
||||||
|
@install -Dm644 $(SRCDIR)/devices/*.h $(DESTDIR)$(includedir)/rvvm/
|
||||||
|
- @install -d $(DESTDIR)$(datadir)/licenses/rvvm/
|
||||||
|
- @install -Dm644 LICENSE* $(DESTDIR)$(datadir)/licenses/rvvm/
|
||||||
|
else
|
||||||
|
@echo "[$(RED)WARN$(RESET)] Unsupported on non-POSIX!"
|
||||||
|
endif
|
11
emulators/rvvm/files/pkg-message.in
Normal file
11
emulators/rvvm/files/pkg-message.in
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
RVVM has been installed.
|
||||||
|
|
||||||
|
To execute a disk image, run
|
||||||
|
|
||||||
|
rvvm %%DATADIR%%/fw_payload.bin [flags] -i $disk.img
|
||||||
|
|
||||||
|
To execute a custom kernel payload, run
|
||||||
|
|
||||||
|
rvvm %%DATADIR%%/fw_jump.bin [flags] -k $kernel.bin
|
||||||
|
|
||||||
|
For further details, execute rvvm --help.
|
5
emulators/rvvm/pkg-descr
Normal file
5
emulators/rvvm/pkg-descr
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
RVVM is a virtual machine / emulator for RISC-V guests, which emphasizes
|
||||||
|
on performance, security, lean code and portability. It already runs a
|
||||||
|
lot of guest operating systems, including Linux, Haiku, FreeBSD,
|
||||||
|
OpenBSD, etc. It also aims to run RISC-V applications on a foreign-arch
|
||||||
|
host without full OS guest & isolation (Userland emulation).
|
30
emulators/rvvm/pkg-plist
Normal file
30
emulators/rvvm/pkg-plist
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
bin/rvvm
|
||||||
|
include/rvvm/ata.h
|
||||||
|
include/rvvm/chardev.h
|
||||||
|
include/rvvm/clint.h
|
||||||
|
include/rvvm/eth-oc.h
|
||||||
|
include/rvvm/fb_window.h
|
||||||
|
include/rvvm/fdtlib.h
|
||||||
|
include/rvvm/framebuffer.h
|
||||||
|
include/rvvm/gpio-sifive.h
|
||||||
|
include/rvvm/gpio_api.h
|
||||||
|
include/rvvm/hid_api.h
|
||||||
|
include/rvvm/hid_dev.h
|
||||||
|
include/rvvm/i2c-hid.h
|
||||||
|
include/rvvm/i2c-oc.h
|
||||||
|
include/rvvm/mtd-physmap.h
|
||||||
|
include/rvvm/ns16550a.h
|
||||||
|
include/rvvm/nvme.h
|
||||||
|
include/rvvm/pci-bus.h
|
||||||
|
include/rvvm/plic.h
|
||||||
|
include/rvvm/ps2-altera.h
|
||||||
|
include/rvvm/rtc-ds1742.h
|
||||||
|
include/rvvm/rtc-goldfish.h
|
||||||
|
include/rvvm/rtl8169.h
|
||||||
|
include/rvvm/rvvmlib.h
|
||||||
|
include/rvvm/syscon.h
|
||||||
|
include/rvvm/tap_api.h
|
||||||
|
lib/librvvm.so
|
||||||
|
lib/librvvm_static.a
|
||||||
|
%%DATADIR%%/fw_jump.bin
|
||||||
|
%%DATADIR%%/fw_payload.bin
|
Loading…
Add table
Reference in a new issue