Skip to content
Simon Ser edited this page Feb 15, 2020 · 30 revisions

This page is intended as a guide for those who wish to build the HEAD of Sway and wlroots for testing or development purposes. If you are an end-user, this page isn't relevant to you.

Dependencies

You're going to need the following tools to get started:

You'll also need the dependencies, which you can find in the README.

Arch Linux

The Arch User Repository (AUR) has the convenient sway-git and wlroots-git package bundles, which contain everything you'll need to compile their respective projects. Use your preferred AUR helper to install these.

Fedora

Fedora requires installing all of the dependencies one-by-one. --releasever=29 is required as dependencies for versions below 29 are outdated.

Note: wayland-protocols-devel is currently outdated for release 29. You will need to pull and install this for yourself from https://github.com/wayland-project/wayland-protocols.

dnf install -y --releasever=29 git gcc meson ninja-build wayland-devel mesa-libEGL-devel mesa-libGLES-devel mesa-dri-drivers xorg-x11-server-Xwayland libdrm-devel libgbm-devel libxkbcommon-devel libudev-devel pixman-devel libinput-devel libevdev-devel systemd-devel cairo-devel libpcap-devel json-c-devel pam-devel pango-devel pcre-devel gdk-pixbuf2-devel

Debian

On Debian-based distributions, library packages are commonly suffixed by -dev.

Compiling as a subproject

To run Sway, you don't need to install it. You can build it and start it directly. Using a subproject will allow you to easily work and wlroots and Sway at the same time.

# Clone repositories
git clone git@github.com:swaywm/sway.git
cd sway
mkdir subprojects
git clone git@github.com:swaywm/wlroots.git subprojects/wlroots

# Build Sway and wlroots
meson build/
ninja -C build/

# Start Sway
build/sway/sway

To enable the address sanitizer (ASan) and the undefined behavior sanitizer (UBSan), add -Db_sanitize=address,undefined to the meson command.

System-wide installation

This section is relevant if you want to install both wlroots and Sway system-wide (without using a subproject).

Variables

If you don't want to add the paths below to your ~/.profile, you can paste these lines into your terminal to set the variables for the current terminal session only.

Ensure that /usr/local/bin is in your PATH by executing echo $PATH. If it isn't, open ~/.profile and add:

export PATH=/usr/local/bin:$PATH

Ensure that your PKG_CONFIG_PATH contains /usr/local/lib/pkgconfig, /usr/local/lib64/pkgconfig, and /usr/local/share/pkgconfig by executing echo $PKG_CONFIG_PATH. If it doesn't, open ~/.profile and add:

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG_PATH=/usr/local/share/pkgconfig:$PKG_CONFIG_PATH

Ensure that your LD_LIBRARY_PATH contains /usr/local/lib/ and /usr/local/lib64/ by executing echo $LD_LIBRARY_PATH. If it doesn't, open the ~/.profile file located in your home directory and add:

export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/local/lib64/:$LD_LIBRARY_PATH

Execute source ~/.profile to update the variables for your current terminal session. You should ensure that your chosen shell sources ~/.profile on login (you may need to delete ~/.bash_profile for it to take precedent).

Compiling

You're now ready to compile wlroots, which is the Wayland compositor library used by Sway.

  • Clone the wlroots repository with git
  • Execute meson build, which will create the build directory
  • Execute ninja -C build to build
  • Execute sudo ninja -C build install to install
  • Verify that either /usr/local/lib or /usr/local/lib64 contain libwlroots.so

Now that wlroots is built and installed, you can build Sway.

  • Clone the Sway repository with git
  • Execute meson build, which will create the build directory
  • Execute ninja -C build to build
  • Execute sudo ninja -C build install to install
  • Verify that /usr/local/bin contains the sway, swaybar, swaylock, etc. binaries

Since Sway and wlroots development moves quite fast, it's common to have issues compiling Sway if your installed version of wlroots is behind. As a first step of compile error troubleshooting, pull, build, and reinstall wlroots.