8000 bevy/docs/linux_dependencies.md at main · bevyengine/bevy · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Latest commit

 

History

History
223 lines (160 loc) · 8.59 KB

linux_dependencies.md

File metadata and controls

  • 223 lines (160 loc) · 8.59 KB

    Installing Linux dependencies

    This page lists the required dependencies to build a Bevy project on your Linux machine.

    If you don't see your distro present in the list, feel free to add the instructions in this document.

    sudo apt-get install g++ pkg-config libx11-dev libasound2-dev libudev-dev libxkbcommon-x11-0

    if using Wayland, you will also need to install

    sudo apt-get install libwayland-dev libxkbcommon-dev

    Depending on your graphics card, you may have to install one of the following: vulkan-radeon, vulkan-intel, or mesa-vulkan-drivers

    Compiling with clang is also possible - replace the g++ package with clang.

    Windows Subsystem for Linux (WSL 2)

    Up-to-date WSL Installs for Windows 10 & 11 include WSLg, which provides necessary servers for passing graphics and audio between Windows and the WSL instance. With WSLg, a user's WSL instance can use X11 as well as Wayland. For more information, see WSLg documentation.

    Prior to the release of WSL Gui (WSLg) around 4/20/2021, users had to manually set up servers on windows for graphic and audio. Make note of the date for documentation found across the internet. Following advice from before WSLg's release can lead to additional conflicts.

    sudo dnf install gcc-c++ libX11-devel alsa-lib-devel systemd-devel

    if using Wayland, you will also need to install

    sudo dnf install wayland-devel libxkbcommon-devel

    If there are errors with linking during the build process such as:

     = note: /usr/bin/ld: skipping incompatible /usr/lib/libasound.so when searching for -lasound
              /usr/bin/ld: skipping incompatible /usr/lib/libasound.so when searching for -lasound
              /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-redhat-linux/10/../../../libasound.so when searching for -lasound
              /usr/bin/ld: skipping incompatible /lib/libasound.so when searching for -lasound
              /usr/bin/ld: skipping incompatible /usr/lib/libasound.so when searching for -lasound
              /usr/bin/ld: cannot find -lasound

    Add your arch to the end of the package to remove the linker error. For example:

    sudo dnf install alsa-lib-devel.x86_64

    Or if there are errors such as:

      --- stderr
      thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: "`\"pkg-config\" \"--libs\" \"--cflags\" \"libudev\"` did not exit successfully: exit status: 1\n--- stderr\nPackage libudev was not found in the pkg-config search path.\nPerhaps you should add the directory containing `libudev.pc'\nto the PKG_CONFIG_PATH environment variable\nNo package 'libudev' found\n"', /home/<user>/.cargo/registry/src/github.com-1ecc6299db9ec823/libudev-sys-0.1.4/build.rs:38:41
      stack backtrace:
         0: rust_begin_unwind
                   at /rustc/9bb77da74dac4768489127d21e32db19b59ada5b/library/std/src/panicking.rs:517:5
         1: core::panicking::panic_fmt
                   at /rustc/9bb77da74dac4768489127d21e32db19b59ada5b/library/core/src/panicking.rs:96:14
         2: core::result::unwrap_failed
                   at /rustc/9bb77da74dac4768489127d21e32db19b59ada5b/library/core/src/result.rs:1617:5
         3: core::result::Result<T,E>::unwrap
                   at /rustc/9bb77da74dac4768489127d21e32db19b59ada5b/library/core/src/result.rs:1299:23
         4: build_script_build::main
                   at ./build.rs:38:5
         5: core::ops::function::FnOnce::call_once
                   at /rustc/9bb77da74dac4768489127d21e32db19b59ada5b/library/core/src/ops/function.rs:227:5
      note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
    warning: build failed, waiting for other jobs to finish...
    error: build failed

    Set the PKG_CONFIG_PATH env var to /usr/lib/<target>/pkgconfig/. For example on an x86_64 system:

    export PKG_CONFIG_PATH="/usr/lib/x86_64-linux-gnu/pkgconfig/"

    Arch / Manjaro

    sudo pacman -S libx11 pkgconf alsa-lib

    Install pipewire-alsa or pulseaudio-alsa depending on the sound server you are using.

    Depending on your graphics card, you may have to install one of the following: vulkan-radeon, vulkan-intel, or mesa-vulkan-drivers

    Void

    sudo xbps-install -S pkgconf alsa-lib-devel libX11-devel eudev-libudev-devel

    Add a shell.nix file to the root of the project containing:

    { pkgs ? import <nixpkgs> { } }:
    
    with pkgs;
    
    mkShell rec {
      nativeBuildInputs = [
        pkg-config
      ];
      buildInputs = [
        udev alsa-lib-with-plugins vulkan-loader
        xorg.libX11 xorg.libXcursor xorg.libXi xorg.libXrandr # To use the x11 feature
        libxkbcommon wayland # To use the wayland feature
      ];
      LD_LIBRARY_PATH = lib.makeLibraryPath buildInputs;
    }

    And enter it by just running nix-shell. You should be able compile Bevy programs using cargo run within this nix-shell. You can do this in one line with nix-shell --run "cargo run".

    If running nix on a non NixOS system (such as ubuntu, arch etc.), NixGL is additionally required, to link graphics drivers into the context of software installed by nix:

    1. Install a system specific nixGL wrapper (docs).
      • If you're running a nvidia GPU choose nixVulkanNvidia.
      • Otherwise, choose another wrapper appropriate for your system.
    2. Run nixVulkanNvidia-xxx.xxx.xx cargo run to compile a bevy program, where xxx-xxx-xx denotes the graphics driver version nixVulkanNvidia was compiled with.

    This is also possible with Nix flakes. Instead of creating shell.nix, you just need to add the derivation (mkShell) to your devShells in flake.nix. Run nix develop to enter the shell or nix develop -c cargo run to just run the program. See Nix's documentation for more information about devShells.

    Note that this template does not add Rust to the environment because there are many ways to do it. For example, to use stable Rust from nixpkgs, you can add cargo and rustc to nativeBuildInputs.

    Here is an example of packaging a Bevy program in nix.

       sudo zypper install libudev-devel gcc-c++ alsa-lib-devel

    Gentoo

       sudo emerge --ask libX11 pkgconf alsa-lib

    When using an AMD Radeon GPU, you may also need to emerge amdgpu-pro-vulkan to get Bevy to find the GPU.

    When using a NVIDIA GPU with the proprietary driver (eg. x11-drivers/nvidia-drivers), you may also need to emerge media-libs/vulkan-loader to get Bevy to find the GPU. NVIDIA Vulkan driver is included in nvidia-driver, but may need the loader to find the correct driver. See Gentoo Documentation for details.

    sudo swupd bundle-add devpkg-alsa-lib
    sudo swupd bundle-add devpkg-libgudev

    Run the following command to install GNU C compiler, standard C development libraries, pkg-config, X11 development libraries, ALSA development libraries, eudev development libraries:

    sudo apk add gcc libc-dev pkgconf libx11-dev alsa-lib-dev eudev-dev

    Install a GPU renderer for you graphics card. For Intel integrated GPUs:

    sudo apk add mesa-vulkan-intel

    If you have issues with winit such as Failed to initialize backend! or similar, try adding the following to your ~/.cargo/config.toml (more information at the issue #1818 of the winit repository:

    [b
    3865
    uild]
    rustflags = ["-C", "target-feature=-crt-static"]
    sudo eopkg it -c system.devel
    sudo eopkg it g++ libx11-devel alsa-lib-devel

    If using Wayland, you may also need to install

    sudo eopkg it wayland-devel libxkbcommon-devel

    Compiling with clang is also possible - replace the g++ package with llvm-clang

    It is necessary to have the hgame module loaded in order to satisfy gli-rs. It will still throw an error, but the program should run successfully. You can make sure the kernel module is loaded on start up by adding the following line to /boot/loader.conf:

    hgame_load="YES"
    0