Shumway の AVM2 だけを Spidermonkey 上で動かす方法

基本的には Shumway wiki に乗っているビルド法と関連ツールの導入方法を熟読すれば良いのですが、ちょっと落とし穴があるのでその補足を含めたビルド方法を紹介します。

0. 想定環境
OSX 10.7 (Lion)
Homebrew を導入済み。 (brew コマンドを用いているものは適宜 port なり apt-get に読み替えてもできるかもしれません。)

1. 必要なツールの確認
今回、Shumway をビルドし実行するために以下のものを導入しました。

  1. wget (version 1.14)
  2. git (version 1.8.2.1)
  3. Mercurial (version 2.5.2)
  4. java (jdk 7u17)
  5. autoconf 2.13
  6. SpiderMonkey Shell 1.8.5+
  7. ActionScript Compiler (asc.jar)
  8. Tamarin Shell

※ wiki にはさらに node.js の導入も書かれていますが、リグレッションテストにしか用いていないようです。

2. 比較的楽に入れられるものを導入

さらに、jdk7.java.net から JDK 7u11 のインストーラーをダウンロードし、インストーラーの指示に従ってインストールを済ませます。

3. SpiderMonkey Shell のビルドとインストール
NOTE : 2013-04-16 時点、brew でインストールできるものは古いバージョンです。
まず、SpiderMonkey のビルドには autoconf (version 2.13) が必要なので導入します。
(少なくとも、2.69 では動作しないことが確認されています。)

program-suffixを指定して、既存のものに上書きしないようにしている点がミソです。
導入のチェックをしてみると、

と出るでしょう。
では、SpiderMonkey Shell をビルドしてインストールしてみましょう。

これで一応 SpiderMonkey をビルドする準備ができますが、Mozilla エンジンのソースコードも落としてくる為に hg コマンドでそうとう待たされます。
その間に、状況によっては 2, 3 時間ほど別の作業ができたりしますが、待てない人は SpiderMonkey に必要なものだけを tarball に固めたものも Mozilla から配布されているので、それを使っても良いでしょう。
以下に mozilla-central リポジトリの代わりに tarball を用いてソースコードを手に入れる場合の作業を示します。
(ただし、tarball を用いた場合はこれ以降の js コマンドをすべて js17 に読み替えてください。)

では、実際にビルドしてみましょう。

ビルドができたら、バージョンをもう一度確認しましょう。

先ほど、mozilla-central ではなく tarballでビルドした人は、

となります。
NOTE : JavaScript-C 1.8.5 2011-03-31 は古いバージョンであり、これでは実行できません。
それでは、インストールしましょう。

4. Shumway のソースコードのダウンロード
まだ、導入していないツールがありますが、そのツールの導入の為に先に Shumway のソースコードをリポジトリから落としておきます。

5. ActionScript Compiler のダウンロード
Tamarin Shell のビルドや ActionScript をバイトコードにコンパイルするときに使う asc.jar を落とします。

また、後ほどのために環境変数も設定します。

今回は一時的に設定していますが、後ほど出てくる shu.py にて設定しておく必要があるので、毎回設定することが面倒な場合は .bash_profile に書き込んでしまいましょう。

4. Tamarin Shell のビルド
最後のビルド作業です。まずは、コードを落としてきましょう。

では、実際にビルドしていきますが、ここで環境によって若干パラメータがかわるので注意してください。

osx では –mac-sdk と –target の指定が必要です。–mac-sdk にはピリオドを抜いた上位 3 桁の数字を指定してください。(10.8.x なら 108, 10.6.x なら 106 です。)
ここでも、後にでる shu.py のために環境変数を設定しておきます。

5. Shumway で hello world!
やっとお待ちかねの AVM2 実行のお時間がやって参りました。
ひとまず、適当に Shumway に付属されている hello-world.as を abc にコンパイルしてみましょう。

これで、コンパイルされて hello-world.abc が生成されるので…

無事に実行できたら、お疲れさまでした。
ほかにも tests ディレクトリにいろいろあるので、コンパイルしてみたり、
avm.js のオプションとして、abc の構造を出力する -d オプションなどもあるので、気になる方はどうぞ。
また、実際に js を弄って動きを確認するのも良いでしょう。

それでは、よい Shumway ライフを。

参考
Getting Started with AVM2 · mozila/shumway Wiki · GitHub
SpiderMonkey Build Documentation – SpiderMonkey | MDN