利用 RuyiSDK 玩转 RISC-V 版洞窟物语

利用 RuyiSDK 玩转 RISC-V 版洞窟物语

洞窟物语,是谁的童年呢?休息时间快来玩一会洞窟物语吧~
现在就跟我一起通过RuyiSDK从源代码编译nxengine-evo引擎并运行cavestoryen~

获取并编译 nxengine-evo

$ git clone --recursive https://github.com/nxengine/nxengine-evo.git

环境准备:构建 RISC-V 的“地基”

首先,我们需要在 x86 主机上模拟出 RISC-V 的运行环境。这里我们选择 openEuler 作为目标系统的根文件系统(Sysroot)。(可以参考之前编译Teeworlds的那篇帖子~就不在这里水字数了~)

补充一下游戏运行需要的依赖

$ sudo chroot ~/oe-sysroot /bin/bash
$ dnf install -y SDL2-devel freetype-devel libpng-devel wavpack-devel mesa-dri-drivers mesa-libGL-devel libX11-devel zlib-devel openssl-devel libXext-devel libXcursor-devel libXinerama-devel libXi-devel --nogpgcheck --releasever=24.03


以防万一缺少了部分依赖,大家可自行对照图片进行查漏补缺~其中sdl2全家桶需手动编译

我一般会将手动编译的依赖都放在一个文件夹里,然后在依赖库目录下编写riscv64.toolchain文件(为了方便补充缺少的依赖手动编译riscv文件,我在依赖库目录下也创建了虚拟环境)

$ set(CMAKE_SYSTEM_NAME Linux)
$ set(CMAKE_SYSTEM_PROCESSOR riscv64)
$ set(CMAKE_C_COMPILER /home/cjh/桌面/依赖库/ruyi-venv-sipeed-lpi4a/bin/riscv64-plctxthead-linux-gnu-gcc)
$ set(CMAKE_CXX_COMPILER /home/cjh/桌面/依赖库/ruyi-venv-sipeed-lpi4a/bin/riscv64-plctxthead-linux-gnu-g++)
$ set(CMAKE_SYSROOT /home/cjh/oe-sysroot)
$ set(CMAKE_FIND_ROOT_PATH /home/cjh/oe-sysroot)
$ set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
$ set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
$ set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
$ set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
$ add_definitions(-DANGELSCRIPT_EXPORT -DAS_RISCV64)

手动编译依赖流程类似如下,就不一一列举了~

$ cd ~/桌面/依赖库
$ wget https://github.com/libsdl-org/SDL_mixer/releases/download/release-2.6.3/SDL2_mixer-2.6.3.tar.gz
$ tar -zxvf SDL2_mixer-2.6.3.tar.gz
$ cd SDL2_mixer-2.6.3

配置交叉编译

$ mkdir build && cd build
$ cmake .. \
  -DCMAKE_TOOLCHAIN_FILE=/home/cjh/桌面/依赖库/riscv-toolchain.cmake \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_INSTALL_PREFIX=/home/cjh/oe-sysroot/usr

编译并安装到 Sysroot

$ make DESTDIR=/home/cjh/oe-sysroot install

运用RuyiSDK 虚拟环境交叉编译

安装并激活 Ruyi 虚拟环境

这一步可以根据你不同开发板的开发环境安装不同的虚拟环境进行编译,本文采取的是licheepi4a
具体构建过程可参考(官网)(使用集成功能 | RuyiSDK)

编译

$ cd ~/桌面/nxengine-evo/build
$ cmake .. \
  -DCMAKE_TOOLCHAIN_FILE=../riscv-toolchain.cmake \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_INSTALL_PREFIX=/home/cjh/oe-sysroot/usr
$ make

编译完成

$ file ./nxengine-evo

file属性
现在我们已经编译出了risc-v架构的游戏引擎,但如果只有引擎没有游戏资源的话可是运行不了游戏的~

游戏运行

游戏本体下载

cavestoryen.zip 提取资源,将文件夹中的所有内容复制到该文件夹,并将Doukutsu.exe放入项目目录,然后运行nxextract从.exe文件中获取数据。

$ ./build/nxextract

游戏加载

$ LD_LIBRARY_PATH=~/oe-sysroot/usr/lib:~/oe-sysroot/usr/lib64 \
  SDL_VIDEODRIVER=x11 \
  SDL_RENDER_DRIVER=software \
  SDL_AUDIODRIVER=dummy \
$ ruyi-qemu -cpu rv64 -L ~/oe-sysroot ./nxengine-evo




现在你就可以尽情畅玩洞窟物语了~

1 个赞

需要在x86上模拟riscv吗?不能直接在riscv开发板上编译吗?直接在x86编译x86版本是不是更省事。 :innocent: