Skip to content

Instantly share code, notes, and snippets.

@bburns

bburns/INSTALL64 Secret

Last active January 3, 2016 17:08
Show Gist options
  • Save bburns/43c9f170361aecee3b71 to your computer and use it in GitHub Desktop.
Save bburns/43c9f170361aecee3b71 to your computer and use it in GitHub Desktop.
Windows build instructions for 64-bit Emacs (draft)
Building and Installing Emacs on 64-bit MS-Windows
using MSYS2 and MinGW-w64
Copyright (c) 2015 Free Software Foundation, Inc.
See the end of the file for license conditions.
This document describes how to compile a 64-bit GNU Emacs using MSYS2 and
MinGW-w64. For more detailed information on the build process, and instructions
for building a 32-bit Emacs using MSYS and MinGW, see the INSTALL document in
this directory.
Do not use this recipe with Cygwin. For building on Cygwin, use the normal
installation instructions in ../INSTALL.
* Requirements
The total space required is 3GB: 1.8GB for MSYS2 / MinGW-w64 and 1.2GB for
Emacs with the full repository, or less if you're using a release tarball.
* Set up the MinGW-w64 / MSYS2 build environment
MinGW-w64 provides a complete runtime for projects built with gcc for 64-bit
Windows - it's located at http://mingw-w64.org/.
MSYS2 is a Cygwin-derived software distribution for Windows which provides
build tools for MinGW-w64 - see http://msys2.github.io/.
** Download and install MinGW-w64 and MSYS2
You can download the x86_64 version of MSYS2 (i.e. msys2-x86_64-<date>.exe)
from
https://sourceforge.net/projects/msys2/files/Base/x86_64
Run this file to install MSYS2 in your preferred directory, e.g. the default
C:\msys64 - this will install MinGW-w64 also. Note that directory names
containing spaces may cause problems.
Then you'll need to add the following directories to your Windows PATH
environment variable -
c:\msys64\usr\bin;c:\msys64\mingw64\bin
you can do this through Control Panel / System and Security / System /
Advanced system settings / Environment Variables / Edit path.
Adding these directories to your PATH tells Emacs where to find the DLLs it
needs to run, and some optional commands like grep and find. These commands
will also be available at the Windows console.
** Download and install the necessary packages
Run msys2_shell.bat in your MSYS2 directory and you will see a BASH window
opened.
In the BASH prompt, use the following command to install the necessary
packages (you can copy and paste it into the shell with Shift + Insert):
pacman -S 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-libxml2 \
mingw-w64-x86_64-gnutls
The packages include the base developer tools (autoconf, automake, grep, make,
etc.), the compiler toolchain (gcc, gdb, etc.), several image libraries, an
xml library, and the GnuTLS (transport layer security) library. Only the
first three packages are required (base-devel, toolchain, xpm-nox) - the rest
are optional.
You now have a complete build environment for Emacs.
* Install git (optional) and disable autocrlf
If you're going to be building the development version of Emacs from the git
repository, and you don't already have git on your system, you can install it
in your MSYS2 environment with:
pacman -S git
The autocrlf feature of Git may interfere with the configure file, so it is
best to disable this feature by running the command:
git config core.autocrlf false
* Get the Emacs source code
Now you can either get an existing release version of the Emacs source code
from the GNU ftp site, or get the more current version and history from the
git repository.
You can always find the most recent information on these sources from the GNU
Savannah Emacs site, https://savannah.gnu.org/projects/emacs.
** From the FTP site
The Emacs ftp site is located at http://ftp.gnu.org/gnu/emacs/ - download the
version you want to build and put the file into a location like C:\emacs\,
then uncompress it with tar. This will put the Emacs source into a folder like
C:\emacs\emacs-24.5:
cd /c/emacs
tar xf emacs-24.5.tar.xz
** From the git repository
To download the git repository, do something like the following - this will
put the Emacs source into C:\emacs\emacs-25:
mkdir /c/emacs
cd /c/emacs
git clone git://git.sv.gnu.org/emacs.git emacs-25
* Build Emacs
Now you're ready to build and install Emacs with autogen, configure, make,
and make install.
First we need to switch to the MinGW-w64 environment - exit the MSYS2 BASH
console and run mingw64_shell.bat in the C:\msys64 folder, then cd back to
your Emacs source directory, e.g.:
cd /c/emacs/emacs-25
** Run autogen
Run autogen to generate the configure script (note: this step is not necessary
if you are using a release source tarball, as the configure file is included):
./autogen.sh
** Run configure
Now you can run configure, which will build the various Makefiles - note that
the example given here is just a simple one - for more information on the
options available please see the nt/INSTALL file.
The --prefix option specifies a location for the resulting binary files, which
'make install' will use - in this example we set it to C:\emacs\emacs-25. If a
prefix is not specified the files will be put in the standard Unix directories
located in your C:\msys64 directory, but this is not recommended.
Note also that we need to disable Imagemagick because Emacs does not yet
support it on Windows.
PKG_CONFIG_PATH=/mingw64/lib/pkgconfig \
./configure \
--prefix=/c/emacs/emacs-25 \
--without-imagemagick
** Run make
This will compile Emacs and build the executables, putting them in the src
directory:
make
To speed up the process, you can try running
make -jN
where N is the number of cores in your system - if your MSYS2 make supports
parallel execution it will run significantly faster.
** Run make install
Now you can run make install, which will copy the executable and other files
to the location specified in the configure step. This will create the bin,
libexec, share, and var directories:
make install
You can also say
make install prefix=/c/somewhere
to install them somewhere else.
* Test Emacs
To test it out, run
./bin/runemacs.exe -Q
and if all went well, you will have a new 64-bit version of Emacs.
* Make a shortcut
To make a shortcut to run the new Emacs, right click on the location where you
want to put it, e.g. the Desktop, select New / Shortcut, then select
runemacs.exe in the bin folder of the new Emacs, and give it a name.
You can set any command line options by right clicking on the resulting
shortcut, select Properties, then add any options to the Target command,
e.g. --debug-init.
* Credits
Thanks to Chris Zheng for the original build outline as used by the
emacsbinw64 project, located at:
https://sourceforge.net/p/emacsbinw64/wiki/Build%20guideline%20for%20MSYS2-MinGW-w64%20system/
* License
This file is part of GNU Emacs.
GNU Emacs is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
GNU Emacs is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
@zklhp
Copy link

zklhp commented Dec 30, 2015

Hi Brian,
Thank you for your document. Your mail is truncated in a wrong way in my mail reader, so I'm putting my thoughts here.

  • In the "Set up the MinGW-w64 / MSYS2 build environment" part, the offical sites (http://mingw-w64.org/ and http://msys2.github.io/) are better than the present URLs.
  • As suggested by Eli, the time usage is not that useful. I also prefer not to list them.
  • The "Install git (optional) and disable autocrlf" and "Get the Emacs source code" parts should not the nt/INSTALL64, as they are not 64-bit-specific.
  • I don't know making the document a org file is a good idea or not.

Thanks,
Chirs

@bburns
Copy link
Author

bburns commented Dec 30, 2015

Hi Chris,

Thanks, I updated the URLs and removed the time info, but would like to leave the Install git and Get the source code sections so this can be a simple / self-contained example to follow - what lost me in the existing INSTALL file was all the different options, so I liked your simple instructions, and tried to stick with that. At some point maybe we can merge the two files, or Eli might want to do that now.

I took out the org-mode etc - I wasn't sure about including that, but the other INSTALL file doesn't have it either, and I removed your email address as I thought maybe I shouldn't publish that - I can add it back if you'd rather.

And I nearly didn't notice your comment - I didn't get a notification but happened to scroll down to the end and saw it - I thought it would send a message of some kind, but apparently not - isaacs/github#21. So I'll send you an email also...

Best,
Brian

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment