C言語で書いたPlaydateのプログラムをビルドする方法。
更新履歴
2023/11/5 初版作成
2023/9/29 命令が抜けていたので更新。あとまたビルドして遊んでるので環境等記載。
2024/2/28 Windows11環境に更新したので、動作を確認。環境変数絡みの情報を補記。また一部表現を見直し。
概要
Playdateが届いたので、即日自作のプログラムを動かすようにしたが、
C言語でプログラム書くのはハードルが高く、かつ環境構築に時間がかかったため、
自分の環境でうまくいった方法をメモするもの。
環境:
Windows11
PlaydateSDK 2.3.1利用(20240228追記)
参考資料
手順
- VisualStudioをインストールする
- GNU Arm Embedded Toolchain compilerをインストールする、もしくは以下URLからArm GNU Toolchainをインストールする。
Arm GNU Toolchain Downloads – Arm Developer
新しいファイル一式で問題ないことを確認済み。(クロスコンパイラも入ってる)
このとき環境変数Pathを書き込むこと。そうじゃないとPlaydateファイルのビルドが失敗する。 - CMakeをインストールする
上記と同様に環境変数書き込むのがいい。 - 開発者用コマンドプロンプトを起動する・・・と書いてあるが、
x64 Native Command Prompt toolsを起動すること。(64bitのほう)
これは、シミュレータが読み込むビルドファイルが64bitじゃないと動かないため。 - ソースコードが入ってるフォルダにcdする
- コマンド「mkdir build」ディレクトリが作成される。
- コマンド「cd build」6.で作ったディレクトリに移動する
- ビルド内容によって以下のように実行コマンドを変更する
①シミュレータで動かしたい:
cmake .. -G “NMake Makefiles”
②実機で動かしたい:
cmake .. -G “NMake Makefiles” –toolchain=”<PlaydateSDKをインストールしたパス>\\C_API\\buildsupport\\arm.cmake”
①②ともにbuildフォルダの中にコンパイル・アセンブルするための設定ファイルが用意される。 - buildフォルダの中でコマンド「nmake」を起動(20230929追記)
ソースコードを見に行ったり実際にコンパイルしたりして、ソースコードが入ってるフォルダに*.pdxというフォルダとバイナリファイル一式を作成する。 - シミュレータ起動、ビルドしたフォルダ(*.pdxフォルダ)を読み込む
- 実機に読み込ませる場合、SimulatorからDevice→「Upload Game to Device」を選択
シミュレータでも動くはずだが、たまに動かないものもある。(SimulatorはC APIのみを使ってる場合動かないときもある。PlaydateがLinuxベースのファイルシステムらしく、Windowsのファイルパス形式を使ってる場合動かないケースを確認している)
この時は下記の「Playdateにゲームをサイドローディングする」でアップロードする。
情報登録されたソフトを起動して正常動作が確認できれば終了。
異常終了した場合、正常にビルドができてない可能性もあるため環境を見直すこと。
もしくはメモリ違反の可能性があるため、ソースコードの内容を見直すこと。
Tips等
- シミュレータから実機ビルドに切り替える際(その逆も)は8.→9.を繰り返す形にする(各種オプションを作成しなおすため)
- ビルドを行う場合、別に名前はbuildじゃなくていい。
自分はsimulatorフォルダを作って、実機用/シミュレータ用どちらのビルド設定も保管している。
どちらの環境で使いたいかを選択してnmakeの実行フォルダを変える運用とした - 一個プロジェクトファイルのテンプレート作って使い回すと快適(CMakeのファイルが必要なため
- ときどきリソースのパス周りなのか、シミュレータ上エラーが出るが原因がまだ確認できてない。
最悪Playdate上に直接ファイルを配置する(データディスクモード)
Playdateにゲームをサイドローディングする – Playdate Help - 最初VisualStudioでコンパイルしてたんだけど、うまくbinファイルを出力できなかった(=実機用のビルドができなかった)ので別途調べて、nmake使う方が確実かと思った。
最悪VisualStudioで開発→ビルドはnmakeでも構わないと思った。VisualStudio使う場合もCMake必要だし、そもそもVSCode使うことも検討してるし。