Portando un juego para anbernic con muos

Portando un juego raylib para la anbernic con muos

Tengo una anbernic con muos como sistema. Yo he pensado en por qué no usar estas máquinas para algo mas que emulación, como hacer juegos para este tipo de máquinas con portmaster. Todo esto lo he hecho en un Arch, Endeavour OS, en un x86_64, así que tendrás que adaptar los pasos al sistema que tienes.

Portmaster

Portmaster es una plataforma que facilita la instalación de juegos desde otras plataformas, ya sea con un entorno de ejecución u ofreciendo versiones nativas de estos juegos.

Para este caso uso westonpack, mas que nada porque al parecer muos usa el framebuffer /dev/fb0 para dibujar en pantalla en vez DRM/KMS como usa raylib. Westonpack es un entorno de ejecución que emula una pila gráfica que se encuentra típicamente en un escritorio Linux y no en un linux pensado para empotrados.

Preparación del entorno de construcción

Leyendo esto https://portmaster.games/porting.html puedes tener tu entorno para portar juegos con raylib. En este apartado voy a describir cómo monté el mío.

Necesitas tener instalado en tu sistema debootstrap y qemu-user-static-binfmt.

Adapto pasos que necesitamos de https://wiki.debian.org/Debootstrap.

> mkdir debian-arm64
> sudo debootstrap --arch=arm64 stable debian-arm64 http://deb.debian.org/debian/

Una vez terminado hacemos chroot ahí

> sudo chroot debian-arm64/

Si está bien instalado qemu-user-static-binfmt en el host, en el chroot al hacer

> uname -m

debería salir

aarch64

Instalación y configuración de paquetes

Haz esto en la terminal dentro de chroot.

> apt install cmake-curses-gui build-essential libsdl2-dev

Descarga el codigo fuente de la versión actual de raylib (por esta fecha) https://github.com/raysan5/raylib/archive/refs/tags/6.0.tar.gz en el root, o en otra parte de tu entorno chroot.

Personalmente para trabajar cómodamente en el root del chroot desde fuera doy todos los permisos de mi usuario y grupo al /root del chroot (no el /root del host). Extrae el zip y entra en el directorio.

> tar -xzf raylib-6.0.tar.gz
> cd raylib-6.0
> ccmake .

Presiona la tecla C (Configure)

Una vez terminada la configuración inicial

Editamos estos campos hasta que queden así, no borramos campos.

  • BUILD_EXAMPLES OFF
  • OPENGL_VERSION 2.1
  • PLATFORM SDL

Los campos editados se tienen que mostrar como en la lista de arriba

De nuevo, configure, hasta que salga Generate (tecla G), y presiona G para generar. Sal y haz

> make
> make install

Una vez listo, copia tu juego en una carpeta dentro del chroot y cuando compiles añades estas bibliotecas

-ldrm -lgbm -lEGL -lGL

Westonpack

Sigue las instrucciones indicadas en https://github.com/binarycounter/Westonpack/wiki/SDL2-on-X11-Example#running-sdl2-games-that-require-x11.

Y copia y adapta el script https://github.com/binarycounter/Westonpack/wiki/SDL2-on-X11-Example#example-script-opengl-2 para tu port.

Como mínimo con renombrar los nombres del port basta. Renombra el script al nombre de tu port.

Empaquetando para pruebas

La estrucutura del port al final quedaría

port
├── nombre-juego
│   ├── assets
│   │   ├── loquesea
│   │
│   ├── libs.aarch64    Mete todas las bibliotecas que usa tu juego aquí
│   │   └── libraylib.so.600    Esto si has compilado raylib como biblioteca dinámica
│   ├── nombre-juego.aarch64
│   └── x11sdllib
│       └── libSDL2-2.0.so.0
└── nombre-juego.sh

Subiendo a tu maquinita

Usa scp o sftp para subir el port a tu máquina para probarlo

Copia /port/nombre-juego a ports/nombre-juego Copia /port/nombre-juego.sh a ROMS/Ports/nombre-juego.sh

Portmaster aquí habla de matar la interfaz gráfica para probar el juego desde terminal, con los pasos anteriores podemos mantener la interfaz y probar el juego como si fuera descargado de Portmaster.

Esta estructura es para pruebas nada más, para un empaquetamiento para portmaster faltan archivos de metadatos.

Esto es todo por el momento, para cualquier aclaración o detalle por favor contacta conmigo.

links

social