Skip to content

Build from source

These are instructions on how to build emacs-ng.

Build requirements#

You will need Rust installed. The file rust-toolchain indicates the version that gets installed. This happens automatically, so don't override the toolchain manually. IMPORTANT: Whenever the toolchain updates, you have to reinstall rustfmt manually.


You will need a C compiler and toolchain. On Linux, you can do something like:

apt install build-essential automake clang libclang-dev

Additional requirements:

apt install texinfo libjpeg-dev libtiff-dev \
libgif-dev libxpm-dev libgtk-3-dev gnutls-dev \
libncurses5-dev libxml2-dev libxt-dev

For native-comp you will also need zlib1g-dev libgccjit-9-dev.


On MacOS, you will need Xcode.

brew install gnutls texinfo autoconf

To use the installed version of makeinfo instead of the built-in (/usr/bin/makeinfo) one, you'll need to make sure /usr/local/opt/texinfo/bin is before /usr/bin in PATH.

Mojave install libxml2 headers with: open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

If you want to use native-comp, you will need to compile with ./configure --with-native-compilation. nativecomp will also require:

brew install zlib libgccjit

It seems to be more difficult to build native-comp on macOS than on Linux. There are several tutorials that provide instructions on how to successfully compile it (no guarantee that they work):


Compile and install#

$ ./
$ ./configure --enable-rust-debug
$ make -j$(nproc) # proc for number of processors (cores)

For a release build, don't pass --enable-rust-debug.

The Makefile obeys cargo's RUSTFLAGS variable and additional options can be passed to cargo with CARGO_FLAGS.

For example:

$ make CARGO_FLAGS="-vv" RUSTFLAGS="-Zunstable-options --cfg MARKER_DEBUG"

If you want to install it, just use

make install

You may need to run sudo make install depending on your system configuration.

Now emacs should be available at ./src/emacs. We can launch the application via ./src/emacs. We can navigate to the lisp scratchpad by pressing C-x b and hitting enter.

Last update: May 2, 2024