-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Development Setup
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.
You're going to need the following tools to get started:
You'll also need the dependencies, which you can find in the README.
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 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
On Debian-based distributions, library packages are commonly suffixed by -dev
.
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 [email protected]:swaywm/sway.git
cd sway
mkdir subprojects
git clone [email protected]: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.
This section is relevant if you want to install both wlroots and Sway system-wide (without using a subproject).
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).
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 thebuild
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
containlibwlroots.so
Now that wlroots is built and installed, you can build Sway.
- Clone the
Sway
repository with git - Execute
meson build
, which will create thebuild
directory - Execute
ninja -C build
to build - Execute
sudo ninja -C build install
to install - Verify that
/usr/local/bin
contains thesway
,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.