tanakh / meru

Multiple game consoles emulator written in Rust
https://meru-emu.com/
MIT License
116 stars 9 forks source link

Raspberry Pi 4(ARM aarch64, 4GB)でのビルドについて #2

Open tsu-kunn opened 2 years ago

tsu-kunn commented 2 years ago

Rustの開発環境をRaspberry Pi 4B, メモリ4GBで作っており、Rustの勉強とGBCエミュが欲しかったのでビルドを試してみましたが、 最後の実行バイナリを作る meru のコンパイルでメモリが足りなくなり、 OOM killer による (signal: 9, SIGKILL: kill) でプロセスが終了させられてしまいました。

メモリは3.5GBほど使えるのですが、プログラムの規模が大きく過ぎたみたいです。 Rustを勉強始めたばかりでまだよくわかっていないのですが、Cargoの記述で消費メモリを制限したり、 プログラムの規模を小さくする方法があったりするのでしょうか? (Webでの実行は不要なので wasm の処理を減らすとか可能?)

エラーログ

   Compiling bevy_tiled_camera v0.4.1
error: could not compile `meru`

Caused by:
  process didn't exit successfully: `rustc --crate-name meru --edition=2021 /home/raspi/.cargo/registry/src/github.com-1ecc6299db9ec823/meru-0.3.0/src/main.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --crate-type bin --emit=dep-info,link -C opt-level=3 -C lto -C metadata=5467100919b141b2 -C extra-filename=-5467100919b141b2 --out-dir /tmp/cargo-installLXU6Pi/release/deps -L dependency=/tmp/cargo-installLXU6Pi/release/deps --extern anyhow=/tmp/cargo-installLXU6Pi/release/deps/libanyhow-759673f9860f8223.rlib --extern async_channel=/tmp/cargo-installLXU6Pi/release/deps/libasync_channel-e164720b41745983.rlib --extern async_std=/tmp/cargo-installLXU6Pi/release/deps/libasync_std-e7710c17cc83dabe.rlib --extern bevy=/tmp/cargo-installLXU6Pi/release/deps/libbevy-a5b9493c724c86e0.rlib --extern bevy_easings=/tmp/cargo-installLXU6Pi/release/deps/libbevy_easings-2ee93ee9c9244457.rlib --extern bevy_egui=/tmp/cargo-installLXU6Pi/release/deps/libbevy_egui-079a6dceb90b0e5f.rlib --extern bevy_tiled_camera=/tmp/cargo-installLXU6Pi/release/deps/libbevy_tiled_camera-9c31740e53b71c0e.rlib --extern bincode=/tmp/cargo-installLXU6Pi/release/deps/libbincode-41ea03e0959e627c.rlib --extern cfg_if=/tmp/cargo-installLXU6Pi/release/deps/libcfg_if-9cf46d88ed2e2e03.rlib --extern chrono=/tmp/cargo-installLXU6Pi/release/deps/libchrono-55a729f5ece10cc2.rlib --extern compress_tools=/tmp/cargo-installLXU6Pi/release/deps/libcompress_tools-da4966fb5a35e781.rlib --extern directories=/tmp/cargo-installLXU6Pi/release/deps/libdirectories-da2d98d6b3a2726d.rlib --extern either=/tmp/cargo-installLXU6Pi/release/deps/libeither-78ab93ee959bc1a2.rlib --extern enum_iterator=/tmp/cargo-installLXU6Pi/release/deps/libenum_iterator-a5d37eeb6ea40e52.rlib --extern futures=/tmp/cargo-installLXU6Pi/release/deps/libfutures-380af7f18c335459.rlib --extern image=/tmp/cargo-installLXU6Pi/release/deps/libimage-3e904b7d45347af3.rlib --extern log=/tmp/cargo-installLXU6Pi/release/deps/liblog-c39e630c3aa99cf9.rlib --extern meru=/tmp/cargo-installLXU6Pi/release/deps/libmeru-75eb26787afd62d5.rlib --extern meru_interface=/tmp/cargo-installLXU6Pi/release/deps/libmeru_interface-2f4fc31f0a243b48.rlib --extern rfd=/tmp/cargo-installLXU6Pi/release/deps/librfd-e77e30c4c3cd1dea.rlib --extern rodio=/tmp/cargo-installLXU6Pi/release/deps/librodio-4a5a895fd6eaad90.rlib --extern sabicom=/tmp/cargo-installLXU6Pi/release/deps/libsabicom-ad8d7675e4665109.rlib --extern schemars=/tmp/cargo-installLXU6Pi/release/deps/libschemars-ea1a3fd100aec523.rlib --extern serde=/tmp/cargo-installLXU6Pi/release/deps/libserde-fc2339b234ca9f87.rlib --extern serde_json=/tmp/cargo-installLXU6Pi/release/deps/libserde_json-76733631d1cc9939.rlib --extern super_sabicom=/tmp/cargo-installLXU6Pi/release/deps/libsuper_sabicom-c6bf05bb39da7cd1.rlib --extern tempfile=/tmp/cargo-installLXU6Pi/release/deps/libtempfile-b3cb7ae637f17d79.rlib --extern tgba=/tmp/cargo-installLXU6Pi/release/deps/libtgba-04da3a323b4e95ff.rlib --extern tgbr=/tmp/cargo-installLXU6Pi/release/deps/libtgbr-b70e42940bf3d30c.rlib --extern thiserror=/tmp/cargo-installLXU6Pi/release/deps/libthiserror-d2923ab809b96b10.rlib --extern winit=/tmp/cargo-installLXU6Pi/release/deps/libwinit-5f8d775f43c94aa1.rlib --cap-lints allow -L native=/usr/lib/aarch64-linux-gnu -L native=/usr/lib/aarch64-linux-gnu -L native=/usr/lib/aarch64-linux-gnu` (signal: 9, SIGKILL: kill)
error: failed to compile `meru v0.3.0`, intermediate artifacts can be found at `/tmp/cargo-installLXU6Pi`
tsu-kunn commented 2 years ago

SWAPを4GBに広げてビルドしたら何とか成功しました。 ですが、予想はしていましたが起動はしませんでした。

thread 'main' panicked at 'Failed to initialize any backend! Wayland status: NoCompositorListening X11 status: XOpenDisplayFailed', /home/raspi/.cargo/registry/src/github.com-1ecc6299db9ec823/winit-0.26.1/src/platform_impl/linux/mod.rs:619:9
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

やはり x86_64 とaarch64 とでは動作が違うというのですね。 Cargoからのインストールで何とかコンパイルが成功しましたが、 Debugでは容量が増えると思いますので、やはり現状ラズパイで試すには難しそうです。

改善方法などあれば教えていただきたいです。 Forkして試してみようと思います。

kazuki-4ys commented 1 day ago

Raspberry piでRustプログラミングをしたことないので、完全な憶測なのですが、 おそらくmeruに使われてるゲームエンジン、bevyがRaspberry piに対応していないんだと思います なのでGBCエミュだけほしいのであれば TGBRとRaspberry piにも対応しているGUIクレートでエミュを組めば可能かと思われます TGBR単体ならプラットフォーム依存はないと思います