QEMU-0.8.0をWindowsでビルドする方法(How to build QEMU-0.8.0 on Windows MinGW)

QEMUのTAPあたりをデバッグする必要があったのでQEMU-0.8.0をビルドする方法を調べたのでまとめておきます。


方法は、基本的にQEMU同梱のqemu_doc.htmlに従っています。
1.http://www.mingw.org/からMinGW、MSYSをダウンロードしてインストール。(そのときの最新版でよいと思います。)
今日は以下のものが最新でした。
MinGW-5.0.2.exe
MSYS-1.0.11-2004.04.30-1.exe


2. SDLをインストール
http://www.libsdl.org/からSDL-devel-1.2.9-mingw32.tar.gz をダウンロード・解凍する。
SDL-1.2.9/bin/i386-mingw32msvc-sdl-configを sdl-config として MinGW/binにコピーする。


sdl-configを2箇所修正
prefix=/usr/local/cross-tools/i386-mingw32msvc # これを
prefix=c:/qemu-build/SDL-1.2.9 # SDLを解凍したディレクト
 
echo -I${prefix}/include/SDL -Dmain=SDL_main # これを
echo -I${prefix}/include -Dmain=SDL_main # これに


3. zlibのインストール
http://www.zlib.net/あたりから、zlib-1.2.2.tar.gzをダウンロード。
./configure --prefix=/usr
make
make install


4. QEMU-0.8.0にパッチを当てる
僕がインストールした、MSYS、MinGWだとなぜか、 include PATHに /usr/includeが入っていないので
適当にパッチをでっち上げました。
qemu-0.8.0-20060220.diff


5.QEMUのbuild
パッチを当てたら
./configure
make
make install


で、完成です。


以下余談(愚痴)ですが
sdl-configがいったい何なのか分からず苦労しました。
結局、QEMUの./configureにいろいろ埋め込んでデバッグしてやっと分かりました。
sdl-configは

sdl-config --libs
sdl-config --cflags

などとコマンドを打つと SDL のヘッダやライブラリへのパスを含んだ文字列を出力します。
これをコンパイルオプションとして利用しているというからくりなのです。


更にQEMUのconfigureでは、SDLがインストールされているかを調べるために、SDLを使用したCのソースをテンポラリで用意した上で、コンパイルしてみる、という力技をやっています。

cat > $TMPC << EOF
#include <SDL.h>
#undef main /* We don't want SDL to override our main() */
int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
EOF

if $cc -o $TMPE `$sdl_config --cflags 2> /dev/null` $TMPC `$sdl_config --libs 2> /dev/null` 2> /dev/null ; then
_sdlversion=`$sdl_config --version | sed 's/[^0-9]//g'`
if test "$_sdlversion" -lt 121 ; then
sdl_too_old=yes

なかなかバッドノウハウな感じで楽しかったです。
さて次はTAPパッチを加えてみようかな。


追記: tap, vlanパッチ当てた

追記2: sdl-configの話しで、xx-configはそもそもそういうものだ。と鋭い突込みがあるものの、Linux初心者なので許してね(←勉強しろよ