Add support for ARM64 Proton - #503
matte-schwartz wants to merge 6 commits into
Conversation
ARM64 Proton ships its Wine executables in `files/bin-arm64` instead of `files/bin`, and the official Valve ARM64 builds ship no `files/bin` at all. Add a `SteamApp.proton_bin_path` property that prefers `bin-arm64` and falls back to `bin`, mirroring the existing `files`/`dist` fallback in `SteamApp.proton_dist_path`. The Wine proxy scripts receive the directory in a new `PROTON_BIN_PATH` environment variable. ARM64 compatibility tools are also declared in a Steam Play manifest of their own rather than the main one, so names such as `proton-experimental-arm64` can't be resolved. Search every `appinfo.vdf` section declaring compatibility tools instead of only the main manifest. The main manifest is searched first so that existing installations keep resolving as before, and a tool's own name now takes precedence over the same name used as an alias by a tool in an earlier manifest, as `proton-experimental` is an alias in both manifests.
|
Thanks for the PR! How have these changes been tested? I don't have a Steam Frame myself, though I'm on the waitlist for one. The SteamOS ARM package repos are now public and it might be possible to setup an emulated ARM environment using libvirt to test these changes, though it might be a tad slow. I'll look into testing these changes that way, assuming it doesn't turn out to be too difficult or slow. |
|
Yeah, I've had a Frame for a bit now which is what I tested this with. I used flatpak-builder to build a full flatpak bundle on the device and then tested it on there. There's one unrelated issue with the file picker inside of gamescope that I'm working on fixing, but that's an OS issue and not an issue with protontricks. |
Drop when Matoking/protontricks#503 gets merged into main
Drop when Matoking/protontricks#503 gets merged into main
|
very nice! thanks for working on this |
We will be adding one more function for Steam Frame detection
Steam now has Steam Frame specific compatibility profiles that will (presumably) only be used on Steam Frame. Add a function to detect this.
Same as with Steam Deck, Valve has created compatibility profiles for certain games that determine what Proton version should be used by default.
|
OK, quickly amended and force-pushed to fix the Steam Frame detection. I'll avoid touching the branch for now if you want to update the compat tool lookup. Thanks for the contributions so far! EDIT: force-pushed for real now. |
3c7c8e3 to
462bf4c
Compare
|
@Matoking got it, will try to get to this later today since I leave on vacation tomorrow afternoon. |
Steam looks for a compatibility tool with the '-arm64' suffix first and falls back to the name without it. Steam Frame compatibility profiles refer to Proton versions without the suffix, so Protontricks resolved them to the x86_64 installation, which is not installed on a Steam Frame. Check for the suffixed name first on ARM64 and fall back to the original name, which is still needed for custom compatibility tools that do not use the suffix.
A Steam Frame running SteamOS 0.5.0 has `VARIANT_ID="vr"` in /etc/os-release, so the existing check is correct.

ARM64 Proton ships its Wine executables in
files/bin-arm64instead offiles/bin, and the official Valve ARM64 builds ship nofiles/binat all. Add aSteamApp.proton_bin_pathproperty that prefersbin-arm64and falls back tobin, mirroring the existingfiles/distfallback inSteamApp.proton_dist_path. The Wine proxy scripts receive the directory in a newPROTON_BIN_PATHenvironment variable.ARM64 compatibility tools are also declared in a Steam Play manifest of their own rather than the main one, so names such as
proton-experimental-arm64can't be resolved. Search everyappinfo.vdfsection declaring compatibility tools instead of only the main manifest. The main manifest is searched first so that existing installations keep resolving as before, and a tool's own name now takes precedence over the same name used as an alias by a tool in an earlier manifest, asproton-experimentalis an alias in both manifests.