{"id":5,"date":"2010-05-12T17:29:00","date_gmt":"2010-05-12T15:29:00","guid":{"rendered":"http:\/\/clonkspot.org\/blog\/?p=5"},"modified":"2025-05-15T11:40:20","modified_gmt":"2025-05-15T09:40:20","slug":"openclonk-cross-kompilieren-der-engine","status":"publish","type":"post","link":"https:\/\/clonkspot.org\/blog\/2010\/05\/12\/openclonk-cross-kompilieren-der-engine\/","title":{"rendered":"OpenClonk: Cross-Kompilieren der Engine"},"content":{"rendered":"<p><span style=\"font-family:verdana;\"><span style=\"font-size:85%;\">Falls ihr die OpenClonk Engine in Linux kompilieren wollt, hier w\u00e4re die Anleitung dazu:<\/span><\/span><\/p>\n<p><span style=\"font-family:verdana;\"><span style=\"font-size:85%;\">Zuerst m\u00fcsst ihr den mingw32 cross compiler f\u00fcr eure Distribution installieren. In Debian hei\u00dft das Paket mingw32. Dann m\u00fcsst ihr die erforderlichen Abh\u00e4ngigkeiten fetchen. libpng, jpg, zlib, freetype und openssl k\u00f6nnt ihr euch auf <\/span><\/span><a href=\"http:\/\/gnuwin32.sourceforge.net\/\"><span style=\"font-family:verdana;\"><span style=\"font-size:85%;\">gnuwin32<\/span><\/span><\/a><span style=\"font-family:verdana;\"><span style=\"font-size:85%;\"> runterladen. Fetcht die Entwicklerpakete und entpackt alle nach deps, bzw. in ein Unterverzeichnis. Die glew binaries findet ihr auf dieser <\/span><\/span><a href=\"http:\/\/glew.sourceforge.net\/\"><span style=\"font-family:verdana;\"><span style=\"font-size:85%;\">homepage<\/span><\/span><\/a><span style=\"font-family:verdana;\"><span style=\"font-size:85%;\">. 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 <\/span><\/span><a href=\"http:\/\/www.fmod.org\/index.php\/download\"><span style=\"font-family:verdana;\"><span style=\"font-size:85%;\">hier<\/span><\/span><\/a><span style=\"font-family:verdana;\"><span style=\"font-size:85%;\">. Ich entpacke die Dateien nochmals in ein seperates fmod\/ Verzeichnis.<\/span><\/span><\/p>\n<p><span style=\"font-family:verdana;\"><span style=\"font-size:85%;\">Nun kommt der knifflige Teil: Die d3dx library. MinGW hat eine library-Datei daf\u00fcr, diese wird libd3dx9d.a genannt, aber hier sind keine Header-Files vorhanden. Wie auch immer, \u00a0<\/span><\/span><a href=\"http:\/\/www.winehq.org\/\"><span style=\"font-family:verdana;\"><span style=\"font-size:85%;\">Wine<\/span><\/span><\/a><span style=\"font-family:verdana;\"><span style=\"font-size:85%;\"> 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\u00fcssen noch die fehlenden eingetragen werden. Ich habe daf\u00fcr einen <\/span><\/span><a href=\"http:\/\/arbur.net\/clonk\/d3dx9.patch\"><span style=\"font-family:verdana;\"><span style=\"font-size:85%;\">Patch<\/span><\/span><\/a><span style=\"font-family:verdana;\"><span style=\"font-size:85%;\"> geschrieben. Aber da gibt es noch ein anderes Problem: MinGW&#8217;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\u00e4stig an diese Datei heranzukommen: Du musst einen 100MB Multiinstaller f\u00fcr nur diese eine Library-Datei herunterladen. Ich glaube ja, dass es durchaus m\u00f6glich ist eine funktionierende libd3dx9.a herzustellen, in dem man die .def File von Wine benutzt, aber das habe ich nicht ausprobiert.<\/span><\/span><\/p>\n<p><span style=\"font-family:verdana;\"><span style=\"font-size:85%;\">Okay, wenn wir das alles erledigt haben, dann haben wir alle Abh\u00e4ngigkeiten erf\u00fcllt. Was wir nun noch brauchen: Eine sogenannte toolchain-Datei f\u00fcr cmake, um ihn mitzuteilen, dass wir nicht die Zielplatform anvisieren, die wir jetzt gerade zusammenbauen. F\u00fcr dieses Vorhaben, erzeugen wir eine neue Datei names <\/span><\/span><em><span style=\"font-family:verdana;\"><span style=\"font-size:85%;\">toolchain-mingw32.cmake<\/span><\/span><\/em><span style=\"font-family:verdana;\"><span style=\"font-size:85%;\"> (oder anders, das ist nicht wichtig) und f\u00fcgen folgenden Inhalt hinzu:<\/span><\/span><\/p>\n<p><span style=\"font-size:85%;\"># the name of the target operating system<br \/>SET(CMAKE_SYSTEM_NAME Windows)<\/p>\n<p># which compilers to use for C and C++<br \/>SET(CMAKE_C_COMPILER i586-mingw32msvc-gcc)<br \/>SET(CMAKE_CXX_COMPILER i586-mingw32msvc-g++)<br \/>SET(CMAKE_RC_COMPILER i586-mingw32msvc-windres)<\/p>\n<p># here is the target environment located<br \/>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)<\/p>\n<p># adjust the default behaviour of the FIND_XXX() commands:<br \/># search headers and libraries in the target environment, search<br \/># programs in the host environment<br \/>set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)<br \/>set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)<br \/>set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)<\/span><span style=\"font-family:verdana;\"><span style=\"font-size:85%;\"><br \/><\/span><\/span><\/p>\n<p><span style=\"font-family:verdana;\"><span style=\"font-size:85%;\">Wichtig: Ihr m\u00fcsst die Pfade hinzuf\u00fcgen, die f\u00fcr die jeweiligen Abh\u00e4ngigkeiten erforderlich sind. Eines gibt es nun noch zu tun, wenn ihr verschiedene Verzeichnisse f\u00fcr glew, fmod und d3dx9 benutzt habt: Ihr m\u00fcsst Symlinks zu den deps hinzuf\u00fcgen:<\/span><\/span><\/p>\n<p>ln -s glew\/glew-1.5.2\/include\/GL deps\/include\/GL<span style=\"font-family:verdana;\"><span style=\"font-size:85%;\"><br \/><\/span><\/span>ln -s fmod\/fmodapi375win\/api\/inc\/*.h deps\/include<span style=\"font-family:verdana;\"><span style=\"font-size:85%;\"><br \/><\/span><\/span>ln -s d3dx9\/include\/*.h deps\/include<span style=\"font-family:verdana;\"><span style=\"font-size:85%;\"><br \/><\/span><\/span><\/p>\n<p><span style=\"font-family:verdana;\"><span style=\"font-size:85%;\">Ich glaube, das ist nur n\u00f6tig, da das OpenClonk CMake Script die Pfade f\u00fcr diese libraries von Compiler-Flags nicht beinhaltet. \u00a0Zuletzt, f\u00fchrt noch\u00a0<\/span><\/span><\/p>\n<p><span style=\"font-size:85%;\">cmake -DCMAKE_TOOLCHAIN_FILE=~\/toolchain-mingw32.cmake -DCMAKE_INSTALL_PREFIX=~\/mingw-install<span style=\"font-family:verdana;\"><br \/><\/span>make<\/span><span style=\"font-family:verdana;\"><span style=\"font-size:85%;\"><br \/><\/span><\/span><\/p>\n<p><span style=\"font-family:verdana;\"><span style=\"font-size:85%;\">aus und schaut in Ruhe zu, wie der Code kompiliert wird.<\/span><\/span><\/p>\n<p><span style=\"font-family:verdana;\"><span style=\"font-size:78%;\">Urspr\u00fcnglicher Post von Clonk-Karl am 03. Februar 2010<\/span><\/span><span style=\"font-family:verdana;\"><span style=\"font-size:85%;\"><br \/><\/span><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Falls ihr die OpenClonk Engine in Linux kompilieren wollt, hier w\u00e4re die Anleitung dazu: Zuerst m\u00fcsst ihr den mingw32 cross compiler f\u00fcr eure Distribution installieren. In Debian hei\u00dft das Paket mingw32. Dann m\u00fcsst ihr die erforderlichen Abh\u00e4ngigkeiten fetchen. libpng, jpg, zlib, freetype und openssl k\u00f6nnt ihr euch auf gnuwin32 runterladen. Fetcht die Entwicklerpakete und entpackt [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[110],"class_list":["post-5","post","type-post","status-publish","format-standard","hentry","category-openclonk","tag-openclonk"],"_links":{"self":[{"href":"https:\/\/clonkspot.org\/blog\/wp-json\/wp\/v2\/posts\/5","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/clonkspot.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/clonkspot.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/clonkspot.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/clonkspot.org\/blog\/wp-json\/wp\/v2\/comments?post=5"}],"version-history":[{"count":2,"href":"https:\/\/clonkspot.org\/blog\/wp-json\/wp\/v2\/posts\/5\/revisions"}],"predecessor-version":[{"id":103,"href":"https:\/\/clonkspot.org\/blog\/wp-json\/wp\/v2\/posts\/5\/revisions\/103"}],"wp:attachment":[{"href":"https:\/\/clonkspot.org\/blog\/wp-json\/wp\/v2\/media?parent=5"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/clonkspot.org\/blog\/wp-json\/wp\/v2\/categories?post=5"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/clonkspot.org\/blog\/wp-json\/wp\/v2\/tags?post=5"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}