***本記事にはプロモーションが含まれています。***
はじめに
久しぶりにWindows上でQEMUを作ろうとしたら、ソースコードの修正が入っていて作り方が変わっていました。いろいろ試行錯誤して作り方を見つけたので紹介します。
QEMUのソースコードの現状
今年(2016年)の3月までは、GCC 4.5とGTK+ 3.6.4という組み合わせでコンパイルできていました。でも、MinGW-w64のgcc 4.8になるとwinsock関係のインクルードファイルに変更があって、それに対応するためにQEMUにも変更が入りました。
この変更で、GTK+ 3.6.4のライブラリ内でワーニングが出てしまい、QEMUをコンパイルできなくなりました。GCC 5.4に変えても無理で、GTK+のライブラリのバージョンを上げることが必要になりました。
作成環境の現状
QEMUは、GTK+に含まれるGlibというライブラリを使っています。Windows上でコンパイルしようとするときは、今まではGTK+のホームページからx86_64版をダウンロードして使ってきました。しかし、メンテナンスする人がいないようで、配布されなくなりました。GTK+のホームページでは、MSYS2という開発環境を使うよう案内があります。今後は、MSYS2を使った環境でしかQEMUを作れないことになりそうです。
Linux上のクロス開発環境では今までどおり作れると思います。
MSYS2のインストール
MSYS2はインストーラーが準備されていますので、MSYS2インストーラーのホームページからmsys2-x86_64-20160205.exeというインストーラーをダウンロードしてインストールするだけです。
SourceForgeにあるMSYS2の新しいインストーラーはなぜか起動しなかったです。
インストール後にMSYS2インストーラーのホームページに従ってアップデートするのですが、
pacman -Sy pacman
は大丈夫でした。しかし、次の
pacman -Syu
をすると、エラーで止まってしまいました。新しいプロセスをフォークできませんと言っています。調べてみると、エラーのあったパッケージは手動でインストールしなおさないといけないそうです。filesystemというパッケージがエラーになっているのをメモリました。仕方がないのでCrtl-Cでプロンプトに戻り、いったんターミナルを終了しました。ターミナルを、もう一度スタートメニューから起動しようとしましたが起動せず、コマンドプロンプトが出てしまいます。
原因は、MSYS2の起動方法が変わり、batファイルで起動していたのをcmdファイルに変更したためです。
C:\msys64\msys2_shell.cmdをダブルクリックすることでターミナルは起動しました。そこで、
pacman -S filesystem
で、filesystemをインストールしなおします。メッセージに起動方法が変わったことが出ていました。
あとは、スタートニューのMSYS2 Shellの項目のプロパティを開き、
C:\Windows\System32\cmd.exe /A /Q /C C:\msys64\msys2_shell.cmd -msys
と書き換えることで起動できるようになります。ポイントは、msys2_shell.cmdを指すように変更することです。コマンドプロンプトのウィンドウも閉じるように/Kオプションを/Cオプションに変更しました。なお、Windows 10では、右クリックでプロパティを表示させることができませんでした。いったん「ファイルの場所を開く」で、エクスプローラーを表示させて、アイコンを右クリックでプロパティを変更することができます。
スタートメニューの問題は、インストーラーがアップデートされれば、いずれなくなると思います。
QEMUに必要なツールのインストール
MSYS2のアップデートが終わったら、QEMUに必要なツールをインストールします。
MSYS2は、パッケージマネージャで管理されているので、次のようにしました。まずは、gccなどのツールをインストールします。
pacman -S mingw-w64-x86_64-toolchain
次に、GTK3をインストールします。
pacman -S mingw-w64-x86_64-gtk3
SDLライブラリも必要なので入れます。
pacman -S mingw-w64-x86_64-SDL2
あとは、makeとcmpとbisonが無いといわれますのでインストールします。
pacman -S msys/make
pacman -S diffutils
pacman -S bison
これで、必要なツールは、インストールできました。あとは、QEMUのソースコードを持ってきて作るだけです。
QEMUを作るときは、MinGW-w64 Win64 Shellを起動して作ります。このときの起動パラメーターは、-mingw64をつけます。スタートメニューのMinGW-w64 Win64 Shellのプロパティを変更する必要がありました。
C:\Windows\System32\cmd.exe /A /Q /C C:\msys64\msys2_shell.cmd -mingw64
まとめ
QEMUをWindowsで作るにはMSYS2の開発環境が必要になりました。
MSYS2のインストールで、エラーが出るため手動で書き換える必要がありました。
感想
MSYS2のMinGW-w64のGCCのバージョンは、6.1.0です。ちょっと見ないうちにすごく上がってしまいました。
GTK+のWindows版をメンテナンスする人がいないということは、使う人もいないのでしょうね。開発の主力がインターネットのほうに移っているのでしょう。時代の流れを感じます。
MSYS2という環境は、パッケージマネージャがあるので、環境整備はやりやすくなったと思います。
CppUTest と QEMU で組み込みのテスト駆動開発をもくろんでおります。情報が少ないので助かります。
お世話になります。
SDL2 のインストールのコマンドラインが間違っているようです。
pacman -S mingw-w64-x86_64-SDL2
お役に立てて何よりです。少し古くなっているので、何かしら変更があるのかもしれません。
SDLライブラリは、間違えてすみません。直しておきました。
こんにちは。
MSYSはMinGWの補完という役割だったと思いますが、MSYS2はMSYS2 ShellとMinGW-w64 Win64 Shellの使い分けがよくわかりません…。この記事でも使い分けておられますね。
コメントありがとうございます。
MSYS2のシェルを立ち上げると、MSYSでインストールしたプログラムだけが使えます。MinGW 64bitのシェルだとmingw64でインストールしたプログラムとmsysの両方が使えます。mingw32でインストールしたプログラムは使えないです。
自分の場合は、MinGW 64bitでインストールできるものはインストールして、不具合があるものについてはMSYSのものを使うようにしていました。記事の中でMSYS/makeを使っていますが、なぜそうしたかは覚えていません。確か、32bitのQEMUも同時に作るためにそうしたような気がします。バージョンによって動かなかったりもするので、やってみて調べるしか方法がないです。