Instructions are modified from emacs-w64 Wiki page by zklhp. Many thanks for sharing!
-
Download the latest MSYS2 from this download page.
-
Install MSYS2 to, for example,
C:\msys2
(make sure no space in path to avoid unwanted problems). -
Optionally prettify the MSYS2 console
mintty
with~/.minttyrc
to make it more pleasing to eyes. Thanks to this awesome theme!
ForegroundColour=131,148,150
BackgroundColour=0,43,54
CursorColour=192,192,192
Black=7,54,66
BoldBlack=0,43,54
Red=220,50,47
BoldRed=203,75,22
Green=133,153,0
BoldGreen=88,110,117
Yellow=181,137,0
BoldYellow=101,123,131
Blue=38,139,210
BoldBlue=131,148,150
Magenta=211,54,130
BoldMagenta=108,113,196
Cyan=42,161,152
BoldCyan=147,161,161
White=238,232,213
BoldWhite=253,246,227
BoldAsFont=yes
Font=Consolas
FontHeight=12
Transparency=off
OpaqueWhenFocused=no
ScrollbackLines=200000
FontSmoothing=full
CursorType=underscore
CursorBlinks=yes
ScrollMod=off
RightClickAction=paste
ClickTargetMod=off
- Remove all
/c/*
paths in$PATH
by adding this to.bashrc
and restart mintty.
This is important to avoid interference from programs installed on the same machine, especially if you have Cygwin installed.
# Remove '/c/*' from PATH if running under Msys to avoid possible
# interference from programs already installed on system. Removal
# with awk is copied from http://stackoverflow.com/a/370192.
if [ $(uname -o) == 'Msys' ]; then
export PATH=`echo ${PATH} | awk -v RS=: -v ORS=: '/c\// {next} {print}' | sed 's/:*$//'`
fi
The whole .bashrc
is copied here.
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
##############
### Basics ###
##############
# Don't wait for job termination notification
set -o notify
# Enables UTF-8 in Putty.
# See http://www.earth.li/~huggie/blog/tech/mobile/putty-utf-8-trick.html
echo -ne '\e%G\e[?47h\e%G\e[?47l'
# My pretty prompt (Yay!)
PS1='\[\e[32;40m\]\u\[\e[0m\]\[\e[34;40m\]\H\[\e[0m\]\[\e[40;1m\]\w\[\e[0m\] '
############
### PATH ###
############
# Remove '/c/*' from PATH if running under Msys to avoid possible
# interference from programs already installed on system. Removal
# with awk is copied from http://stackoverflow.com/a/370192.
if [ $(uname -o) == 'Msys' ]; then
export PATH=`echo ${PATH} | awk -v RS=: -v ORS=: '/c\// {next} {print}' | sed 's/:*$//'`
fi
###############
### Aliases ###
###############
alias less='less -r'
alias rm='rm -i'
alias whence='type -a'
alias ls='ls -F --color=auto'
alias dir='ls --color=auto --format=long -L'
alias vdir='ls --color=auto --format=long'
alias ll='ls -l'
alias la='ls -A'
alias l='ls -CF'
alias md='mkdir'
alias pico='nano'
alias cls='clear'
- Install packages required to build Emacs.
Follow instructions on this page first.
pacman -Syu
pacman -Sy
pacman -Sy\
--needed \
filesystem \
msys2-runtime \
bash \
libreadline \
libiconv \
libarchive \
libgpgme \
libcurl \
pacman \
ncurses \
libintl
Close mintty and restart it, do this again.
pacman -Su
Then let us install all required libs for building Emacs.
pacman -Su \
autoconf \
autogen \
automake \
automake-wrapper \
diffutils \
git \
guile \
libgc \
libguile \
libidn-devel \
libltdl \
libnettle-devel \
libopenssl \
libp11-kit-devel \
libtasn1-devel \
libunistring \
make \
mingw-w64-x86_64-binutils \
mingw-w64-x86_64-bzip2 \
mingw-w64-x86_64-cairo \
mingw-w64-x86_64-crt-git \
mingw-w64-x86_64-dbus \
mingw-w64-x86_64-expat \
mingw-w64-x86_64-fontconfig \
mingw-w64-x86_64-freetype \
mingw-w64-x86_64-gcc \
mingw-w64-x86_64-gcc-libs \
mingw-w64-x86_64-gdk-pixbuf2 \
mingw-w64-x86_64-gettext \
mingw-w64-x86_64-giflib \
mingw-w64-x86_64-glib2 \
mingw-w64-x86_64-gmp \
mingw-w64-x86_64-gnutls \
mingw-w64-x86_64-harfbuzz \
mingw-w64-x86_64-headers-git \
mingw-w64-x86_64-imagemagick \
mingw-w64-x86_64-isl \
mingw-w64-x86_64-jansson \
mingw-w64-x86_64-libffi \
mingw-w64-x86_64-libgccjit \
mingw-w64-x86_64-libiconv \
mingw-w64-x86_64-libidn2 \
mingw-w64-x86_64-libjpeg-turbo \
mingw-w64-x86_64-libpng \
mingw-w64-x86_64-librsvg \
mingw-w64-x86_64-libsystre \
mingw-w64-x86_64-libtasn1 \
mingw-w64-x86_64-libtiff \
mingw-w64-x86_64-libunistring \
mingw-w64-x86_64-libwinpthread-git \
mingw-w64-x86_64-libxml2 \
mingw-w64-x86_64-mpc \
mingw-w64-x86_64-mpfr \
mingw-w64-x86_64-nettle \
mingw-w64-x86_64-p11-kit \
mingw-w64-x86_64-pango \
mingw-w64-x86_64-pixman \
mingw-w64-x86_64-winpthreads \
mingw-w64-x86_64-xpm-nox \
mingw-w64-x86_64-xz \
mingw-w64-x86_64-zlib \
mingw-w64-x86_64-jbigkit \
nano \
openssl \
pkgconf \
tar \
texinfo \
wget
- Get emacs source.
mkdir emacs; cd emacs
git clone http://git.savannah.gnu.org/r/emacs.git emacs
git config core.autocrlf false
- Build Emacs!
Change target
accordingly, the directory in which the freshly built Emacs binaries, libraries, and docs live.
target=/c/emacs
export PATH=/mingw64/bin:$PATH
mkdir build; cd build
(cd ../emacs; ./autogen.sh)
export PKG_CONFIG_PATH=/mingw64/lib/pkgconfig
../emacs/configure \
--host=x86_64-w64-mingw32 \
--target=x86_64-w64-mingw32 \
--build=x86_64-w64-mingw32 \
--with-native-compilation \
--with-gnutls \
--with-imagemagick \
--with-jpeg \
--with-json \
--with-png \
--with-rsvg \
--with-tiff \
--with-wide-int \
--with-xft \
--with-xml2 \
--with-xpm \
'CFLAGS=-I/mingw64/include/noX' \
prefix=$target
make
make install prefix=$target
# Only needed for standalone dist (wo MSYS2 env)
# cp /mingw64/bin/*.dll $target/bin
The above error message only occurs the first ever time Emacs runs after being compiled. Subsequent runs error with:
I get these errors everytime something tries to native compile (which is often when opening new buffers and new code gets run). UGHGHGIH. I'm happy it works but it's just about the most annoying possible way of "working" possible where I constantly get bombarded with error popups non-stop as well as native compilation just not working at all