続・玩式草子 ―戯れせんとや生まれけん―

第17回 Days of WINE and Struggles[4]

この記事を読むのに必要な時間:およそ 5.5 分

8月YY日:いよいよWINEのビルドにかかる

TrueTypeフォントを扱うFreeTypeライブラリを入れるためにはテキストの表示方向を制御するHarfbuzzが必要となり,Harfbuzzには画面描画回りのGlibCairoが必要で,それらにはさらにGtkが必要になり……と,必要な32ビット版ライブラリは芋ヅル式に増えていくものの,ここまで来て止めるわけにも行かないので,⁠どこまで続く泥濘(ぬかるみ)ぞ……」とボヤきながらもパッケージ作りを続ける。

パッケージ作りの合間にWINE HQのドキュメント類を読んでゆくと,Windowsが2D/3Dグラフィックの処理に使っているDirectXの機能を,WINEではOpenGLを使って実現しているそうで,先に不要だろうと考えたmesa回りも32ビット版ライブラリが必要になるようだ。

mesaをビルドするためにはLLVMという大物が必要になり,GCCでインストール先ディレクトリの設定に結構苦労した記憶もあって,⁠LLVMって32ビット版を簡単に作れるだろうか……」と心配したものの,32ビット版に共通の

export CC='gcc -m32'
export CXX='g++ -m32'
libdir='lib32'

という設定に加えて,cmakeに

-DLLVM_LIBDIR_SUFFIX=32

という指定を追加する程度で32ビット版のライブラリが/usr/lib32/にインストールできた。このあたり,あらかじめMultilibどころか,Multiarchにも対応しているLLVMの面目躍如というところだろうか。

どれだけのパッケージを用意すればいいのかは五里霧中なものの,ある程度進んだところでWINEのconfigureスクリプトを動かすと,不備を指摘される項目は着実に減っているので,それを心頼りに作業を進める。

作業が止まったのが64ビット版を作ったことがないVulkanと呼ばれるソフトウェアだ。⁠これは何者?」と調べてみると,最近のGPUに適した3Dグラフィック用のAPIで,OpenGLの後継者のような位置付けらしい。Vulkanの公式サイトを眺めてみると,ここで公開されているのはAPIの仕様に関するドキュメント程度で,実際に必要なソフトウェアはGitHubで公開されているようだ。このあたりは64ビット版も必要だろうから作っておくことにする。

2週間ほどかけて150ほどの32ビット版パッケージを追加したところ,configureの指摘はこの程度にまで減ってきた。

configure: MinGW compiler not found, cross-compiling PE files won't be supported.
configure: OpenCL 32-bit development files not found, OpenCL won't be supported.
configure: pcap 32-bit development files not found, wpcap won't be supported.
configure: libhal 32-bit development files not found, no legacy dynamic device support.
configure: libsane 32-bit development files not found, scanners won't be supported.
configure: libv4l2 32-bit development files not found.
configure: libgphoto2 32-bit development files not found, digital cameras won't be supported.
configure: libgphoto2_port 32-bit development files not found, digital cameras won't be auto-detected.
configure: OSS sound system found but too old (OSSv4 needed), OSS won't be supported.
configure: libcapi20 32-bit development files not found, ISDN won't be supported.
configure: libcups 32-bit development files not found, CUPS won't be supported.
configure: libkrb5 32-bit development files not found (or too old), Kerberos won't be supported.
configure: libgssapi_krb5 32-bit development files not found (or too old), no Kerberos SSP support.
configure: libldap (OpenLDAP) 32-bit development files not found, LDAP won't be supported.

configure: Finished.  Do 'make' to compile Wine.

これらの指摘を眺めると,ISDNは論外だし,プリンタやスキャナ,デジカメもWINE上で使う予定は無いので,多分これぐらいで機能は十分だろうと考え,いよいよWINEのビルドに挑むことにした。

WINEのビルド方法はWINE HQで解説されていて,今回はそのうちのShared Wow64の方法で,32/64ビットのMultilib版を作る。解説によると,Windowsではアプリは未だに32ビット版が主流なため,64ビット版のOS上で32ビット版アプリを動かすための互換レイヤーが用意されており,Shared Wow64はそれと同じように64ビット版のWINE上に32ビット版のWINEを載せるような形を取るらしい。

指示に従って,まずは64ビット版を"--enable-win64"オプションを指定して設定,ビルドし,次に32ビット版で"--with-wine64=../build_64"のように64ビット版のバイナリがあるディレクトリを指定して設定,ビルドする。

$ mkdir build_64 && cd build_64
$ ../wine-4.21/configure --prefix=/usr --enable-win64
....

$ make
....

make[1]: ディレクトリ '/tmp/build_64/server' に入ります
gcc -m64 -o wineserver async.o atom.o change.o class.o clipboard.o completion.o console.o debugger.o device.o \
  directory.o event.o fd.o file.o handle.o hook.o mach.o mailslot.o main.o mapping.o mutex.o \
  named_pipe.o object.o process.o procfs.o ptrace.o queue.o region.o registry.o request.o \
  semaphore.o serial.o signal.o snapshot.o sock.o symlink.o thread.o timer.o token.o trace.o \
  unicode.o user.o window.o winstation.o -Wl,--rpath,\$ORIGIN/../libs/wine \
  ../libs/port/libwine_port.a -lwine -L../libs/wine -Wl,--as-needed
make[1]: ディレクトリ '/tmp/build_64/server' から出ます
Wine build complete.

$ mkdir ../build_32 && cd ../build_32
$ ../wine-4.21/configure --prefix=/usr --with-wine64=../build_64
....

$ make
....

wscript.exe_test.res xcopy.exe_test.res -lole32 ../../dlls/uuid/libuuid.a -lcomctl32 -lversion \
-luser32 -lgdi32 -ladvapi32 -lwsock32 -Wl,-delayload,ole32.dll -Wl,--as-needed
make[1]: ディレクトリ '/tmp/build_32/programs/xcopy' から出ます
make[1]: ディレクトリ '/tmp/build_32/programs/winetest' から出ます
Wine build complete.

configureは先に示したようにいくつかの機能不足を指摘するものの,GCCがエラー終了することはなく,何とか64/32ビット双方で無事にビルドは終了した。

作成したWINEパッケージをインストールして試してみると,WINEの設定ツールであるwinecfgはちゃんと起動できた。

図1 wine-4.21のwinecfg

図1 wine-4.21のwinecfg

「やれやれ,やっと夏休みの宿題が終った」とホッとしたのも束の間,更に深刻なトラブルが待ち構えていたのであった(続⁠⁠。

著者プロフィール

こじまみつひろ

Plamo Linuxとりまとめ役。もともとは人類学的にハッカー文化を研究しようとしていたものの,いつの間にかミイラ取りがミイラになってOSSの世界にどっぷりと漬かってしまいました。最近は田舎に隠棲して半農半自営な生活をしながらソフトウェアと戯れています。

URLhttp://www.linet.gr.jp/~kojima/Plamo/index.html