Kategorien
OpenClonk

OpenClonk: Cross-Kompilieren der Engine

Falls ihr die OpenClonk Engine in Linux kompilieren wollt, hier wäre die Anleitung dazu:

Zuerst müsst ihr den mingw32 cross compiler für eure Distribution installieren. In Debian heißt das Paket mingw32. Dann müsst ihr die erforderlichen Abhängigkeiten fetchen. libpng, jpg, zlib, freetype und openssl könnt ihr euch auf gnuwin32 runterladen. Fetcht die Entwicklerpakete und entpackt alle nach deps, bzw. in ein Unterverzeichnis. Die glew binaries findet ihr auf dieser homepage. Ich verschiebe diese in ein seperates glew/ Verzeichnis, aber es ist genauso gut, alle Dateien zusammen mit den anderen nach deps/ zu verschieben. fmod gibt es dann hier. Ich entpacke die Dateien nochmals in ein seperates fmod/ Verzeichnis.

Nun kommt der knifflige Teil: Die d3dx library. MinGW hat eine library-Datei dafür, diese wird libd3dx9d.a genannt, aber hier sind keine Header-Files vorhanden. Wie auch immer,  Wine hat diese Dateien (in /usr/include/wine/windows/d3dx9*.h auf meinem System). Also kopiert nun alle nach d3dx9/include/ (oder deps/include/ FWIW). Allerdings beinhalten die Wine Header Dateien nicht alle die von Clonk benutzen Symbole, also müssen noch die fehlenden eingetragen werden. Ich habe dafür einen Patch geschrieben. Aber da gibt es noch ein anderes Problem: MinGW’s libd3dx9d.a exportiert nicht das Symbol D3DXCompileShader. Ich benutze stattdessen d3dx9.lib vom offiziellen DirectX SDK und kopiere diesen nach d3dx9/lib/. Wenn du dieses nicht besitzt, ist es zielich lästig an diese Datei heranzukommen: Du musst einen 100MB Multiinstaller für nur diese eine Library-Datei herunterladen. Ich glaube ja, dass es durchaus möglich ist eine funktionierende libd3dx9.a herzustellen, in dem man die .def File von Wine benutzt, aber das habe ich nicht ausprobiert.

Okay, wenn wir das alles erledigt haben, dann haben wir alle Abhängigkeiten erfüllt. Was wir nun noch brauchen: Eine sogenannte toolchain-Datei für cmake, um ihn mitzuteilen, dass wir nicht die Zielplatform anvisieren, die wir jetzt gerade zusammenbauen. Für dieses Vorhaben, erzeugen wir eine neue Datei names toolchain-mingw32.cmake (oder anders, das ist nicht wichtig) und fügen folgenden Inhalt hinzu:

# the name of the target operating system
SET(CMAKE_SYSTEM_NAME Windows)

# which compilers to use for C and C++
SET(CMAKE_C_COMPILER i586-mingw32msvc-gcc)
SET(CMAKE_CXX_COMPILER i586-mingw32msvc-g++)
SET(CMAKE_RC_COMPILER i586-mingw32msvc-windres)

# here is the target environment located
SET(CMAKE_FIND_ROOT_PATH /usr/i586-mingw32msvc /home/ck/deps /home/ck/glew/glew-1.5.2 /home/ck/d3dx9 /home/ck/fmod/fmodapi375win/api)

# adjust the default behaviour of the FIND_XXX() commands:
# search headers and libraries in the target environment, search
# programs in the host environment
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

Wichtig: Ihr müsst die Pfade hinzufügen, die für die jeweiligen Abhängigkeiten erforderlich sind. Eines gibt es nun noch zu tun, wenn ihr verschiedene Verzeichnisse für glew, fmod und d3dx9 benutzt habt: Ihr müsst Symlinks zu den deps hinzufügen:

ln -s glew/glew-1.5.2/include/GL deps/include/GL
ln -s fmod/fmodapi375win/api/inc/*.h deps/include
ln -s d3dx9/include/*.h deps/include

Ich glaube, das ist nur nötig, da das OpenClonk CMake Script die Pfade für diese libraries von Compiler-Flags nicht beinhaltet.  Zuletzt, führt noch 

cmake -DCMAKE_TOOLCHAIN_FILE=~/toolchain-mingw32.cmake -DCMAKE_INSTALL_PREFIX=~/mingw-install
make

aus und schaut in Ruhe zu, wie der Code kompiliert wird.

Ursprünglicher Post von Clonk-Karl am 03. Februar 2010

2 Antworten auf „OpenClonk: Cross-Kompilieren der Engine“

Schönes Tutorial, nur bringt es für die meisten Nutzer nichts. Wie wäre es für ein Kompilier-Tutorial für Windowsuser in absehbarer Zeit?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert