Skip to content

Instantly share code, notes, and snippets.

@genya0407
Last active July 16, 2022 09:54
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save genya0407/82663a4068b6807a06e40628afffe454 to your computer and use it in GitHub Desktop.
Save genya0407/82663a4068b6807a06e40628afffe454 to your computer and use it in GitHub Desktop.

macOS で mruby をやるための手順。

setup

dependencies

mruby が依存するツールを入れる。 See: https://github.com/mruby/mruby/blob/master/doc/guides/compile.md#prerequisites

xcode 入れて Ruby を入れたらだいたい動くと思う。

mrbgem-template

mrbgem-template を入れる。 See: https://udzura.hatenablog.jp/entry/2019/10/02/190313

$ brew tap mrbgems/mrbgem-template
$ brew install mrbgem-template

アプリケーションを作る

$ mrbgem-template --license MIT --github-user genya0407 --mruby-version 3.0.0 --bin-name my_bin_name myapp
$ cd myapp

# gem の追加
$ vim .travis_build_config.rb
$ cat .travis_build_config.rb
MRuby::Build.new do |conf|
  toolchain :gcc
  conf.gembox 'default'
  conf.gem File.expand_path(File.dirname(__FILE__))
  conf.enable_test

  # こういう感じで gem を指定する
  conf.gem github: 'jbreeden/mruby-sqlite'
  conf.gem mgem: 'mruby-iijson'

  if ENV['DEBUG'] == 'true'
    conf.enable_debug
    conf.cc.defines = %w(MRB_ENABLE_DEBUG_HOOK)
    conf.gem core: 'mruby-bin-debugger'
  end
end

# 開発
$ vim mrblib/mrb_myapp.rb # Ruby でコード書くときはここに書く
$ vim mrblib/new_file.rb # mrblib 以下の適当なファイルに Ruby のコードを書いてもロードされるぽい
$ vim src/mrb_myapp.c # C でコード書きたいときはここに書く

# ビルド
$ rake # コンパイルが走る
$ ./mruby/build/host/bin/my_bin_name # バイナリが動く

C言語との組み合わせ

mruby のC言語API

mrb_float_value() みたいなやつを使いたくなることはよくある。

そういうときは、ここを見ればだいたい書いてある: https://mruby.org/docs/api/headers.html

Cのライブラリ を dynamic link する

1. macOS にライブラリを入れる

brew install libhogehoge など

2. cc と linker のフラグを書き加える

.travis_travis_build_config.rb に以下のような感じで書き加える。

ここはプラットフォーム依存になるので、いろんなOSで動かしたければいい感じに build_config.rb を差し替えたり、 uname の値を元に分岐したりする必要がある。

MRuby::Build.new do |conf|
  ...
  # include <hogehoge.h> が通るようにする
  conf.cc.include_paths << '/opt/homebrew/include/hogehoge'
  # リンクできるようにする
  conf.linker.library_paths << '/opt/homebrew/lib'
  conf.linker.libraries << 'hogehoge'
  ...
end

3. ビルド

普通にビルドすれば良い

$ rake

依存する C のライブラリをパッケージマネージャーに依存せずに入れる

たぶん https://github.com/luisbebop/mruby-polarssl を参考にしたらできそう。

  • 抱き込む対象のライブラリを submodule で git 管理下に置く
  • build_config.rb をいい感じにする

でたぶんいける。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment