ValveSoftware / steam-runtime

A runtime environment for Steam applications
Other
1.19k stars 86 forks source link

Cannot find libLLVM-11.so on Gentoo #305

Closed gotzl closed 3 years ago

gotzl commented 3 years ago

System Information

Symptoms

Games don't start, they show

libGL error: MESA-LOADER: failed to open radeonsi: /overrides/lib/i386-linux-gnu/dri/radeonsi_dri.so: wrong ELF class: ELFCLASS32 (search paths /overrides/lib/x86_64-linux-gnu/dri:/overrides/lib/i386-linux-gnu/dri)
libGL error: failed to load driver: radeonsi
libGL error: MESA-LOADER: failed to open radeonsi: /overrides/lib/i386-linux-gnu/dri/radeonsi_dri.so: wrong ELF class: ELFCLASS32 (search paths /overrides/lib/x86_64-linux-gnu/dri:/overrides/lib/i386-linux-gnu/dri)
libGL error: failed to load driver: radeonsi
libGL error: MESA-LOADER: failed to open swrast: /overrides/lib/i386-linux-gnu/dri/swrast_dri.so: wrong ELF class: ELFCLASS32 (search paths /overrides/lib/x86_64-linux-gnu/dri:/overrides/lib/i386-linux-gnu/dri)
libGL error: failed to load driver: swrast

When selecting proton 5.0-10, everything works fine. Native games also just work...

This points into the direction of the soldier runtime, and in fact, in the system information report one can see, that neither vulkan nor opengl seems functional there. I'm quite new to the whole amdgpu thing and maybe I've misconfigured s.t., but the fact that native games and proton 5.0-10 work seems to indicate that the general system configuration is fine. So, I think that it must have s.t. todo with the RX 6800. Is there s.t. that has to be included into the runtime to support the new cards?

EDIT: Just saw, that in the soldier section of the system information report, the /usr/lib64/dri/radeonsi_dri.so is not listed in the dri_drivers section. So, the question seems to be, why it is not picked up there?

(I don't believe it's duplicate of ValveSoftware/Proton#4288, since that issue was caused by a conflicting libdrm) (Btw, thanks so much for all this work to support linux!!)

kisak-valve commented 3 years ago

Hello @gotzl, let's treat this as a pressure vessel issue until there's a stronger indication that the issue is elsewhere. Looks like mesa is having a hard time finding libLLVM-11.so in the container ERROR: [Loader Message] Code 0 : libLLVM-11.so: cannot open shared object file: No such file or directory.

smcv commented 3 years ago

@kisak-valve, please could you retitle this to mention Gentoo in the title? I suspect that's significant.

smcv commented 3 years ago

It would be very useful to see a log with PRESSURE_VESSEL_VERBOSE=1 in the game's launch options (see https://github.com/ValveSoftware/steam-runtime/blob/master/doc/reporting-steamlinuxruntime-bugs.md for more information).

A log with both PRESSURE_VESSEL_VERBOSE=1 and CAPSULE_DEBUG=tool,search might also be useful.

There seems to be some unusual filesystem layout around libLLVM-11.so, which might be triggering this or contributing to it. It would be useful to see the first few pages of output (everything before Sections) from objdump -T -x /usr/lib/llvm/11/lib32/libLLVM-11.so, and the same for /usr/lib/llvm/11/lib64/libLLVM-11.so, /usr/lib32/dri/radeonsi_dri and /usr/lib64/dri/radeonsi_dri.so.

smcv commented 3 years ago

At a guess, this OS (or since this is a locally-built-from-source distro, this particular configuration of an OS) might be relying on DT_RPATH or DT_RUNPATH to locate some important libraries. We can't fully deal with those mechanisms at the moment.

gotzl commented 3 years ago

Hi, thanks for moving and correcting the title. I've created the requested files here.

But the initial though seems to be correct - it doesn't find libLLVM. I've started steam with PRESSURE_VESSEL_SHELL=instead and in the shell, I get

(steamrt soldier 0.20201124.0)gotzl@desktop:/opt/steam/steamapps/common/Assetto Corsa Competizione$ ls -l /overrides/lib/x86_64-linux-gnu/libLLVM-11.so
lrwxrwxrwx 1 gotzl gotzl 45 Dec  2 15:31 /overrides/lib/x86_64-linux-gnu/libLLVM-11.so -> /run/host/usr/lib/llvm/11/lib64/libLLVM-11.so

and looking into the lib folder, there is no llvm subfolder

(steamrt soldier 0.20201124.0)gotzl@desktop:/opt/steam/steamapps/common/Assetto Corsa Competizione$ ls /run/host/usr/lib/
gconv  ld-linux-x86-64.so.2  locale

because on the host, there's a symlink lib -> /usr/lib64 (note the absolut path ...), thus the runtime gets borked

(steamrt soldier 0.20201124.0)gotzl@desktop:/opt/steam/steamapps/common/Assetto Corsa Competizione$ ls -l /run/host/usr/lib
lrwxrwxrwx 1 root root 11 May 25  2015 /run/host/usr/lib -> /usr/lib64/

Now, I've changed the link to a relative path and runtime looks better

(steamrt soldier 0.20201124.0)gotzl@desktop:/opt/steam/steamapps/common/Assetto Corsa Competizione$  ls -l /overrides/lib/x86_64-linux-gnu/libLLVM-11.so
lrwxrwxrwx 1 gotzl gotzl 45 Dec  2 15:42 /overrides/lib/x86_64-linux-gnu/libLLVM-11.so -> /run/host/usr/lib/llvm/11/lib64/libLLVM-11.so

Like that, things are working with proton 5.13!

Thanks so much for the hints, it wasn't that complicated after all ;)

kisak-valve commented 3 years ago

Out of mild curiosity, what system profile are you using? (eselect profile show)

gotzl commented 3 years ago

Jea ;) Blame on me, I did not yet switch, I'm still on default/linux/amd64/17.0/desktop/gnome/systemd.

smcv commented 3 years ago

on the host, there's a symlink lib -> /usr/lib64 (note the absolut path ...)

Ideally pressure-vessel would be able to deal with this. I think I've fixed something similar in Flatpak in the past, but the code that pressure-vessel uses to set up /run/host is not identical (that's mostly technical debt at this point, we should converge on the fixed version from Flatpak).

However, I'm told this layout is officially unsupported by Gentoo (since https://www.gentoo.org/support/news-items/2019-06-05-amd64-17-1-profiles-are-now-stable.html), so this is not a high priority to fix unless other distributions are found to behave similarly.