LoginSignup
10
10

More than 5 years have passed since last update.

mruby用マイコンビルド環境構築

Last updated at Posted at 2014-05-31

始めに

弊社にてmruby向けのビルド環境について質問が出たらしいのでメモ。WindowsかつARM向けの話で、基本的に他の人のマネです。

Windowsビルド環境

mrubyはホスト側で動作するmrbcがクロスコンパイルする場合でも必要。そのためWindowsでもホスト側のビルド環境をインストールしておきます。VisualStudioExpressでもcygwinでも結構です。私は社内ツール作成でC#を多用するのでVSを入れてます。

ARMクロスコンパイル環境

ARM向けのクロスコンパイル環境構築はねむいさんのぶろぐの通りにすれば問題ありません。クロスコンパイラ(LAUNCHPAD gcc)、デバッガ(openocd)、GDBインタフェース(insight)をインストールしてLチカ程度の確認までしておきます。

ruby/bisonのインストール

mrubyを作るにはこれだけではまだ足りず、ruby/bisonのインストールが必要です。

mrubyライブラリ構築

これで漸くARM向けのmrubyライブラリが構築できます。STM32F4 Discovery向けとしてbuild_config.rbに以下の内容を追記します。

MRuby::CrossBuild.new('STM32F4') do |conf|
   toolchain :gcc
   conf.cc do |cc|
     cc.command='C:/Devz/ARM/LAUNCHPAD/bin/arm-none-eabi-gcc'
     cc.flags = []
     cc.flags << '-mcpu=cortex-m4 -march=armv7e-m -mtune=cortex-m4'
     cc.flags << '-mthumb -mlittle-endian -mno-unaligned-access'
     cc.flags << '-mapcs-frame -mno-sched-prolog -mfpu=fpv4-sp-d16 -mfloat-abi=soft '
     cc.flags << '-std=gnu99 '
     cc.flags << '-fno-strict-aliasing -fsigned-char'
     cc.flags << '-ffunction-sections -fdata-sections '
     cc.flags << '-fno-schedule-insns2 '
     cc.flags << '--param max-inline-insns-single=1000 '
     cc.flags << '-nostartfiles -fno-common '
     cc.flags << '-fno-hosted'
     cc.flags << '-gdwarf-2 -O0 -flto-partition=none -fipa-sra'

  cc.flags << %w(-DMRB_USE_FLOAT)
  cc.defines << %w(MRB_HEAP_PAGE_SIZE=8)
  cc.defines << %(MRB_IREP_ARRAY_INIT_SIZE=128u)
  cc.defines << %w(MRB_USE_IV_SEGLIST)
  cc.defines << %w(KHASH_DEFAULT_SIZE=8)
  cc.defines << %w(MRB_STR_BUF_MIN_SIZE=20)
  #cc.defines << %w(DISABLE_STDIO) #if you dont need
  cc.defines << %w(MRB_GC_STRESS)   #no document
  cc.defines << %w(POOL_PAGE_SIZE=256) #effective only for use with mruby-eval

   end
   conf.archiver do |ar|
     ar.command = 'C:/Devz/ARM/LAUNCHPAD/bin/arm-none-eabi-ar'
   end
   conf.bins = []
   conf.build_mrbtest_lib_only
   conf.gem :core => "mruby-toplevel-ext"
   conf.gem :core => "mruby-fiber"
   conf.gem '../mruby-direct'
end

クロスコンパイラの設定は構築したビルド環境に準じます。チューニングパラメータは
¥1,650で買えるARM基板STM32F4DISCOVERYでmrubyを動かすをコピペしてます。ここは他力本願。後はVSなりCygwinなりのWindowsビルド環境のコンソールでmakeすれば完成です。

ターゲットプログラムのビルド

ライブラリが完成したら、それを組み込みます。Makefileに追記します。

# mruby flags
MRUBY_PATH = c:/Devz/prj/mruby/mruby/
MRUBY_CFLAGS = -I$(MRUBY_PATH)include
MRUBY_LFLAGS = $(MRUBY_PATH)build/STM32F4/lib/libmruby.a

後はMRUBY_CFLAGS/MRUBY_LFLAGSをコンパイラ/リンカのオプションに追加するだけです。mrubyの組込み方法は説明を省きます。

その他バッドノウハウ等

これで一通り問題ないはずですが、gcc4.8だとリンカでmemmoveがないと蹴られます。gccのバージョンを一つ落して4.7でビルドすると解決します。4.8の解決策は追求してません。

mrubyはヒープを多く消費します。ですのでリンカスクリプト等で十分なメモリを確保する必要があります。ARMマイコンでしたらねむいさんのぶろぐでメモリ確保のノウハウが入手できます。ここも他力本願。

終りに

Windows向けの内容でしたが、使用するツールはMacでもLinux/BSDでも同じですので、他のOSでも同じく構築はできます。ただし、openocdがgccでないとコンパイルできない等、OS毎にバッドノウハウがありますので注意が必要です。

御精讀、ありがたうございました。

10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10