GR-SAKURAでmrubyを動かす (2)
GR-SAKURAのローカルビルド環境で、mrubyをビルドしたいと思います。目的はGR-SAKURA用の libmruby.a を作成することです。
mruby最新版をダウンロードします
mrubyの最新版をgithubからダウンロードしてきます。右側にある「Download ZIP」からダウンロードできます。
ダウンロードしたらcygwinのホームのどこかに解凍します。私は~/gr-sakura/mruby/mruby-master/以下に解凍しました。
minao@tarosa8 ~/gr-sakura/mruby/mruby-master $ ls -l 合計 72 -rwxr-xr-x 1 minao None 452 10月 4 15:27 AUTHORS drwxr-xr-x+ 1 minao None 0 10月 6 16:06 benchmark drwxr-xr-x+ 1 minao None 0 10月 6 16:06 bin -rwxr-xr-x 1 minao None 2538 10月 4 15:27 build_config.rb -rwxr-xr-x 1 minao None 409 10月 4 15:27 ChangeLog -rwxr-xr-x 1 minao None 2219 10月 4 15:27 CONTRIBUTING.md drwxr-xr-x+ 1 minao None 0 10月 6 16:06 doc drwxr-xr-x+ 1 minao None 0 10月 6 16:06 examples drwxr-xr-x+ 1 minao None 0 10月 6 16:06 include -rwxr-xr-x 1 minao None 717 10月 4 15:27 INSTALL -rwxr-xr-x 1 minao None 176 10月 4 15:27 LEGAL -rwxr-xr-x 1 minao None 279 10月 4 15:27 Makefile -rwxr-xr-x 1 minao None 13088 10月 4 15:27 minirake -rwxr-xr-x 1 minao None 1073 10月 4 15:27 MITL drwxr-xr-x+ 1 minao None 0 10月 6 16:06 mrbgems drwxr-xr-x+ 1 minao None 0 10月 6 16:06 mrblib -rwxr-xr-x 1 minao None 343 10月 4 15:27 NEWS -rwxr-xr-x 1 minao None 3728 10月 4 15:27 Rakefile -rwxr-xr-x 1 minao None 4575 10月 4 15:27 README.md drwxr-xr-x+ 1 minao None 0 10月 6 16:06 src drwxr-xr-x+ 1 minao None 0 10月 6 16:06 tasks drwxr-xr-x+ 1 minao None 0 10月 6 16:06 test -rwxr-xr-x 1 minao None 326 10月 4 15:27 TODO drwxr-xr-x+ 1 minao None 0 10月 6 16:06 tools -rwxr-xr-x 1 minao None 135 10月 4 15:27 travis_config.rb
省メモリを考えた設定をする
GR-SAKURAはRAMが128KBと少ないので、少ないRAMでも動くようにinclude/mrbconfig.hを修正します。
Floatを使うようにします。
/* add -DMRB_USE_FLOAT to use float instead of double for floating point numbers */ #define MRB_USE_FLOAT
引数は6個までにします
/* argv max size in mrb_funcall */ #define MRB_FUNCALL_ARGC_MAX 6
ヒープページを32にします。
/* number of object per heap page */ #define MRB_HEAP_PAGE_SIZE 32
インスタンスの管理をハッシュ形式からセグメントリスト管理にします。
/* use segmented list for IV table */ #define MRB_USE_IV_SEGLIST
kハッシュテーブルのデフォルトサイズを2にします。
/* default size of khash table bucket */ #define KHASH_DEFAULT_SIZE 2
メモリプールのページサイズを256にします。
/* page size of memory pool */ #define POOL_PAGE_SIZE 256
以上の内容を書き換えます。
クロスコンパイル用コードの追加
build_config.rbに、GR-SAKURA用のクロスコンパイルコードを追記します。この追加コードでは、mrbgemのmruby-mathをインポートしています。また、toolchainにgrsakuraを作成する必要が有ります。
# Cross build for GR-SAKURA MRuby::CrossBuild.new('grsakura') do |conf| toolchain :grsakura # conf.cc.flags << "-m32" # conf.linker.flags << "-m32" # # conf.build_mrbtest_lib_only # # conf.gem "#{root}/mrbgems/mruby-sprintf" conf.gem "#{root}/mrbgems/mruby-math" # # conf.test_runner.command = 'env' # end
GR-SAKURA用のrakeファイルを作成する
tasks/toolchains/に、grsakura.rakeファイルを作成します。
MRuby::Toolchain.new(:grsakura) do |conf| toolchain :gcc TOOL_PATH = "/usr/local/tkdn-20110720/rx-elf/bin" conf.cc do |cc| cc.command="#{TOOL_PATH}/rx-elf-gcc" cc.flags << "-Wall -g -O2" cc.compile_options = "%{flags} -o %{outfile} -c %{infile}" conf.linker do |linker| linker.command="#{TOOL_PATH}/rx-elf-ld" end conf.archiver do |archiver| archiver.command = "#{TOOL_PATH}/rx-elf-ar" archiver.archive_options = 'rcs %{outfile} %{objs}' end end conf.bins = [] end
この内容は、 jjzakさんの「GR-SAKURAでmrubyを使う」を参考に作成しています。
makeする
これでmakeすればbuild/grsakura/フォルダができ、GR-SAKURA用のlibmruby.aが作成されます。
$ make ruby ./minirake (in /home/minao/gr-sakura/mruby/mruby-master) CC tools/mrbc/mrbc.c -> build/host/tools/mrbc/mrbc.o CC src/array.c -> build/host/src/array.o CC src/backtrace.c -> build/host/src/backtrace.o CC src/class.c -> build/host/src/class.o CC src/codegen.c -> build/host/src/codegen.o CC src/compar.c -> build/host/src/compar.o ... 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 ================================================ ================================================ Config Name: grsakura Output Directory: build/grsakura Included Gems: mruby-math - 0.0.0 ================================================
以上です。