小型液晶の表示を制御するために2DのグラフィックライブラリのcairoをOnion Omega(mipeb)用にFreeBSD/ZRouterで最小限の構成でビルドしてみました。
試したバージョンはcairo 1.14.6です。
configureがpkgconfに依存しているので、これを入れる必要がありました。またconfigureの中でpixman,fontconfig,freetype,pngをpkgconfで参照しているので、これも実際は使わないのですがインストールが必要です。
cairoはpixmanというx11から派生したライブラリを使っていて、最低限これがあればビルドできます。これだけでも線や四角や丸のメモリバッファへの描画ができます。またASCIIのフォントを内蔵しているので、英文字も描画できます。余談ですがこのメモリバッファの事を昔のMacではoffscreenとか言ってました。
pixmanにはアーキテクチャ毎の最適化コードがあり、クロスでビルドする時は注意が必要です。またcairo,pixmanともにエンディアンの設定を持っているので、これも要注意でした。
pngを読み込んだり書き込むためにはpngのライブラリが必要になります。pngのライブラリはlibzを使っているので、これも必要です。
フォントを読み込むためにはfreetypeとfontconfigが必要になります。fontconfigはexpat2も使っているので、これも必要です。
freetypeはpngを使うオプションもありますが、なくても大丈夫みたいです。
すべてFreeBSDのportsにあり、それをZRouterにコピーしてMakefileを必要に適宜修正して、do-installでイメージ作成用のディレクトリにコピーするようにしました。コピーはオリジナルのライブラリバイナリを一桁のバージョン付きファイルとしてコピーしてsoファイルをシンボリックリンクで作成しています。
もちろん依存の順にビルドして、リンク時に参照できるようになければいけません。
描画したデータはcairo_image_surface_get_data()でバッファのポインターを取得して拾いだす事ができます。
これで作ったライブラリで、mrubyバインディングを作ってみました。