Emscripten: CをJavaScriptへコンパイル


WebAssembly (略: Wasm)


Emscripten

インストール

git clone https://github.com/emscripten-core/emsdk.git
cd emsdk

# インストール (ディレクトリ内)
./emsdk install latest
# 有効に
./emsdk activate latest

# $PATH追加
source ./emsdk_env.sh

emccコマンドでコンパイル

emcc -o hello-c.html hello.c

Node.jsで実行

node hello-c.js
Hello, C言語!

ブラウザで実行

server.js

const http = require('http')
const fs = require('fs')
http.createServer((req, res) => {
  res.statusCode = 200
  let contentType = 'text/html'
  if (req.url.endsWith('.js')) contentType = 'application/json'
  if (req.url.endsWith('.wasm')) contentType = 'application/wasm'
  res.setHeader('Content-Type', contentType)
  if (req.url.endsWith('favicon.ico')) return res.end()
  res.end(fs.readFileSync(__dirname + req.url))
}).listen(3000) // ポート

hello-c.html (自作のとき)

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
  </head>
  <body>
    <script src="hello-c.js"></script>
  </body>
</html>

サーバ実行

node server.js