ふと気づくと朝晩はずいぶん冷えこむようになりました。ここ8年ぐらい使っているディスプレイは、
さて今回は、
MesaLibのコンパイル
前回紹介したように、
$ ls /usr/lib64/libLLVM* /usr/lib64/libLLVMAArch64AsmParser.so* /usr/lib64/libLLVMMipsCodeGen.so* /usr/lib64/libLLVMAArch64AsmPrinter.so* /usr/lib64/libLLVMMipsDesc.so* /usr/lib64/libLLVMAArch64CodeGen.so* /usr/lib64/libLLVMMipsDisassembler.so* .... /usr/lib64/libLLVMMSP430Info.so* /usr/lib64/libLLVMipa.so* /usr/lib64/libLLVMMipsAsmParser.so* /usr/lib64/libLLVMipo.so* /usr/lib64/libLLVMMipsAsmPrinter.so*
ライブラリの中にはMipsやAArch64
$ ls /usr/lib64/libLLVMR600* /usr/lib64/libLLVMR600AsmPrinter.so* /usr/lib64/libLLVMR600Desc.so* /usr/lib64/libLLVMR600CodeGen.so* /usr/lib64/libLLVMR600Info.so*
LLVM側の準備が整ったので、
OPT_CONFIG='--enable-texture-float
--enable-gles1 --enable-gles2
--enable-openvg --enable-osmesa --enable-xa --enable-gbm
--enable-gallium-egl --enable-gallium-gbm --enable-gallium-llvm
--enable-glx-tls --with-llvm-shared-libs
--with-egl-platforms=drm,x11
--with-gallium-drivers=nouveau,r300,r600,radeonsi,svga,swrast'
MesaLibではOpenGLが定義しているさまざまな機能を細かく指定できるためconfigureオプションは多岐にわたるものの、
この指定でconfigureは問題なく通ったものの、
CXX gallivm/lp_bld_debug.lo In file included from /usr/include/llvm/Pass.h:32:0, from /usr/include/llvm/Target/TargetMachine.h:18, from gallivm/lp_bld_debug.cpp:31: /usr/include/llvm/Support/Compiler.h:309:39: fatal error: sanitizer/msan_interface.h: No such file or directory compilation terminated. make[3]: *** [gallivm/lp_bld_debug.lo] エラー 1 ...
エラーを起している/usr/
308 #if defined(HAVE_SANITIZER_MSAN_INTERFACE_H)
309 # include <sanitizer/msan_interface.h>
310 #else
311 # define __msan_allocated_memory(p, size)
312 # define __msan_unpoison(p, size)
313 #endif
コード自体は、
「インクルードファイルが見つからない」
そう思ってmsan_
$ find /usr/include -name msan_interface.h $
あれれ、
$ grep msan_interface.h /var/log/packages/* /var/log/packages/clang:usr/lib64/clang/3.3/include/sanitizer/msan_interface.h
この配置から考えるに、
複数のディレクトリ階層に配置されたファイル群から、
以下の例ではfindの引数に-type fを指定して対象を一般ファイルに限り、
$ find /usr/include -type f -a -exec grep HAVE_SANITIZER_MSAN_INTERFACE_H {} \; -print #define HAVE_SANITIZER_MSAN_INTERFACE_H 1 /usr/include/llvm/Config/llvm-config.h #if defined(HAVE_SANITIZER_MSAN_INTERFACE_H) /usr/include/llvm/Support/Compiler.h
この結果を見ると、
127 /* Define to 1 if you have the header file. */
128 #define HAVE_SANITIZER_MSAN_INTERFACE_H 1
129
コメントを見る限り、
MesaLibは、
$ ls /usr/lib64/dri/*so /usr/lib64/dri/i915_dri.so* /usr/lib64/dri/r600_dri.so* /usr/lib64/dri/i965_dri.so* /usr/lib64/dri/radeon_dri.so* /usr/lib64/dri/nouveau_dri.so* /usr/lib64/dri/radeonsi_dri.so* /usr/lib64/dri/nouveau_vieux_dri.so* /usr/lib64/dri/swrast_dri.so* /usr/lib64/dri/r200_dri.so* /usr/lib64/dri/vmwgfx_dri.so* /usr/lib64/dri/r300_dri.so*
今回注目しているr600_
$ ldd /usr/lib64/dri/r600_dri.so linux-vdso.so.1 (0x00007fffbfffe000) libz.so.1 => /usr/lib64/../lib64/libz.so.1 (0x00007f3a65130000) libexpat.so.1 => /usr/lib64/../lib64/libexpat.so.1 (0x00007f3a64f06000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f3a64cb3000) .. libLLVMipo.so => /usr/lib64/../lib64/libLLVMipo.so (0x00007f3a64241000) libLLVMVectorize.so => /usr/lib64/../lib64/libLLVMVectorize.so (0x00007f3a64009000) libLLVMBitReader.so => /usr/lib64/../lib64/libLLVMBitReader.so (0x00007f3a63de4000) libLLVMR600CodeGen.so => /usr/lib64/../lib64/libLLVMR600CodeGen.so (0x00007f3a63b57000) libLLVMR600Desc.so => /usr/lib64/../lib64/libLLVMR600Desc.so (0x00007f3a638f7000) libLLVMR600Info.so => /usr/lib64/../lib64/libLLVMR600Info.so (0x00007f3a636f6000) ...
他はどうなってるかと、
$ for i in /usr/lib64/dri/* ; do chk=`ldd $i | grep LLVM` if [ "$chk.x" != ".x" ]; then echo $i; fi done /usr/lib64/dri/nouveau_dri.so /usr/lib64/dri/r300_dri.so /usr/lib64/dri/r600_dri.so /usr/lib64/dri/radeonsi_dri.so /usr/lib64/dri/swrast_dri.so /usr/lib64/dri/vmwgfx_dri.so
確かにconfigureオプションで指定したドライバはGallium3D/
X Window Systemのコンパイル
LLVM、
Xorgサーバは、
モジュール化されたドライバを動的に組み込む機能は便利なものの、
Linuxカーネルの場合、
X Window Systemの場合、
今回は、
まずはXのプロトコル定義ファイルや設定ファイルです。X Window Systemが利用している基本プロトコルは1987年に公開されたバージョン11のままですが、
- dri2proto-2.
8, glproto-1. 4.16, inputproto-2. 3, randrproto-1. 4.0,videoproto-2. 3.2, xproto-7. 0.24, xcursor-themes-1. 0.4, xkeyboard-config-2. 9
追加、
- libFS-1.
0.5, libX11-1. 6.1, libXau-1. 0.8, libXext-1. 3.2, libXi-1. 7.1,libXinerama-1. 1.3, libXp-1. 0.2, libXrandr-1. 4.1, libXres-1. 0.7,libXt-1. 1.4, libXtst-1. 2.2, libXv-1. 0.9, libXvMc-1. 0.8,libXxf86dga-1. 1.4, libXxf86vm-1. 1.3, libdmx-1. 1.3, libpciaccess-0. 13. 2
最近のX Window SystemではC言語とのバインディングにXCB
- xcb-proto-1.
8, libxcb-1. 9.1
これらを順番にビルド、
- xorg-server-1.
14. 2
Xorgサーバが利用するドライバ類もずいぶん更新が進んでいます。以下のうちglamor-eglやlibvaはドライバではありませんが、
- glamor-egl-0.
5.0, libva-1. 2.1, libva-intel-driver-1. 2.0, xf86-input-evdev-2. 8.1, xf86-input-synaptics-1. 7.1, xf86-input-vmmouse-13. 0.0, xf86-input-wacom-0. 22. 1, xf86-video-ati-7. 2.0, xf86-video-cirrus-1. 5.2, xf86-video-fbdev-0. 4.3, xf86-video-intel-2. 21. 15, xf86-video-mach64-6. 9.4, xf86-video-mga-1. 6.2, xf86-video-nouveau-1. 0.9, xf86-video-openchrome-0. 3.3, xf86-video-savage-2. 3.6, xf86-video-sis-0. 10. 7, xf86-video-tdfx-1. 4.5, xf86-video-vesa-2. 3.2, xf86-video-vmaware-1. 3.0. 1
更新されているドライバのリストを眺めると、
クライアント側のアプリケーションもバージョンが上がっているものがありました。
- bdftopcf-1.
0.4, iceauth-1. 0.6, mkfontscale-1. 1.1, sessreg-1. 0.8, xbacklight-1. 2.0, xclock-1. 0.6, xdpyinfo-1. 3.1, xev-1. 2.1, xhost-1. 0.6, xkbutils-1. 0.4, xmessage-1. 0.4, xprop-1. 2.2, xrandr-1. 4.1, xrefresh-1. 0.5, xset-1. 2.3, xsetroot-1. 1.1, xterm-296, xvinfo-1. 1.2, xwd-1. 0.6, xwininfo-1. 1.3
これら昔から存在していたXクライアントは、
以上紹介してきたソフトウェアを順にビルド、
とりあえずxdpyinfoで動作しているXサーバの情報を確認してみたところ、
$ xdpyinfo name of display: :0 version number: 11.0 vendor string: The X.Org Foundation vendor release number: 11402000 X.Org version: 1.14.2 .. number of extensions: 27 BIG-REQUESTS Composite DAMAGE DOUBLE-BUFFER DPMS DRI2 GLX ....
さて、