Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

mrubyをビルドする(2013年10月23日版)

組込みRubyことmrubyをgithub公式から引っ張ってくる方法です。
相変わらず活発に更新が行われています。
以下の手法で通らないようでしたら、公式ページに飛んだ方が早いかもしれません。

インストール

例の如く、git cloneでおとしてきます。

$ git clone https://github.com/mruby/mruby.git

もしbison*1が入っていない場合はビルド前に導入します。

//debian系
$ sudo apt-get install bison

//Mac OS X
$ brew install bison

導入先に移動して……make。簡単ですね。

$ cd #{mruby-root}
$ make

一通り終わると、次のような出力を得ます。

Build summary:

================================================
      Config Name: host
 Output Directory: build/host
         Binaries: mrbc
    Included Gems:
             mruby-sprintf - 0.0.0
             mruby-print - 0.0.0
             mruby-math - 0.0.0
             mruby-time - 0.0.0
             mruby-struct - 0.0.0
             mruby-enum-ext - 0.0.0
             mruby-string-ext - 0.0.0
             mruby-numeric-ext - 0.0.0
             mruby-array-ext - 0.0.0
             mruby-hash-ext - 0.0.0
             mruby-range-ext - 0.0.0
             mruby-proc-ext - 0.0.0
             mruby-symbol-ext - 0.0.0
             mruby-random - 0.0.0
             mruby-object-ext - 0.0.0
             mruby-objectspace - 0.0.0
             mruby-fiber - 0.0.0
             mruby-toplevel-ext - 0.0.0
             mruby-bin-mirb - 0.0.0
               - Binaries: mirb
             mruby-bin-mruby - 0.0.0
               - Binaries: mruby
================================================

指示通りみていくと

$ ls -1 build/host
LEGAL
bin
lib
mrbgems
mrblib
src
tools

てなフォルダが生成されています。

Hello world on C-Lang

折角なので、C言語上でHello worldいってみましょう。
次のコードをコピーして……

#include <stdlib.h>
#include <stdio.h>

/* Include the mruby header */
#include <mruby.h>
#include <mruby/compile.h>

int main(void)
{
  mrb_state *mrb = mrb_open();
  char code[] = "p 'hello world!'";
  printf("Executing Ruby code from C!\n");

  mrb_load_string(mrb, code);
  return 0;
}

ヒアドキュメントとcatの合わせ技でちゃちゃっとhello.cを作ります。

$ cd #{mruby-root}

$ cat > hello.c <<EOS
> ##上のコードをコピペ##
> EOS

終わったらコンパイルで動作確認です。

$ gcc -Iinclude hello.c build/host/lib/libmruby.a -lm -o hello.out

$ ./hello.out
Executing Ruby code from C!
"hello world!"

次回の記事ではmrubyをC言語プロジェクトに適用する方法を扱います。

*1:GNU構文解析ツール