研究ベースのライブラリー等は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をインストールするだけでよし。

# Macの場合

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を選択。

# Macの場合nodejsがらくちん

brew install node

- path設定

一度cloneしたemscriptenのディレクトリ内にあるemccを実行すると.emscripten設定ファイルが生成される。.emscriptenにパスなどの設定あり。

Macの場合。直接llvmのパスを入力しておく

$ vi ~/.emscripten

...

LLVM_ROOT = os.path.expanduser(os.getenv('LLVM') or '/usr/local/Cellar/llvm/3.3/bin') # directory

...

# cloneしたemscriptenのパス

$ vi ~/.bashrc

...

PATH=$HOME/emscripten:$PATH

基本的な使い方

C/C++のソースコードを用意。

emscripten/tests以下にサンプルコードがあるので環境構築テストに利用する。

いくつか設定オプションをいじる必要があるのが注意です。

#エラー回避のためにfast-compilerオプションを設定

EMCC_FAST_COMPILER=0 emcc ./hello_world.c -o hellotest.js

node hellotest.js

  • o オプションで出力するファイル名を指定すると、そのファイル名によってjs/htmlなど、出力するように作られているようです。