これは何?
macOSでGame Boy Advance(GBA)のソフトを開発するために必要なツールのinstallやセットアップを行い、実際にサンプルをGBAのエミュレータで動かすまでの方法を示す。
必要なもの
- macOS
- 今回はSequoia 15.0で試した
- Xcodeのコマンドラインツール
$ xcode-select --install
- mgba
- GBAのエミュレータ
$ brew install mgba
- devkitPro
- 主に任天堂のゲーム機向けの開発ツールチェーンを提供するプロジェクト
- GBA、Nintendo DS、Nintendo Switch、Wiiなどのゲームを開発できる
devkitProのセットアップ
devkitProはinstallすれば終了というわけでもないので順に解説する。
install
Githubの最新のreleaseからdevkitpro-pacman-installer.pkgをダウンロードする。
macOS Sequoiaの場合だと、installerを開こうとするとセキュリティの問題で止められるので、設定アプリ→プライバシーとセキュリティから「このまま開く」をクリックしてinstallする。
依存しているライブラリとツールのinstall
以下のコマンドでGBA開発用のライブラリとツールをinstallする
何をinstallするか聞かれるが全て必要なのでそのままEnterを押す。
$ sudo dkp-pacman -S gba-dev
:: There are 19 members in group gba-dev:
:: Repository dkp-libs
1) armv4t-pkg-config 2) catnip 3) devkitarm-cmake 4) devkitarm-crtls 5) gba-cmake 6) gba-examples
7) gba-pkg-config 8) libfat-gba 9) libgba 10) libtonc 11) maxmod-gba
:: Repository dkp-osx
12) devkitARM 13) devkitARM-gdb 14) flock 15) gba-tools 16) general-tools 17) grit 18) mmutil
19) pkg-config
Enter a selection (default=all):
(ここでgba-dev
ではなくnds-dev
やswitch-dev
にするとDSやSwitchの環境を整えられる)
更に聞かれるがY
でEnterする
resolving dependencies...
looking for conflicting packages...
Packages (21) devkitarm-rules-1.5.1-1 dkp-cmake-common-utils-1.5.2-1 armv4t-pkg-config-0.28-1 catnip-0.1.0-1
devkitARM-r65-1 devkitARM-gdb-14.1-1 devkitarm-cmake-1.2.2-1 devkitarm-crtls-1.2.6-1
flock-0.4.0-1 gba-cmake-1.0.1-1 gba-examples-20240626-1 gba-pkg-config-0.28-4
gba-tools-1.2.0-2 general-tools-1.4.4-1 grit-0.9.2-1 libfat-gba-1.1.5-1 libgba-0.5.4-1
libtonc-1.4.3-3 maxmod-gba-1.0.15-1 mmutil-1.10.1-1 pkg-config-0.29.2-3
Total Download Size: 75.59 MiB
Total Installed Size: 314.50 MiB
Net Upgrade Size: 308.65 MiB
:: Proceed with installation? [Y/n]
すると諸々installされる。
環境変数のセット
後ほどサンプルのMakefileで参照されるので環境変数をセットする。
devkitProは/opt/devkitproにinstallされる。
$ vim ~/.zshrc
### devkitPro(GBA)用
export DEVKITPRO=/opt/devkitpro
export DEVKITARM=$DEVKITPRO/devkitARM
export PATH=$PATH:$DEVKITARM/bin
$ source ~/.zshrc
これで環境構築done.
サンプルを実行
devkitpro/example/にサンプルがあるので移動
$ cd $DEVKITPRO/examples/
examples/のgbaフォルダごと別のフォルダにコピーしてそこへ移動
cd 任意のフォルダ/gba
gba/にはMakefileが存在し、各フォルダにサンプルが入っている状態。
$ ls
Makefile audio img template xboo
README.md graphics mbv2 utility
そのままmakeすると、各フォルダのMakefileも走り、各フォルダに.elfと.gbaが生成される
$ make
例えばgba/template/template.gbaをクリックして実行すると以下のようになる。
なぜgbaフォルダをコピーするのか
コピーせず元のままでmakeするとPermission denied
になる。そこで$ sudo make
する必要があるが、今度は以下のように「DEVKITARMの環境変数が宣言されてない」とエラーになる。
Makefile:6: *** "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM". Stop
これはsudo
が現在のユーザではなくroot
として実行することになるので、設定した環境変数が引き継がれなくエラーになっている。
なのでコピーすることで$ make
だけで実行できるようにする。
おわりに
この記事をなぜ書いたかというと、SwiftでGBA開発ができることを知り、色々と試しているうちに「これSwiftじゃなくて普通にCで書いた方が楽じゃない?ネットに転がっている解説記事やサンプルもCで書かれたものだし。」と当たり前のことを思い始め、環境構築しようと思ったら今更しかもmacOSで環境構築してる人が少なくて少し苦戦したのでまとめてみました。
何か間違いなどあればご指摘ください。