Skip to content

feat: smalruby3 コマンドを gem に内蔵(rsdl 不要化) #403

@takaokouji

Description

@takaokouji

Goal

smalruby3 コマンドを gem に内蔵し、smalruby3 script.rb で実行できるようにする。rsdl の別途インストールを不要にする。

背景

macOS では SDL2 が Cocoa のメインスレッドで初期化される必要がある。通常の ruby コマンドから SDL2.init を呼ぶと segfault する。現在は rsdl コマンド(別 gem)を使って回避しているが、ユーザーにとって分かりにくい。

rsdl の仕組み

rsdl は SDL_main.h を include した独自の main() 関数を持つ C 実行ファイル。main() 内で ruby_init()ruby_run_node() を呼ぶことで、Ruby VM がメインスレッド上で動作し、SDL2 の Cocoa 制約を満たす。

実装方針

  1. ext/smalruby3_launcher/ に rsdl 相当の C ソースを配置
  2. extconf.rb で SDL2 をリンクした実行ファイル smalruby3 をビルド
  3. exe/smalruby3 から native ビルドされたバイナリを呼び出す
  4. gem install smalruby3 で自動的にビルド・インストール
  5. ユーザーは smalruby3 script.rb で実行

使い方

# Before (rsdl を別途インストール)
gem install rsdl
rsdl -Ilib script.rb

# After (smalruby3 gem のみ)
gem install smalruby3
smalruby3 script.rb

参考

  • ruby/rsdl/rsdl.c.in — rsdl の実装(SDL_main + ruby_init + ruby_run_node)
  • ruby/rsdl/extconf.rb — rsdl のビルド設定

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions