alephoneのクロスコンパイル
以前コンパイルできた環境を無くしたため、環境の再構築にちと手間取りました。もう手間取りたくないのでちょっと細かめに書いておきます。Linuxを用いてWindows用のAlephOne.exeを作成する方法です。確認はしていませんが、OSXでも同様の方法でコンパイルできると思います。
手順についてはAleph One - Marathon Open Sourceと昔書いたビルド方法、marathon-devel MINGW cross compilationを参考にしました。
準備
AlephOneのプロジェクトから最新のソースファイル一式をダウンロードし、適当な場所に展開。
クロスコンパイルに利用するcross-make.shとcross-configure.shを適当な場所にダウンロード。(今回は/tmp)
クロスコンパイル環境の作成
適当な場所(今回は/tmp)にbuildcrossディレクトリを作成し、build-cross.shをダウンロード。
build-cross.shの、26行目から36行目までを以下のように書き換え
MINGW_URL=http://nchc.dl.sourceforge.net/sourceforge/mingw GCC_VERSION=3.4.5-20060117-1 GCC=gcc-$GCC_VERSION GCC_ARCHIVES="gcc-core-$GCC_VERSION-src.tar.gz gcc-g++-$GCC_VERSION-src.tar.gz" GCC_PATCH="" BINUTILS=binutils-2.16.91-20060119-1 BINUTILS_ARCHIVE=$BINUTILS-src.tar.gz MINGW=mingw-runtime-3.9 MINGW_ARCHIVE=$MINGW.tar.gz W32API=w32api-3.6 W32API_ARCHIVE=$W32API.tar.gz
115行目のconfigureに--disable-dlsオプションを追加する。
"$SRCDIR/$BINUTILS/configure" --prefix="$PREFIX" --target=$TARGET --disable-nls &> con
ビルド環境を構築する場所を指定する場合は、17行目のPREFIXを変更する。(今回はデフォルト)
PREFIX=/usr/local/cross-tools
build-cross.shを実行。*1
ライブラリのビルド
SDL
SDL-1.2.11.tar.gzをダウンロードし、ビルドを行っているマシン上にSDLをインストール。
次に、SDL-devel-1.2.11.tar.gzをダウンロード。パッケージ内のbin/ lib/ include/ share/のファイルを/usr/local/cross-tools/i386-mingw32msvc/にコピー。
SDL_net
SDL_net-1.2.5.tar.gzをダウンロード。
ネイティブ環境でインストールし、その後クロスビルド。
$ /tmp/cross-configure.sh --disable-shared
$ /tmp/cross-make.sh install
JPEG
JPEG最新版のソースをダウンロードし、ビルド。
$ /tmp/cross-configure.sh --disable-shared --prefix=/usr/local/cross-tools/i386-mingw32msvc $ /tmp/cross-make install-lib
zlib
zlib最新版をダウンロード。
cross-configure.shをもう1つ作成し、--cache-file、--target、--hostオプションをはずす。
$ /tmp/cross-configure-zlib.sh --disable-shared --prefix=/usr/local/cross-tools/i386-mingw32msvc
出来上がったMakefileのCCを
CC=/usr/local/cross-tools/i386-mingw32msvc/bin/gcc
に変更後、ビルド。
$ /tmp/cross-make libz.a $ /tmp/cross-make install
libPNG
libpngから最新版をダウンロードしてビルド。
$ /tmp/cross-configure.sh --prefix=/usr/local/cross-tools/i386-mingw32msvc
$ /tmp/cross-make install
libtiff
libtiffから最新版をダウンロードしてビルド。
$ /tmp/cross-configure.sh --disable-shared
$ /tmp/cross-make.sh install
SDL_image
SDL_imageから最新版のソースをダウンロードしてビルド。
$ /tmp/cross-configure.sh --disable-shared --prefix=/usr/local/cross-tools/i386-mingw32msvc $ /tmp/cross-make install
smpeg
Alephoneのソースファイル内のLibraryディレクトリのsmpegをビルド
$ ./autogen.sh $ LIBS="-lstdc++" /tmp/cross-configure.sh --disable-shared --enable-gtk-player=no --prefix=/usr/local/cross-tools/i386-mingw32msvc $ /tmp/cross-make install
SDL_sound
subversionからSDL_Soundを取得
$ svn co svn://svn.icculus.org/SDL_sound/branches/stable-1.0/ SDL_sound-stable-1.0 $ cd SDL_sound-stable-1.0 $ ./bootstrap $ CFLAGS="-I/usr/local/cross-tools/i386-mingw32msvc/include/smpeg" LIBS="-lstdc++" \ ./cross-configure.sh --disable-shared --prefix=/usr/local/cross-tools/i386-mingw32msvc \ --enable-smpeg --disable-midi --disable-mpglib
$ sed -ie s/playsound//g Makefile
$ /tmp/cross-make.sh install
Speex
Speexをダウンロード。
$ /tmp/cross-configure.sh --prefix=/usr/local/cross-tools/i386-mingw32msvc --enable-ogg=no --disable-shared $ /tmp/cross-make.sh install
Lua
Luaをダウンロード。
configファイルのINSTALL_ROOTを変更
INSTALL_ROOT= /usr/local/cross-tools/i386-ming32msvc
コンパイル&インストール
$ /tmp/cross-configure.sh $ /tmp/cross-make.sh install
boost
boostからネイティブのboost-jamをDLし、インストール。同じ場所からboostライブラリもDL。
ライブラリを展開して、
$ bjam -sTOOLS="gcc" --prefix="/usr/local/cross-tools/i386-mingw32msvc" --sGXX="/usr/local/cross-tools/i386-mingw32msvc/bin/g++" --with-bind --with-function install
AlephOneのビルド
不足ファイルの取得
配布されているパッケージには足りないファイルがいくつかあるため、CVSからダウンロード。
- /aleph/autogen.sh
- /aleph/Source_Files/Network/network_microphone_shared.h
- /aleph/Resources/Windows/*
一部修正
Source_Files/RenderOther/screen_shared.h内の732行目のGL_BGRAをGL_RGBAに変更(参考:marathon-devel Windows Build Problem)。ビルド環境がOpenGL1.2に対応していないため。
ビルド
$ ./autogen.sh $ ./configure $ cd Source_Files/Expat $ make gennmtab $ cd ../.. $ LIBS="-ljpeg -lpng -lz -lstdc++ -lws2_32" /tmp/cross-configure.sh $ cd Source_Files/Expat $ make clean $ cd ../.. $ /tmp/cross-make.sh
成功すればSource_Files/AlephOne.exeが作成される。
その他
おまけ
2chのmarathonスレpart8の>>217さんが作成したパッチを当ててみました。MMLまで日本語対応していますね。すごい!
*1:デフォルトではroot権限が必要