研究ベースのライブラリー等はC/C++で実装されることが多い。それらをwebに持ち込むという一つの手段としてemscriptenというC/C++->javascript変換(コンパイラー)を利用しているケースは多いようだ。
ということでemscriptenのインストールと使い方を調べて試してみた。
emscripten
https://github.com/kripken/emscripten
http://kripken.github.io/emscripten-site/
Emscripten is an LLVM-based project that compiles C/C++ into highly-optimizable JavaScript in asm.js format. This lets you run C/C++ on the web at near-native speed, without plugins.
全てのC/C++コードを変換できるわけではないらしいです。
構造がよくわかっていないのですが、LLVM-baseということで、ちょうどApplicationVMの勉強をしたいと思っていたところなんで、少し詳しくなれればいいなという感じ。
インストール
MacOSX-Marveriks想定でインストール。
(ubuntuの場合はこちらを参考)
- emscriptenはgit cloneするだけ
- LLVMとClangが必要
MACの場合はXCodeでClangがインストールされているので、LLVMをインストールするだけでよし。
brew install llvm --with-clang
with-clangしなくても、/usr/local/bin/clangを/usr/local/Cellar/llvm/3.x/bin/clangにコピーすればよし。
=>emscriptenがllvmバージョン3.3想定ということのようだが、llvm3.4でも動作した。
- nodejs利用
backendのjavascript変換はnodejsやspidersmonkeyなどを利用できるということで、インストールが楽なnodejsを選択。
brew install node
- path設定
一度cloneしたemscriptenのディレクトリ内にあるemccを実行すると.emscripten設定ファイルが生成される。.emscriptenにパスなどの設定あり。
$ vi ~/.emscripten
...
LLVM_ROOT = os.path.expanduser(os.getenv('LLVM') or '/usr/local/Cellar/llvm/3.3/bin') # directory
...
$ vi ~/.bashrc
...
PATH=$HOME/emscripten:$PATH
基本的な使い方
C/C++のソースコードを用意。
emscripten/tests以下にサンプルコードがあるので環境構築テストに利用する。
いくつか設定オプションをいじる必要があるのが注意です。
EMCC_FAST_COMPILER=0 emcc ./hello_world.c -o hellotest.js
node hellotest.js
- o オプションで出力するファイル名を指定すると、そのファイル名によってjs/htmlなど、出力するように作られているようです。