Skip to content

dev-0x7C6/meta-retro

Repository files navigation

OpenEmbedded / Yocto software layer for RetroArch and libretro cores

This layer provides RetroArch front-end and libretro cores emulators recipes for use with OpenEmbedded and/or Yocto.

Raspberry Pi 4 Poky build

Building

You can test this layer and distro (retro) with reference build environment on your host computer

user@localhost:~$ git clone --recursive https://github.com/dev-0x7C6/retro-build-environment.git
user@localhost:~$ cd retro-build-environment
user@localhost:~$ source source.me
user@localhost:~$ MACHINE="raspberrypi4" bitbake retro-image-full

Images

Image (recipe name) Retroarch Libretro cores Shaders Titles Cheats Themes Overlays
retro-image-full ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
retro-image-standard ✔️ ✔️ ✔️ ✔️
retro-image-minimal ✔️ ✔️ ✔️

Recomendation: retro-image-full

Tested platforms

Machine Layer Build against Runtime testing Notice
cubietruck meta-sunxi Often Rarely Unable to run kms with lima(mesa)
intel-core2-32 meta-intel Often Sometimes As pendrive dongle
intel-corei7-64 meta-intel Often Sometimes As pendrive dongle
orange-pi-pc meta-sunxi Often Rarely ---
raspberrypi3-64 meta-raspberrypi Often Sometimes ---
raspberrypi3 meta-raspberrypi Often Sometimes ---
raspberrypi4-64 meta-raspberrypi Always Often ---
raspberrypi4 meta-raspberrypi Always Often ---
rock-pi-4a meta-rockchip Often None Thanks to @MarkusVolk for sending patches

Distro features

Meta-retro introduced a collection of switches that can be set by DISTRO_FEATURES in local.conf or distro.conf

RetroArch and system features:

  • retroarch-automount - added extra automounting in /var/run/media
  • retroarch-autostart - enabling systemd RetroArch startup as main graphics.target
  • retroarch-online - compile RetroArch with online capabilities
  • retroarch-updater - compile RetroArch with update capabilities

Graphical capabilities:

  • retroarch-gles - enable for OpenGLES 2.0 support in retroarch and libretro cores
  • retroarch-gles3 - enable for OpenGLES 3.0 support in retroarch and libretro cores
  • retroarch-opengl - enable for OpenGL >= 2.0 support in retroarch and libretro cores
  • vulkan - enable for Vulkan support in retroarch and libretro cores

Customizable variables

There is a collection of variables that can be set in local.conf or distro.conf:

Default drivers

  • RETROARCH_DEFAULT_INPUT_DRIVER - default is udev
  • RETROARCH_DEFAULT_JOYPAD_DRIVER - default is udev
  • RETROARCH_DEFAULT_VIDEO_DRIVER - default is gl
  • RETROARCH_DEFAULT_VIDEO_CONTEXT - default is kms-egl
  • RETROARCH_DEFAULT_AUDIO_DRIVER - default is pulseaudio or alsathread
  • RETROARCH_DEFAULT_RESAMPLER_DRIVER - default is sinc
  • RETROARCH_DEFAULT_MENU_DRIVER - default is ozone

Configuration

  • RETROARCH_CONFIG_FULLSCREEN - default is true, go for fullscreen mode, this respects initial resolutions (tested with rpi4)
  • RETROARCH_CONFIG_THREADED_VIDEO - default is true, use another thread for renderer
  • RETROARCH_CONFIG_AUDIO_LATENCY - default is 256, stock value is 64, I got better performance with higher values on rpi platforms

Video settings

  • RETROARCH_CONFIG_FONT_SIZE

Themes

  • RETROARCH_CONFIG_XMB_SHADOWS
  • RETROARCH_CONFIG_XMB_THEME_COLOR
  • RETROARCH_CONFIG_XMB_THEME_INDEX

For more information see file: retroarch.inc

Layer dependencies

Layer Sublayer Required Software Recommended BSPs
openembedded-core meta ✔️ ✔️
meta-openembedded meta-oe ✔️ ✔️
↪️ meta-multimedia ✔️ ✔️
↪️ meta-python ✔️ ✔️
↪️ meta-networking ✔️ ✔️
meta-qt5 . ✔️ ✔️
meta-kodi . ✔️
meta-raspberrypi . ✔️ ✔️
meta-raspberrypi-extras . ✔️ ✔️
meta-intel . ✔️ ✔️
meta-rockchip . ✔️ ✔️

Patches

Please submit patches against the dev-0x7C6/meta-retro layer by pull requests.

Adding the meta-retro layer to your build

In order to use this layer, you need to make the build system aware of it.

Assuming the meta-retro layer exists at the top-level of your yocto build tree, you can add it to the build system by adding the location of the meta-retro layer to bblayers.conf, along with any other layers needed. e.g.:

BBLAYERS ?= " \
  /path/to/yocto/meta \
  /path/to/yocto/meta-yocto \
  /path/to/yocto/meta-yocto-bsp \
  /path/to/yocto/meta-retro \
"