Windows上でzlibが必要になった。libpngを使おうとしたら依存関係の都合でzlibも欲しくなったのだ。
zlibのバイナリは例えばZlib for Windowsなどで入手できるものの、微妙に古い。そこで最新版だと思われるzlib-1.2.7をMinGW*1でビルドすることにした。
ソースコードはhttp://zlib.net/から入手。取得したzlib-1.2.7.tar.bz2を伸張・展開するとzlib-1.2.7というディレクトリができるので、コマンドプロンプトでその中に入る。
単純にビルドするだけなら以下でOK。
make -f win32\Makefile.gcc all
今回は高速化の為にアセンブラコードcontrib/asm686/match.Sを使い、且つ若干の最適化オプションを追加してビルドする。match.Sを使うとPentiumより前のCPUでは動作しなくなる。やり方は猫科研究所の記事を参考にした。
copy contrib\asm686\match.S . make -f win32\Makefile.gcc all LOC="-DASMV -s -mms-bitfields -march=i686" OBJA=match.o
注意点として、match.Sはライセンスがzlib LicenseではなくGPLだ。
試してはないけど、64bit環境用にビルドする場合はcontrib/amd64/amd64-match.Sが使えるようだ。こちらはBSDライセンスとなっている。
ビルドしたzlibは汎用に使う訳ではないので、今回はmake installは行わずに手動で必要なファイルをコピーする。対象となるファイルは以下の通り:
- libz.a
- libz.dll.a
- zconf.h
- zlib.h
- zlib1.dll
静的リンクする場合はlibz.a、DLLを使う場合はlibz.dll.aを使うことになる。同じディレクトリに置いておくとリンク時にlibz.dll.aが優先されるようなので、静的リンクしたい場合はlibz.dll.aを改名するか別のディレクトリに置くことになる。