ARMマイコンに軽量Rubyを(その1)

CQ出版の雑誌インターフェース2012年6月号にARMマイコンの付録がついていたので、これにmrubyをポーティングできないかトライすることにしました。
付属FM3マイコン基板特設ページ|Interface

まずはコンパイラ等の開発環境を揃える必要があります。インターフェース6月号ではgccではなく*1、市販品のKEIL MDK-ARMとIARの評価版が紹介されています。私のPC環境(Windows XP)では、IARの30日限定版しか上手くインストールできなかったので、これを使うことにしました。

コンパイル環境を整え、エイッやぁ〜とmrubyのvm.cをコンパイルしてみました...みごとにコンパイル・エラーします。エラーの原因は、

  1. gcc固有の機能を使ったDIRECT THREADEDのコード
  2. C言語の標準入出力の関数やファイルポインタ

です。前者はvm.c内にあるDIRECT_THREADEDシンボルの#defineをコメントアウトすればOKです*2

304  //#define DIRECT_THREADED  <-- ここをコメント・アウト
305  #ifndef DIRECT_THREADED
306
307  #define INIT_DISPACTH for (;;) { i = *pc; switch (GET_OPCODE(i)) {
308  #define CASE(op) case op:
309  #define NEXT mrb->arena_idx = ai; pc++; break
310  #define JUMP break
311  #define END_DISPACTH }}

後者は、正しくはターゲット・ボードに合わせたI/Oインプリメントすべきですが、該当のコードはエラーメッセージの出力なので、今日のところはコメント・アウトすることにします。

さて、コンパイル結果のオブジェクト・ファイルのサイズですが、最適化を掛けなけれ仮想マシン・コアvm.oで約28KBでした。仮想マシン・コアだけでは文字列や正規表現の処理、クラス機能等は全く無く使いものにならないので、オブジェクトのサイズを睨みながら必要な機能を追加していくことになります。

はてさて、予想通りメモリ容量とのシビアな戦いになりそうです。
果たしてゴールに辿り着けるのでしょうか。
(つづく)

*1:インターフェース7月号ではeclipse+gccの環境が紹介されるようです。

*2:コンパイルスイッチは設定専用のヘッダ・ファイルに分けるか、ビルドスクリプト/プロジェクト・ファイルの設定に入れるのが常套手段ですが...