https://github.com/kripken/emscripten/
この手のツールは、hello world程度のsrcしか変換できないと思っていましたが、物理engine:bulletやfont engine:freetypeのデモをみると、その完成度に驚きます。
最近、jsでバイナリを扱うアプリが増えた裏にemscriptenがあるのかも...
で、実際にinstallし、試してみました。
参考site
Emscripten入門
http://teikyo.tumblr.com/2011-emscripten-1
http://teikyo.tumblr.com/2011/emscripten-tips
日本語で大変、分かりやすくまとめてられています。
2011年12月(約6ヶ月前)のentryで、emmaken.py 後継の emcc が公開されている為、install方法等は、本家siteをご覧になった方が良いと思います。
本家emscripten wiki
https://github.com/kripken/emscripten/wiki
全てが網羅されている訳ではありませんが、導入段階では次の3ページが参考になります
Tutorial | 導入方法 |
Interacting with Compiled Code | tutorialと合わせて読みたい動作の基本 |
Filesystem Guide | 何と、仮想ファイルシステムを持ってます |
emscriptenのファイルIO
http://hujimi.seesaa.net/article/264965970.html
ファイルへの入出力がcode付きで丁寧に記載されています。
いやー、--pre-jsやModule等、ここには助けられました。
Alon Zakai @ Mozilla
http://mozakai.blogspot.jp/search/label/emscripten
emscriptenの開発者のblog. emscriptenによるconrigure->make等分かりやすく記載されています。
emscripten installの前準備
2012年7月時点では、次の依存packageがあります
※私の場合、コマンドラインでjsを動作させたかった為、javascript engineのv8もinstallしています
LLVM with Clang
LLVMとClangは別々に提供されいますが、まとめてbuildするので、ご注意
$ wget http://llvm.org/releases/3.1/llvm-3.1.src.tar.gz $ wget http://llvm.org/releases/3.1/clang-3.1.src.tar.gz $ tar -zxvf llvm-3.1.src.tar.gz $ tar -zxvf clang-3.1.src.tar.gz $ mv clang-3.1.src llvm-3.1.src/tools/clang $ cd llvm-3.1.src $ ./configure $ make $ su # make install
Node.jsとPython 2.6に難しい部分はないはずなので割愛
emscripten install
emscriptenはpythonで書かれており、installといっても、次のurlからダウンロードし、解凍するだけです。
https://github.com/kripken/emscripten/
解凍後に簡単な動作確認を行うのであれば、先程も記載した次のurlをご覧下さい。
http://teikyo.tumblr.com/2011-emscripten-1
libtiff をemscriptenでjs化...tiff2pdfの動作には失敗しましたが
試しにlibtiffを次の手順でmake(というかjs化)してみました.
$ http://download.osgeo.org/libtiff/tiff-4.0.2.tar.gz $ tar -zxvf tiff-4.0.2.tar.gz $ cd tiff-4.0.2 $ /home/endo/local/emscripten/emconfigure ./configure $ /home/endo/local/emscripten/emmake make $ /home/endo/local/emscripten/emcc tools/tiff2pdf.o \ libtiff/.libs/libtiff.a --minify 1 -o tiff2pdf_core.js
作成された tiff2pdf_core.js をv8 (d8)で動作させると...
$ /home/endo/local/v8/out/ia32.release/d8 tiff2pdf_core.js test.tif tiff2pdf: No input file specified. LIBTIFF, Version 4.0.2 Copyright (c) 1988-1996 Sam Leffler Copyright (c) 1991-1996 Silicon Graphics, Inc. usage: tiff2pdf [options] input.tiff options: -o: output to file name -z: compress with Zip/Deflate -q: compression quality -n: no compressed data passthrough -d: do not compress (decompress) -i: invert colors -u: set distance unit, 'i' for inch, 'm' for centimeter -x: set x resolution default in dots per unit -y: set y resolution default in dots per unit -w: width in units -l: length in units -r: 'd' for resolution default, 'o' for resolution override -p: paper size, eg "letter", "legal", "A4" -F: make the tiff fill the PDF page -f: set PDF "Fit Window" user preference -e: date, overrides image or current date/time default, YYYYMMDDHHMMSS -c: sets document creator, overrides image software default -a: sets document author, overrides image artist default -t: sets document title, overrides image document name default -s: sets document subject, overrides image image description default -k: sets document keywords -b: set PDF "Interpolate" user preference -h: usage test.tif:1: SyntaxError: Unexpected token ILLEGAL II* ^ SyntaxError: Unexpected token ILLEGAL
上手く、コマンドライン引数をmain()か受け取りません。
※--pre-jsでModule['arguments']にで引数を設定しても同様でし、ブラウザで動作させても同様でした。
make手順が悪かったのかな?
それとも他に emscripten のdocumentがあるのかな?
今回は上手くいきませんでしたが、時間を見つけてtiff2pdf.cも合わせて読んでみます。