RuyiSDK+BuildRoot 交叉编译Endless-Sky

利用 RuyiSDK 玩转 RISC-V 版Endless-Sky

  Endless Sky(无尽天空)是一款免费开源、跨平台的2D 沙盒式太空模拟游戏,玩家以飞船舰长身份,在开放宇宙中自由开展贸易、运输、战斗、探索,并可选择参与主线剧情或自由经营舰队,今天我们尝试用buildroot+RuyiSDK交叉编译,并且在ruyi-qemu尝试运行。

获取 buildroot

  • 方法一
# 从GitHub仓库进行克隆
$ git clone https://github.com/buildroot/buildroot.git
  • 方法二
# 从gitlab官方仓库进行克隆
$ git clone https://gitlab.com/buildroot.org/buildroot.git
  • 方法三
# 从buildroot官网进行下载安装
```bash
https://buildroot.org/download.html

配置buildroot

$ make menuconfig

架构选择

Target optionsTarget ArchitectureRISCV

Target optionsTarget Architecture VariantCustom architecture

工具链选择

ToolchainToolchain typeExternal toolchain

ToolchainToolchainCustom toolchain

ToolchainToolchain Toolchain origin (Pre-installed toolchain)/home/cjh/buildroot/ruyi-venv-sipeed-lpi4a

(这里是你当前虚拟环境工具链的路径,到虚拟环境即可,由于可能识别不到中文,建议放在主目录下即可)

ToolchainToolchainToolchain prefixriscv64-plctxthead-linux-gnu

(这里是交叉工具链的前缀)

以及一些工具链的相关参数,可以用 riscv64-plctxthead-linux-gnu-gcc -v 查到一些,如果填错也没关系,buildroot在make阶段报错会提醒的,之后再改也可以。

剩余选项

依赖补充

Target Packages里可以根据分类选择你所需要的依赖即可,选择与否可以用空格确定,如果找不到的话,你也可以通过/键快速搜索确定位置

编译

确定好所需依赖(如果有依赖没选上的make失败后也可以重新补充)后通过ESC退出确认配置

# 编译依赖
$ make

构建Endless-Sky

获取Endless-Sky源码进行交叉编译


$ git clone https://github.com/endless-sky/endless-sky.git

编写toolchain.cmake


set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR riscv64)
set(CMAKE_C_COMPILER "/home/cjh/桌面/Endless-Sky/ruyi-venv-sipeed-lpi4a/bin/riscv64-plctxthead-linux-gnu-gcc")
set(CMAKE_CXX_COMPILER "/home/cjh/桌面/Endless-Sky/ruyi-venv-sipeed-lpi4a/bin/riscv64-plctxthead-linux-gnu-g++")
set(CMAKE_SYSROOT "/home/cjh/buildroot/output/staging")
set(CMAKE_FIND_ROOT_PATH "/home/cjh/buildroot/output/staging")
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)
set(PKG_CONFIG_EXECUTABLE "/home/cjh/buildroot/output/host/bin/pkg-config")
set(ENV{PKG_CONFIG_SYSROOT_DIR} ${CMAKE_SYSROOT})
set(ENV{PKG_CONFIG_PATH} "${CMAKE_SYSROOT}/usr/lib/pkgconfig")

Endless-Sky需要的一些依赖

sdl2 sdl2_image sdl2_mixer sdl2_ttf libcurl libogg libvorbis glm fmt physfs libX11 libpng openal libavif minizip Catch2 libuuid libglu libjpeg-turbo

可能有所遗漏,如果缺少依赖的话请根据上文自行补充即可

(x11等相关驱动如果在sdl2编译后补充的话,需要重新编译sdl2)

交叉编译

$ cmake .. -DCMAKE_TOOLCHAIN_FILE=../toolchain.cmake
$ make -j$(nproc)

endless-sky文件属性

###小问题

如果出现如上问题,sdl2_image链接失败的情况,是由于cmake硬编码导致去宿主机找sdl2_image了,需要更改为buildroot路径下的sdl2_image,代码参考如下

$ sed -i 's|/usr/lib/libSDL2_image.so|/home/cjh/buildroot/output/staging/usr/lib/libSDL2_image.so|g' CMakeFiles/supertux2.dir/build.make
$ sed -i 's|/usr/lib/libSDL2_image.so|/home/cjh/buildroot/output/staging/usr/lib/libSDL2_image.so|g' CMakeFiles/supertux2.dir/link.txt

运行

$ xhost +local:
$ ruyi-qemu -cpu thead-c906 \
-L /home/cjh/buildroot/output/staging \
-E DISPLAY=$DISPLAY \
-E SDL_VIDEODRIVER=x11 \
-E LD_LIBRARY_PATH="/usr/lib:/lib:/usr/lib64/lp64d:/lib64/lp64d:." \
./endless-sky



1 个赞