読者です 読者をやめる 読者になる 読者になる

non vorrei lavorare

ブログ名の通りです。javascript three.js mruby rust OCaml golang julialang blender

slコマンドをWebAssembly化して動かした

おはようございます。週末、次男が咳と熱を出したと思ったら、奥さんも珍しく熱が出て寝ています。kjunichiです。

slコマンドをEmscriptenでJS化する

以前にslコマンドをEmscriptenを使って、JS化しているのでこれを使ってやってみた。

abrakatabura.hatenablog.com

を参照。

2016年で変わった事

2014時点からいくつか変更した点がある。

PDCurses.jsがコンパイルエラー

  • sdl1/pdcclip.c #include <string.h>の追加
  • sdl1/pdckbd.c #include <stdlib.h>の追加

の2ファイルを修正する必要があった。

emccのオプションの変更

emcc -s ASYNCIFY=1 -O2 -Wall -fPIC -I. -DEMSCRIPTEN -o sl.html sl.c libpdcurses.a `sdl-config --libs` --preload-file ./pdcfont.bmp --use-preload-plugins -s BINARYEN=1

以前は--preload-file ファイル名の指定のみで済んだが、どうやら、「--use-preload-plugins」が必要になった。

WebAssembly化

上記のEmscriptenのオプションに加え、WebAssemblyに必要な「-s BINARYEN=1」オプションを指定。

あとはCanary Chromeで「chrome://flags/」でWebAssemblyを有効にして、

qiita.com

の手順で動かせた。

f:id:kjw_junichi:20160328070823j:plain

ちなみに、WebAssemblyが無効でも「no native wasm support detected」とコンソールに表示され、動く。

デモ