Windowsサポート

進捗報告

windowsサポート

おおよそマルチプラットフォームなライブラリを使っているので、
さっと移植したかったのですが、環境構築とコンパイルが面倒だったので色々メモを残します。

MinGW, MSYS

windowsにはGNU ToolChainが標準ではないので、MinGW/MSYSを使いました。
http://sourceforge.net/projects/mingw/files/

インストール後、 C:¥MinGW¥msys¥1.0¥msys.bat からmsysターミナルを起動して、
すぐにminttyターミナルをインストールします。

mingw-get install mintty
mintty

minttyが立ち上がったら、すぐにタスクバーに貼付け。
タスクバーアイコンを右クリックメニューからプロパティを開いて、
起動コマンドの最後に " -" を付けます。(デフォルトだとshを開きにいくので回避するため)

curl

Windowsにはデフォルトでcurlも入っていないので、インストールします。
http://curl.haxx.se/download.html

ページからWin向けのインストーラがあるので、そちらを利用します。
インストール後、環境変数のPATHにcurlのbinを追加します。

OpenAL

WindowsにはOpenALも入っていないので、インストールします。
http://www.openal.org/creative-installers/

OpenAL11CoreSDK.zipをダウンロードして、中に入っているInstallerを起動。
OpenALをインストールします。
includeとlibはコピーするなり、がんばってリンクをするなりします。

chicken scheme

公式ページからコードを落としてMinGWでビルドできます。
http://code.call-cc.org/

make install PLATFORM=mingw-msys PREFIX=C:/mingw

PREFIXはお好み次第ですが、
私はmingw環境に未練はないので直で入れてしまいます。

cmake

alureとglfwにはcmakeが使われているので、こちらも公式ページから落としてきてビルドします。
http://www.cmake.org/download/

からUnix/Linuxソースを落としてきて、MinGW環境でビルドできます。

./configure --prefix=C:/mingw
make install

各ライブラリのビルド

alureとglfw

cmake を使ってビルドするので、configureの代わりにcmakeを使います。

cmake . -G"MSYS Makefiles" -DCMAKE_INSTALL_PREFIX=C:/mingw
make install
それ以外

MSYS環境なので、いつも通りのビルドが可能です。

./configure --prefix=C:/mingw
make install

ただし、zlibはビルドがMSYS環境だと win32/Makefile.gcc を利用するため、
若干変化球になります。

make -f win32/Makefile.gcc
make install LIBRARY_PATH=C:/mingw/lib INCLUDE_PATH=C:/mingw/include BINARY_PATH=C:/mingw/bin
GLEW

Windows環境では、OpenGL上位のバージョンを使うためにはGL拡張の読み込みが必要ですが、
実装と保守が手間になるので、Windows環境ではGLEWを利用するようにしました。
http://glew.sourceforge.net/

ソースをダウンロードしてきてビルドします。(公式のInstallationページにも書いてありますが、インストール先指定のマクロが若干特殊なので注意です)

make
make install GLEW_DEST=C:/mingw
ヘッダーファイルとビルド構成

各ライブラリのヘッダーファイルまでのパスとライブラリファイルの名前が
Windows環境は特殊なので、そちらに合わせてビルド構成を切り替えました。

Chicken Scheme自体が、features でプラットフォーム固有のfeatureを持つので、
cond-expandを利用してライブラリファイルを切り分けるようにしました。

ビルド完了

ここまで準備してようやくビルドが通りました。
2年前くらいにも同じことをやっていましたが、
細かいところで記憶が抜け落ちていたので地味にイライラする作業になりました。

関数リアクティブプログラミング(FRP)

ゲームアプリケーションである以上、
アプリケーションの駆動システムが必要になるのですが、
イベント駆動系や状態機械にしてしまうと、
副作用がコードに散逸してしまうのであまり印象が良くありません。

関数型プログラミングの界隈ではFRPというアプローチが、
数年前からちらほら記事にされていたのを思い出したので、
この方式が役に立たないか検討中です。

TODO

  • いい加減描画処理の入力部分を整える
  • FRPを取り入れる?