msys2 + MinGW64 gcc のインストールから始めて、allegroをビルド・インストールするまで。 DirectX SDKはとりあえず無し。(201411,20162)

clang3.5.1でもビルドできる。(2015/3追記)

msys2のインストール

sourceforgeのMSYS2 wikiに従ってインストールと、アップデートを行う。

allegroのビルドに必要なツール

管理者権限のシェルで、パッケージをインストールしてゆく。

git, make, cmake

# pacman -S git make mingw-w64-x86_64-cmake
  • コンパイラ

    gccなら

    # pacman -S mingw-w64-x86_64-gcc        # 5.3.0はOK. 4.9.2でもOK。
    

    clang を使う場合は

    # pacman -S mingw-w64-x86_64-clang  # 試したときは3.5.1-1だった gccと同居可。
    

ビルドには必要無いが、いずれ使うのでgdbも。

# pacman -S mingw-w64-x86_64-gdb

allegroが依存するライブラリの準備

必要なものをインストールしておけば、ビルドの際、検出して使ってくれる。私は全部入れた。

  • mingw-w64-x86_64-freetype # フォントは必要でしょう。
  • mingw-w64-x86_64-physfs # 抽象化されたファイルストレージ
  • mingw-w64-x86_64-libvorbis # ogg再生
  • mingw-w64-x86_64-flac # flac再生
  • mingw-w64-x86_64-dumb # (IT/ XM/S3M/MODなど)
  • mingw-w64-x86_64-libtheora # theora動画
  • mingw-w64-x86_64-libjpeg-turbo #jpegイメージ

(20162) freetypeで循環依存の警告が出るのと、依存するfontconfig のポストインストールでfc-cacheが失敗する。コマンドラインに戻ってから fc-cache でエラーなく完了したので放置。

制限ユーザーでシェルを実行する準備

このままだと、Windowsの管理者権限が無いユーザーでシェルを実行できない。 msys2 非管理ユーザーのアクセス許可 の手順で、/tmpや/homeなどのアクセス権を調整しておく。

以下の $ コマンド...は標準(制限)ユーザーのシェルコマンドラインを、また# コマンド...は管理者権限のものを示す。

allegroビルド

ソースをclone

適当なフォルダで、allegroのgitリポジトリからソースツリーをcloneする。

$ mkdir /d/temp/work
$ cd /d/temp/work
$ git clone git://git.code.sf.net/p/alleg/allegro

clang用環境変数設定

gccの代わりにclangを使用する場合、次のcmakeの手順より先に

  • export CC=clang
  • export CXX=clang++としておく。

mingw-w64-x86_64-clang 3.5.1-1使用で、-lallegro -lallegro_primitives -lallegro_audioを使用したプログラムでは実行、eclipse(gdb)でのソースコードデバッグとも出来るようだ。 試しに使用したコンパイラオプションは -g -O0(か3) -march=core-avx-i -std=c++14。marchのターゲット名は、今現在のcpuであれば -march=native -v の標準エラー出力を読むと分かる(-target-cpu を探す )。

Makefile生成

cmakeを使ってMakefileを生成する。ソースツリーの外でビルドするので、そのためのフォルダを用意する。

$ mkdir build_allegro_monolith
$ ls
allegro  build_allegro_monolith
$ cd build_allegro_monolith
$ cmake \
-G"MSYS Makefiles" \
  -DCMAKE_SYSTEM_PREFIX_PATH:PATH=/mingw64/x86_64-w64-mingw32/ \
  -DWANT_MONOLITH=on \
  ../allegro

これは全てを単一のライブラリに纏める場合の例(モノリシック)。私は既存のプロジェクトのため、-DWANT_MONOLITH=on を指定せずにビルドしている。

ビルド

$ make

インストール

管理者シェルで

# make install

これで良いが、バイナリのアーカイブ化できるか、(あるいは簡単にアンインストールできるか)やってみた。

サンドボックスへインストール

cmake_install.cmake にインストール手順が記されており、先頭の CMAKE_INSTALL_PREFIX がインストール先を決めている。これを書き換えてインストールしてみる。標準ユーザーで作業。

$ mkdir /d/temp/sandbox
$ vim cmake_install.cmake
if(NOT DEFINED CMAKE_INSTALL_PREFIX)
#       set(CMAKE_INSTALL_PREFIX "S:/msys64/mingw64")
        set(CMAKE_INSTALL_PREFIX "D:/temp/sandbox/mingw64")
$ make install

ディレクトリパスをcygpath で生成する場合は、ドライブレターとスラッシュを混在させる -m/–mixed を使用する。 /home/… とか /c/Users/… だとmake install が全てup to dateになる。

これをアーカイブしておけば即席バイナリパックとして使えるし、ファイルリストを保存しておけばアンインストールできる。

インストールで上書きされるファイルはないか、調べる。

$ cd /d/temp/m2al_sandbox/
$ find . -mindepth 1 -type f | sed 's#^./##' | while read p; do \
  if [ -e /"$p" ] ; then echo "existing file: /$p" ; fi ; done

今回の結果は上書きなしだったので、フォルダを放置してよければ簡単にアンインストールできる。

作成されるフォルダがどれかは、

$ cd /d/temp/m2al_sandbox/
$ find . -mindepth 1 -type d | sed 's#^./##' | while read p; do \
  if [ ! -e /"$p" ] ; then echo "non-existing directory: /$p" ; fi ; done
non-existing directory: /mingw64/include/allegro5
non-existing directory: /mingw64/include/allegro5/inline
non-existing directory: /mingw64/include/allegro5/internal
non-existing directory: /mingw64/include/allegro5/opengl
non-existing directory: /mingw64/include/allegro5/opengl/GLext
non-existing directory: /mingw64/include/allegro5/platform

なので、ファイルをアンインストールした後、これらが空であれば削除してよさそうだ。