Raspberry Piにmrubyでもと思ったんだけど、distccでビルドするには?ってことで"mruby distcc"でぐぐってみて最初の30件にそれらしいのがなかったので自分でやってみた。
(´-`).。oO(クロスコンパイルではなくdistccを選んだのは気分の問題
Raspberry Pi・PCともにディストリビューションはArch Linux。
Archでのdistcc設定はwikiのdistccのページを参考に。
クロスコンパイル&distccの設定はarchlinuxarm.orgにあるdistributed-compilingとdistcc-cross-compilingが参考ページ。
最初にbuild_config.rbを開きtoolchainをdistccにしてみる。
[masami@mars mruby]$ cat MRuby::Build.new do |conf| # load specific toolchain settings # Gets set by the VS command prompts. if ENV['VisualStudioVersion'] toolchain :visualcpp else toolchain :distcc end
そうするとこんなエラーになる。
[masami@mars mruby]$ make ruby ./minirake (in /home/masami/mruby) rake aborted! Unknown distcc toolchain Rakefile:14:in `load' Makefile:9: recipe for target 'all' failed make: *** [all] Error 1
これはtasks/toolchainsにdistccに対するrakeファイルがないからなのでこれを作ってあげる必要がある。
MRuby::Toolchain.new(:distcc) do |conf| [conf.cc, conf.objc, conf.asm].each do |cc| cc.command = ENV['CC'] || 'distcc' end [conf.cxx].each do |cxx| cxx.command = ENV['CXX'] || 'distcc' end conf.linker do |linker| linker.command = ENV['LD'] || 'gcc' linker.flags = [ENV['LDFLAGS'] || %w()] linker.libraries = %w(m) linker.library_paths = [] linker.option_library = '-l%s' linker.option_library_path = '-L%s' linker.link_options = '%{flags} -o %{outfile} %{objs} %{flags_before_libraries} %{libs} %{flags_after_libraries}' end end
基本的にはgcc.rakeをコピーしてcとc++のコマンドを変えただけ。distccを使っても最後のリンクはローカルで実行するのでlinkerの部分は特に変更しない。
あとは普通にmakeとすればOK。
distccサーバを一台設定して実行した時の時間がこれくらい。
real 0m43.648s user 0m28.380s sys 0m6.480s
Raspberry Pi(デイストロはArch Linux)で普通にmakeした場合のビルド時間がこれくらい
real 9m8.126s user 8m51.050s sys 0m12.690s
できたバイナリの確認を
[masami@mars mruby]$ cd bin [masami@mars bin]$ ls | xargs file mirb: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.27, BuildID[sha1]=bdf1276716b3839d763acd42fc5a734f35df6899, not stripped mrbc: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.27, BuildID[sha1]=ff0ab47ff70e3b5e4d70574e6e511e466d37f47b, not stripped mruby: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.27, BuildID[sha1]=02979746005621510fce68a8b40e893ea2bacb13, not stripped
ちゃんとARM向けのバイナリになってるね。
make testを実行してみる
[masami@mars mruby]$ make test ruby ./minirake (in /home/masami/mruby) Build summary: 〜略〜 Total: 635 OK: 635 KO: 0 Crash: 0 Time: 1.01146 seconds
( ´∀`)bグッ!
- 作者: Rubyサポーターズ,すがわらまさのり,寺田玄太郎,三村益隆,近藤宇智朗,橋立友宏,関口亮一
- 出版社/メーカー: 技術評論社
- 発売日: 2013/08/10
- メディア: 大型本
- この商品を含むブログ (10件) を見る