本文档详细介绍了在 RISC-V 架构下,通过 RuyiSDK 完成 PVZ 植物大战僵尸移植版编译运行的全流程:首先克隆项目源码,使用 RuyiSDK 创建指定类型的 RISC-V 虚拟环境;为满足游戏依赖,手动交叉编译 libopenmpt-dev 库并安装至虚拟环境 sysroot;通过 cmake 完成项目编译配置与构建;补充游戏所需版权文件后,激活虚拟环境,借助 qemu 模拟器成功运行 RISC-V 架构的 PVZ 移植版游戏。
开始
获取项目:
git clone https://github.com/wszqkzqk/PvZ-Portable.git
cd PvZ-Portable
创建虚拟环境
- 在项目路径下,在终端输入以下命令:
ruyi venv -t gnu-plct -e qemu-user-riscv-upstream generic ./gnu-plct-venv
制作 sysroot
- 由于游戏项目需要依赖 SDL_mixer,SDL_ttf,SDL_image等,现在需要重新配置虚拟环境下的 sysroot,参照:配置sysroot
项目还依赖 libopenmpt-dev,现在手动配置:
# 下载当前的稳定版压缩包
wget https://lib.openmpt.org/files/libopenmpt/src/libopenmpt-0.7.3+release.autotools.tar.gz
# 解压
tar -zxvf libopenmpt-0.7.3+release.autotools.tar.gz
cd libopenmpt-0.7.3+release.autotools
# 虚拟环境的工具链前缀
export CROSS_COMPILE=/home/jxy/RuyiSDKGames/PvZ-Portable/gnu-plct-venv/bin/riscv64-plct-linux-gnu-
# 虚拟环境的sysroot 路径
export TARGET_SYSROOT=/home/jxy/RuyiSDKGames/PvZ-Portable/gnu-plct-venv/sysroot
# 指定编译器
export CC="${CROSS_COMPILE}gcc --sysroot=${TARGET_SYSROOT}"
export CXX="${CROSS_COMPILE}g++ --sysroot=${TARGET_SYSROOT}"
./configure \
--host=riscv64-plct-linux-gnu \
--prefix=${TARGET_SYSROOT}/usr \
--libdir=${TARGET_SYSROOT}/usr/lib64 \
--disable-shared \
--enable-static \
--disable-examples \
--disable-openmpt123 \
--disable-tests \
--without-mpg123 \
--without-ogg \
--without-vorbis \
--without-vorbisfile \
--without-zlib \
--without-sdl2
# 编译
make -j$(nproc)
# 安装到 sysroot
make install
编译并运行项目
进入项目目录
编译
mkdir build && cd build
# 先回到上一级
cd ..
# 直接构建
cmake -S . -B build \
-DCMAKE_TOOLCHAIN_FILE=$PWD/gnu-plct-venv/toolchain.cmake \
-DCMAKE_SYSROOT=$PWD/gnu-plct-venv/sysroot \
-DCMAKE_EXE_LINKER_FLAGS="-static-libstdc++ -static-libgcc" \
-DCMAKE_C_FLAGS="-std=gnu11"
cd ./build && make
运行
由于版权原因,作者并未提供游戏所需的 main.pak 和 properties 文件夹,可访问配置文件进行下载并移动到build目录下:
# 激活虚拟环境
source ./gnu-plct-venv/bin/ruyi-activate
cd ..
# 运行游戏
env SDL_AUDIODRIVER=dummy LIBGL_ALWAYS_SOFTWARE=1 ruyi-qemu -L $PWD/gnu-plct-venv/sysroot ./build/pvz-portable

