Retropie 4.x on Odroid C2
-
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.
-
Apart reicast, I compiled everything I needed but I will continue to work on it for personal pleasure.
If I can help ...Thanks for your support.
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.