Retropie 4.x on Odroid C2
-
Hi.
I'm trying to compile retropie using the system.sh proposed in the 1st post.
I started with emulationstation and I successfully compiled it.
Below my system:- Odroid C2 rev 0.2
- Ubuntu standard image: ubuntu64-16.04lts-mate-odroid-c2-20161017
I followed the recommended procedure for ODROID C1 except for the last command:
sudo apt-get install -y git git clone --depth=1 https://github.com/RetroPie/RetroPie-Setup.git cd RetroPie-Setup sudo __platform=odroid-c2 ./retropie_setup.sh
I changed also the CMakeLists.txt with the correct libMali.so path.
#check if we're running on olinuxino MESSAGE("Looking for libMali.so") if(EXISTS "/usr/lib/aarch64-linux-gnu/libMali.so") MESSAGE("libMali.so found") set(GLSystem "OpenGL ES") else() MESSAGE("libMali.so not found") endif()
I stopped lightdm and when I run emulationstation I can see the correct graphic screen.
-
Hi.
Second step.
I successfully compile retroarch and lr-mame2003.
For retroarch I used the following build_retroarch() in retroarch.sh:function build_retroarch() { local params=(--enable-sdl2) ! isPlatform "x11" && params+=(--disable-x11 --enable-opengles --disable-ffmpeg --disable-sdl --enable-sdl2 --disable-oss --disable-pulse --disable-al --disable-jack) isPlatform "rpi" && params+=(--enable-dispmanx) isPlatform "mali" && params+=(--enable-mali_fbdev) isPlatform "arm" && params+=(--enable-floathard) # isPlatform "neon" && params+=(--enable-neon) isPlatform "armv8" && params+=(--disable-wayland --disable-vg --disable-miniupnpc) ./configure --prefix="$md_inst" "${params[@]}" sed -i 's/HAVE_OSS_LIB = 1/HAVE_OSS_LIB = 0/g' config.mk sed -i 's/HAVE_VIDEOCORE = 1/HAVE_VIDEOCORE = 0/g' config.mk sed -i 's/OPENGLES_LIBS = -lGLESv2 -lEGL -lGLESv2 -lbcm_host -lvcos -lvchiq_arm/OPENGLES_LIBS = -lGLESv2 -lEGL/g' config.mk make clean make md_ret_require="$md_build/retroarch" }
And I patched
libretro-common/include/glsym/glsym_es2.h
adding:#include <stdint.h>
in the first line.
For lr-mame2003 the compilation has no problems.
I tried a few games and it works!
roleo
-
@roleo you shouldn't need to modify
config.mk
afterwards - the raspberry pi link libs/video core stuff should only be added if the raspberry pi dev libs are present on the system - which shouldn't be the case.are you building to run on X or framebuffer ?
-
@BuZz
I know but if I don't modify the config.mk the compilation process doesn't complete.
And I didn't find an option to disable videocore from configure.
Similar for OSS: the compilation is ok but the linker search for -lossaudio.
Maybe I missed a parameter?I'm building on framebuffer, X is stopped.
-
I will look into getting an ODroid-c2 board.
-
@BuZz
Is there a donation link?
I think there are a lot of users interested. -
@roleo https://retropie.org.uk/donate/
I have sent an email to Hardkernel to see if they would be interested in providing any development boards (as it would benefit them too). If not I will buy an ODroid-C2 to start with.
-
Update.
I compiled also lr-fbalpha adding the following section to makefile.libretro:else ifeq ($(platform), armv8) TARGET := $(TARGET_NAME)_libretro.so fpic := -fPIC SHARED := -shared -Wl,-no-undefined -Wl,--version-script=$(LIBRETRO_DIR) PLATFORM_DEFINES += -march=armv8-a+crc -mcpu=cortex-a53 -ffast-math HAVE_NEON = 1 ENDIANNESS_DEFINES := -DLSB_FIRST CFLAGS += -DARM
However I can not compile lr-imame4all.
-
Update.
lr-fceumm ok without problems.
lr-nestopia ok without problems.
lr-snes9x2010 ok adding the following section to Makefile.libretro:# ARMv8 else ifneq (,$(findstring armv8,$(platform))) EXT ?= so TARGET := $(TARGET_NAME)_libretro.$(EXT) SHARED := -shared -Wl,--no-undefined fpic := -fPIC CC ?= gcc CFLAGS += -march=armv8-a+crc -mcpu=cortex-a53 -DARM ASFLAGS += -mcpu=cortex-a53
lr-imame4all compiles but doesn't work.
No chances with reicast: too asm parts... -
@roleo I have been generously offered an ODroid-C2 for free from Hardkernel so I will look into adding official support once it arrives. Thanks for your code feedback etc.
-
@BuZz
Good news!
I hope I can help you. -
Update.
Finally I compiled the lr-imame4all. I encountered two problems:
1 - The libco (src/libretro/libretro-common/libco) gives an error at runtime: "longjmp causes uninitialized stack frame", so I had to use the ucontext.c part instead of sjlj.c modifying libco.c (could be a performance issue).
2 - The file src/libretro/osinline.h contains some asm code that I tried to patch (sorry but I'm not an asm programmer :) ).This is the code I used for the lr-imame4all.sh script:
function sources_lr-imame4all() { gitPullOrClone "$md_build" https://github.com/libretro/mame2000-libretro.git sed -i 's/#include "sjlj.c"/#include "ucontext.c"/g' src/libretro/libretro-common/libco/libco.c sed -i 's/#include <retro_inline.h>/#include <retro_inline.h>\n#include <stdint.h>/g' src/libretro/osinline.h sed -i 's/ int res_hi, res_lo;/ int64_t res;/g' src/libretro/osinline.h sed -i 's/("smull\\t%1,%0,%2,%3"/("smull\\t%x0,%w1,%w2"/g' src/libretro/osinline.h sed -i 's/: "=r"(res_hi), "=r"(res_lo)/: "=r"(res)/g' src/libretro/osinline.h sed -i 's/return res_hi;/return res>>32;/g' src/libretro/osinline.h sed -i 's/( " mov %2, %2, asr #1 \\n"/( " asr %2, %2, #1 \\n"/g' src/libretro/osinline.h }
-
Hello,
I was able to compile emulationstation on my C2 successfully, but I get the following error when trying to run it:
lvl0: Error initializing SDL! Failed to connect to the Mir Server lvl0: Renderer failed to initialize! lvl0: Window failed to intialize!
This error occurs if lightdm is stopped or running. Any ideas? I'm new so go easy on me.
-
@mphil906
During the build, the script has also built and installed libsdl mali-2.04?
Which libsdl2 packages are installed? You should have:odroid@odroid64:~$ dpkg --list | grep sdl2 ii libsdl2-2.0-0:arm64 2.0.4+4mali arm64 Simple DirectMedia Layer hi libsdl2-dev:arm64 2.0.4+4mali arm64 Simple DirectMedia Layer development files
from this source:
https://github.com/RetroPie/SDL-mirror/tree/mali-2.0.4
and not the original ones of ubuntu. -
@roleo
Thank you for the reply, I was able to compile emulationstation succesfully. Indeed, the default Ubuntu sdl was installed. I cloned the original posters repository. I'm not entirely sure if this was the issue, but in the function platform_odroid-c2() {...} __platform_flags did not contain mali. This is what I used:function platform_odroid-c2() { __default_cflags="-O3 -march=armv8-a+crc -mtune=cortex-a53 -funsafe-math-optimizations" __default_asflags="" __default_makeflags="-j2" __platform_flags="armv8 neon mali" #added mali flag __qemu_cpu=cortex-a9 __has_binaries=0 }
Not sure if this was the issue, but it compiles and runs. Thanks! Now attempting to compile retroarch.
-
Just to note - I have a board now and will be looking at adding basic support as free time permits (ES + retroarch etc first).
-
-
@mphil906
See now I was just about to give up on this...dang...lemmie drag the darn thing out and give it another shot!
Thanks for posting! -
With the last changes of the EmulationStation github I have a new problem during the configure phase:
cmake . -DFREETYPE_INCLUDE_DIRS=/usr/include/freetype2/
The cmake didn't find the vlc library.
CMake Error at CMake/Packages/FindVLC.cmake:33 (macro_ensure_version): MACRO_ENSURE_VERSION Macro invoked with incorrect arguments for macro named: MACRO_ENSURE_VERSION Call Stack (most recent call first): CMakeLists.txt:51 (find_package)
--- EDIT ---
Sorry, my mistake.
The libvlc-dev was missing. -
I am currently working on odroid-c2 support - not trying to put you off working on it, but in case you don't want to duplicate efforts etc.
Contributions to the project are always appreciated, so if you would like to support us with a donation you can do so here.
Hosting provided by Mythic-Beasts. See the Hosting Information page for more information.