Da mein etwas in die Jahre gekommener GameCube in letzter Zeit wieder häufiger benutzt wird, wollte ich mal den Dolphin Emulator testen. Dazu muss dieser im ersten Schritt jedoch kompiliert werden - in meinem Fall für Ubuntu 18.04 LTS in einem passenden LXC Container.
- Warum Ubuntu 18.04 LTS?
- Weil mein Testsystem noch damit läuft und ich es nicht für den Dolphin-Test upgraden möchte.
- Warum im LXC Container?
- Weil ich mein Testsystem nicht mit den Abhängigkeiten für den Build zumüllen möchte. Zusätzlich gibt mir dies eine klare Vorstellung davon, welche Komponenten für den Build wirklich gebraucht werden.
Anlegen des passenden LXC Containers
Da ich LXC schon länger nutze ist es schon vorinstalliert und muss nicht mehr installiert werden. Alles, was ich noch machen muss, ist einen passenden LXC Container mit Ubuntu 18.04 LTS zu erzeugen:
cat > dolphin.conf << EOF lxc.include = /etc/lxc/default.conf lxc.idmap = u 0 100000 65535 lxc.idmap = g 0 100000 65535 lxc.apparmor.profile = unconfined lxc.net.0.type = veth lxc.net.0.link = lxcbr0 EOF lxc-create -n dolphin -t download -f dolphin.conf -- \ -d ubuntu -r bionic -a amd64 lxc-start -n dolphin
Für solche Anwendungen verwende ich meist einen unprivilegierten LXC Container. Diese funktionieren unter Ubuntu recht gut. Unter Debian gibt es dabei schon hin und wieder Probleme.
Installation der Abhängigkeiten
Nun, da der passende LXC Container angelegt ist, können die benötigten Pakete installiert werden:
lxc-attach -n dolphin << EOF apt install -y git autoconf libtool build-essential cmake \ pkg-config clang libxi-dev qtbase5-dev libgl1-mesa-dev \ libevdev-dev libudev-dev libpulse-dev libasound2-dev \ libbluetooth-dev libavcodec-dev libavformat-dev \ libavutil-dev libswscale-dev qtbase5-private-dev EOF
Herausforderungen
Der Build Prozess war nicht so einfach und straightforward, wie es hier den
Eindruck erwecken mag.
Meine ersten Versuche mit gcc
scheiterten kläglich.
Auch der Versuch, eine ältere Version von Dolphin 5.0 entsprechend
der Anleitung (Building Dolphin on
Linux)
zu kompilieren, hat nicht funktioniert, sondern führte zu diversen
Fehlermeldungen.
Erst die Verwendung von clang
ließ mich die neueste Dolphin Version bauen.
Dabei wird jedoch die alternative Standard-Library libc++
benötigt, welche
auf dem eigentlichen Testsystem nicht installiert ist und auch nicht
installiert werden soll.
Ein statisches Linken dieser Library sollte das Problem beheben.
Laut dem LLVM Bugtracker ist dies auch schon implementiert - nur leider nicht in der clang Version, welche mit Ubuntu 18.04 LTS geliefert wird.
Zum Glück lässt sich Dolphin auch mit der libstdc++
bauen und diese dann auch
statisch linken.
Neue Herausforderungen
All diese Versuche habe ich schon vor rund zwei Wochen gemacht. Als ich heute für diesen Artikel das Vorgehen nochmals testen wollte, musste ich feststellen, dass ich Fehler beim Kompilieren erhalte. Ich war mir jedoch sicher, dass ich Dolphin damals auf diesem Weg erfolgreich bauen konnte.
Was hatte sich also geändert? Habe ich eine Dependency vergessen zu installieren? Hatte ich Codefragmente in meinem Build-Verzeichnis, welche damals zum Erfolg führten, bei einer neuen Installation jedoch fehlen und so zu Fehlern führen?
Ein git log <DATEI>
zeigt, dass die Datei, welche den Fehler erzeugt, in den
letzten Tagen verändert wurde. Vielleicht haben neue Commits den Fehler
erzeugt?
Ich bin also ein paar Commits zurück gegangen und siehe da: Dolphin lässt sich wieder kompilieren! Manchmal wunder ich mich schon, wie knapp ich bei meinem ersten Versuchen zum Ziel kam. Hätte ich es nur eine Woche später versucht, wäre ich in diesen Fehler gelaufen und hätte wohlmöglich frustriert aufgegeben.
Build von Dolphin
So war ich letztlich erfolgreich, eine statisch gelinkte Dolphin Version für Ubuntu 18.04 LTS zu bauen:
lxc-attach -n dolphin << EOF git clone https://github.com/dolphin-emu/dolphin /dolphin cd /dolphin git checkout 07fd17445c6ca4e89b0cef023ba711bb27c920aa git submodule update --init mkdir build cd build cmake .. -DLINUX_LOCAL_DEV=true -DCMAKE_C_COMPILER=clang \ -DCMAKE_CXX_COMPILER=clang++ \ -DCMAKE_CXX_FLAGS="-stdlib=libstdc++" make -j$(nproc) cp -r ../Data/Sys/ Binaries/ touch Binaries/portable.txt EOF
Verwenden des GameCube Controllers unter Linux
Mit Hilfe des MAYFLASH Gamecube Controller Adapter lassen sich die original CameCube Controller unter Dolphin verwenden. Fehlende Zugriffsrechte auf das USB Gerät ließen sich schnell mit einer udev-Regel beheben. Details dazu finden sich im Dolphin Artikel: How to use the Official GameCube Controller Adapter for Wii U in Dolphin
Ausblick
Meine GameCube Spiele lassen sich nun auch unter Linux mit den original Controllern spielen. Dies ist beruhigend für den Fall, dass der GameCube (und vor allem das DVD Laufwerk) einmal das zeitliche segnen sollte. Ansonsten werden wir wohl vorerst beim GameCube bleiben.
Es zeigt sich, dass sich eine meiner Hoffnungen nicht erfüllt: Dolphin auf einem Ein-Platinen-Computer (wie dem Raspberry Pi) zu spielen. Dies ist wohl auf dem neuesten Raspberry Pi 4 gerade so möglich, aber teilweise noch mit Einschränkungen. Der GameCube hatte wohl doch schon eine ordentliche CPU und vor allem GPU Leistung, welche auch heute noch nicht von einfachen SoC-Boards erreicht wird.