Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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構文解析ツール