fab_src/coreのpath_png.cをemccでビルドする.
必要なファイルはfab.c, fab.h, path_png.c
libpngとgiflibが必要なので,まずそれらをビルドする.
1. libpngのビルド
zlibに依存しているのでzlibをビルドする.
wget http://zlib.net/zlib-1.2.8.tar.gz tar -xzvf zlib-1.2.8.tar.gz cd zlib-1.2.8 emconfigure ./configure --prefix=`pwd` emmake make emmake make install
次にlibpngをビルドする.
wget http://downloads.sourceforge.net/project/libpng/libpng16/1.6.15/libpng-1.6.15.tar.gz tar -xzvf libpng-1.6.15.tar.gz cd libpng-1.6.15
さっきビルドしたzlibの場所を知らせる必要があるので
環境変数をexportする.
以下は一例
ZLIBLIB=/Users/shohei/Codes/Emscripten/fab_src/core/temp/zlib-1.2.8/lib export ZLIBLIB ZLIBINC=/Users/shohei/Codes/Emscripten/fab_src/core/temp/zlib-1.2.8/include export ZLIBINC CPPFLAGS="-I$ZLIBINC" export CPPFLAGS LDFLAGS="-L$ZLIBLIB" export LDFLAGS LD_LIBRARY_PATH="$ZLIBLIB:$LD_LIBRARY_PATH" export LD_LIBRARY_PATH
あとここでつまづいたけど,
libpngのconfigureでは
zlibが入ってるかどうかを確かめるCコード(zlibVersion()関数)が実行される.
自分の環境ではこれが走らなかったので. configureを書き換えた.
configureの12615行目あたりの"no"を"yes"に変える
... _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_z_zlibVersion=yes else - ac_cv_lib_z_zlibVersion=no + ac_cv_lib_z_zlibVersion=yes fi
ビルドする.
emconfigure ./configure --prefix=`pwd` emmake make emmake make install
終わったら環境変数はunsetしておく.
unset ZLIBLIB unset ZLIBINC unset CPPFLAGS unset LDFLAGS unset LD_LIBRARY_PATH
2. giflibのビルド
同様に行う.
wget http://downloads.sourceforge.net/project/giflib/giflib-5.1.0.tar.bz2 tar -xzvf /giflib-5.1.0.tar.bz2 cd giflib-5.1.0 emconfigure ./configure --prefix=`pwd` emmake make emmake make install
3. png_pathのビルド
zlibフォルダ/libのlibz.a, libpngフォルダ/lib/libpng.aとgiflibフォルダ/lib/libgif.aを作業フォルダに移す.
以下でビルド.
#静的ライブラリ生成(ここではhomebrewのlibpngフォルダ類を指定していけた) emcc -I/usr/local/include -L/usr/local/lib -c fab.c ar rsv libfabcore.a fab.o #メインファイルのコンパイル emcc -I/usr/local/include -L/usr/local/lib -c png_path.c #リンク emcc -o png_path.js png_path.o libfabcore.a libpng.a libgif.a libz.a --embed-file fabisp.png #embed-fileであらかじめ読み込むファイルは指定しないといけない
実行
$ node png_path.js fabisp.png fab_mod_fabisp.path 1.1 0.25 1 0.5 0.5 node png_path.js fabisp.png "fab_mod_fabisp.path" 1.1 0.25 1 0.5 0.5 read fabisp.png bit depth: 1 x pixels: 986, y pixels: 573 x pixels/m: 19686, y pixels/m: 19686 dx: 50.086356 mm, dy: 29.106980 mm png_path: intensity 0.500000 threshold find edges find distances 985 offset: distance 0.125000, 432582 exterior points remain write fab_mod_fabisp.path degrees of freedom: 2 units: mm mm segments: 32, points: 590 nx: 986, ny: 573 dx: 50.086356, dy: 29.106980 xmin: 0.000000, ymin: 0.000000
フロントエンドでの実行は次回に回す.ファイルの出力用にラッパーを書く必要がある.
こっち→http://d.hatena.ne.jp/seinzumtode/20141202/1417510340