The idea of a pure GTK implementation of GNU Emacs was introduced, as far as I am aware, in this thread in the Emacs mail list. After a long time I found out a fork at masm11/emacs, which brings proper GTK support and a separate fork at fejfighter/emacs which can be rebased upstream, making possible a rebase onto the native-comp branch.

One of the benefits of a pure GTK implementation is support for the Wayland protocol and the ability to use fractional scaling in GNOME without blurring.

## Dependencies

Dependencies can be installed via

sudo dnf buildep emacs
sudo dnf install jansson-devel mpfr-devel libmpc-devel gmp-devel libgccjit-devel


jansson is required for the new native JSON parser introduced in Emacs 27, and the rest of the developer packages are for native-comp.

## Building

To build just clone the pgtk-native-comp branch of fejfighter/emacs, and build as usual. The following flags are the ones used to build the Fedora build of Emacs, plus the ones for native compilation and pure GTK support.

git clone -b pgtk-nativecomp https://github.com/fejfighter/emacs
cd emacs
./autogen.sh
./configure --with-dbus --with-gif --with-jpeg --with-png --with-rsvg \
--with-tiff --with-xft --with-xpm --with-gpm=no \
--with-xwidgets --with-modules --with-native-comp --with-pgtk
make -j6
sudo make install


Note that the flag --with-jansson is not required anymore.

## Configuration

To compile elc files as needed, in a deferred/async manner, add to your init.el the following.

(when (fboundp 'native-compile-async)
(setq comp-deferred-compilation t
comp-deferred-compilation-black-list '("/mu4e.*\\.el\$")))


The default configuration uses at most half of the cores for asynchronous compilation, this can be configured with the comp-async-jobs-number variable.

If you are not using an English keyboard, you might have issues with ligatures and symbols like ^, to fix this add

(when (eq window-system 'pgtk)
(pgtk-use-im-context t))


to your init.el. Now Emacs will just build whatever elc file it loads asynchronously, this might take a while one the first run but at least it is done asynchronously and won’t interrupt your session. You can find some benchmarks at gccemacs.

Note: Doom emacs users do not need to defer compilation, doom sync and doom build take care of building eln files.

## Dealing with system-wide packages

Some packages like for example mu4e are located in /usr and need root permissions to be compiled, for them you can run

sudo emacs -Q -batch -L . -f batch-native-compile *.el


on their respective folders to get natively compiled binaries.

## In repositories

There are many builds and guides for testing, either nativecomp or pgtk, readily available for some GNU+Linux distributions. I am maintaining a COPR build with pure gtk and native compilation enabled for fedora 32 and 33 at copr.