The macOS surface workaround ran before Bevy 0.20 applied the window extraction commands, so the first pipelined frame still created the Metal surface on the render thread and panicked. Applying them first lets pipelining run, and a frame latency of two stops the render thread waiting on the display before every frame; with a latency of one pipelining gains nothing. Apple M4 Pro, mp_rust, 8 bots, bench recorder, 3456x2168 fullscreen: uncapped 95 -> 238 fps (frame p95 12.9 -> 7.0 ms); vsync on 71 fps alternating between 60 and 120 -> steady 120 (p95 20.5 -> 8.7 ms). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2.1 KiB
Build dependencies
Rust stable via rustup (rust-toolchain.toml pins it), plus a C toolchain
and the Bevy system libs. IW4L enables both x11 and wayland
(Cargo.toml), so the Wayland headers stay required. Gamepad input and
rumble (bevy_gilrs) link libudev, so the udev headers (systemd-devel /
libudev-dev) are required too.
# Fedora
sudo dnf install gcc-c++ pkgconf-pkg-config libX11-devel alsa-lib-devel systemd-devel wayland-devel libxkbcommon-devel
# Debian / Ubuntu
sudo apt install g++ pkg-config libx11-dev libasound2-dev libudev-dev libwayland-dev libxkbcommon-dev
# Arch / Manjaro
sudo pacman -S gcc pkgconf libx11 alsa-lib systemd wayland libxkbcommon libxcursor libxrandr libxi
Upstream list (other distros, GPU Vulkan drivers): Bevy
linux_dependencies.md.
What is not needed for a native Linux build: clang / llvm / lld /
glibc-static — plain gcc-c++ links it. llvm (the llvm-lib tool) is
only required for the Windows cross build:
sudo dnf install llvm # Fedora: provides llvm-lib
make setup-windows # rustup target + cargo-xwin, once
macOS needs only the Xcode command line tools (xcode-select --install)
and rustup: winit, wgpu (Metal), CoreAudio and gilrs link system frameworks,
and the x11 / wayland features compile to nothing. Menu and
make map mp_boneyard run on Apple silicon (M2 Max, M4 Pro, Metal). Rendering
is pipelined with a frame latency of 2 there; IW4L_PIPELINED_RENDERING=0 and
IW4L_FRAME_LATENCY=1 restore the serialised arm.
Game data: the Windows depot of a Steam copy, steamcmd +@sSteamCmdForcePlatformType windows +force_install_dir ~/Games/MW2 +login <user> +app_update 10190 +quit, then IW4L_GAMES=~/Games.
Then follow README.md (Build and run): copy .env.example, set
IW4L_GAMES, make map mp_boneyard. Portable Windows is
WINDOWS.md.
Match metadata uses the Git commit count as its numeric build number. Release
builders can set IW4L_BUILD_NUMBER; source archives need this variable. The
package version remains the textual build version.