How to compile Emacs with native compilation on Windows
1. Before you start
Emacs native compilation landed recently in the source tree. Since there are not yet binary release packages available, you need to build Emacs yourself in order to use Emacs with support for natively compiled Emacs Lisp.
2. Install required software
There are multiple ways to install msys2. I used scoop, the Windows package manager, since it's what I use anyway to install open source software on Windows.
scoop install msys2
Once msys2 is installed, it needs to be started using the mingw64.exe program from the msys2 distribution. This is required so that Emacs can recognize the build type.
Next step is to install the required msys2 packages for the build. Type the following inside a msys shell.
# bring first all packages up to date pacman -Syu # install required packages pacman -S --needed base-devel \ mingw-w64-x86_64-toolchain \ mingw-w64-x86_64-xpm-nox \ mingw-w64-x86_64-libtiff \ mingw-w64-x86_64-giflib \ mingw-w64-x86_64-libpng \ mingw-w64-x86_64-libjpeg-turbo \ mingw-w64-x86_64-librsvg \ mingw-w64-x86_64-lcms2 \ mingw-w64-x86_64-jansson \ mingw-w64-x86_64-libxml2 \ mingw-w64-x86_64-gnutls \ mingw-w64-x86_64-zlib \ mingw-w64-x86_64-harfbuzz \ autoconf
3. Build Emacs
After installing the required software, switch to the folder where you downloaded or checked out the Emacs source code and run the following commands.
First run autogen.sh to generate the build configuration program.
./autogen.sh
Now create a build configuration:
./configure --with-native-compilation --with-json --with-modules \ --without-dbus --without-pop \ --prefix=/c/opt/emacs
--with-native-compilationwill enable the native compilation option.--with-jsonwill enable native JSON support.--prefixdefines the folder where Emacs will be installed. If not defined, Emacs files will be scattered throughout the filesystem after installation.
Now you are ready to start the build.
make NATIVE_FULL_AOT=1
Build may take a while. If you want to take advantage of multiple CPU cores while building, use the -j option with the `make` command.
make NATIVE_FULL_AOT=1 -j4
NOTE: You can speed up the build by omitting the NATIVE_FULL_AOT option to make. That will speed up the build significantly, but then the native compilation will happen at runtime when Emacs is started, and only for packages that are actually used.
NOTE: You may see a bunch of errors indicating that git is missing, but you can safely ignore them. It is probably because mingw64 / msys2 can't find it.
4. Install
Once the build is complete, it's time to install.
make install
If you forgot to specify the --prefix option to the ./configure command, you can specify it when installing.
make install prefix=/c/opt/emacs
After installation, switch to the install folder defined by the --prefix parameter and test run it.
runemacs.exe -Q
This will start the default Emacs without executing the init file.
5. Usage
You are now ready to use Emacs with the native compilation option.
However, before starting Emacs, you need to ensure that the MINGW64/bin folder is added to the Windows PATH environment variable, so that Emacs can find the libraries it requires.
Alternatively, you can also copy these libraries to the Emacs bin folder, in order not to depend on the mingw environment after compilation.
Hopefully, once the binary distribution for Windows is available, it will contain everything required to run Emacs.
If some Emacs functionality or some package you use doesn't work, please report an issue to the package maintainers or to Emacs itself, so it can be fixed before the next release is publicly available.