Building GHC on Windows

This page documents the instructions for setting up a Windows build using MSYS2, which is a fairly complete build of MinGW-w64 + the MSYS2 tools.

This guide should get you running in ~5 minutes, modulo download speeds.

MSYS2 setup


Download and run the 64-bit MSYS2 installer. Be sure to open a mingw64 shell (see below).


Download and run the 32-bit MSYS2 installer. Be sure to open a mingw32 shell (see below).

The result of attempting to create a 32-bit build on a 64-bit machine has not been documented yet. Building on a 32-bit version of Windows works, of course.

Configuring MinGW properly

IMPORTANT: The MSYS2 installer creates multiple shortcuts, "MSYS2 Shell", "MinGW-w64 Win32 Shell" and "MinGW-w64 Win64 Shell". You do not want the "MSYS2 Shell." The MSYS2 shell is set up for building applications with Cygwin which provides an additional POSIX compatibility layer, while MinGW is set up for building native Windows applications which is what we need for GHC.

An easy way to check that you are running the right shell is to check the output of echo $MSYSTEM. It should show either MINGW32 or MINGW64. You can also tell by examining the $PATH.

See MSYS2 installation instructions (section III) for details.

*NOTE:* if after installing packages like Sphinx ./configure still reports it is missing, make sure /mingw64/bin (or /mingw32/bin depending on the arch you're building for) is on the $PATH

Installing packages & tools

The msys2 package uses pacman (the venerable ArchLinux package manager) to manage packages. Let's install system dependencies required for building GHC:

pacman --sync --sysupgrade --needed --refresh git tar \
    binutils autoconf make libtool automake python2 \
    p7zip patch gcc mingw-w64-$(uname -m)-python3-sphinx

The --sync (abbreviated as -S) indicates that you wish to install the given packages. --sysupgrade (short form -u) indicates that you want to upgrade existing packages. --refresh (short form -y) indicates that the local package indexes should be updated.

If this pacman process fails (as it sometimes does) you can simply re-run it as it ought to be idempotent.

Host GHC setup

A host GHC binary is required for bootstrapping. In order to keep different architectures separate, download and install a prebuilt GHC into /mingw64 or /mingw32:

So for 64-bit you'd run

curl -L | tar -xJ -C /mingw64 --strip-components=1

and for 32-bit you'd run

curl -L | tar -xJ -C /mingw32 --strip-components=1

Note: --strip-components=1 places everything within the archive's "ghc-7.8.4" folder directly into the target directory.

Cabal setup

Building GHC requires Alex and Happy. It is easiest to install them using cabal. We will also put them in /usr/local to make sure that they end up on $PATH.

curl -L | tar -xz -C /usr/local/bin && # for some version of cabal you may need to rename the exe to cabal.exe
cabal update &&
cabal install -j --prefix=/usr/local alex happy

A Quick Build

You should now be able to build GHC:

cd ~ &&
git clone --recursive git:// &&
cd ghc

Consider setting up mk/ here (cp mk/ mk/ && vim mk/

Finally, to perform the actual build:

./boot &&
./configure --enable-tarballs-autodownload &&

Running parallel make (e.g., make -j5) is faster, but appears to cause segfaults during the build sometimes. The reasons are not clear yet.

MSYS2 is known to be glitchy in some situations. If you see errors related to fork(), try closing and reopening the shell; see also msys2 issue #74. Also there have been issues with the build process segfaulting. The reason is not known (we're looking into it). If that happens, simply rerunning make will continue the build process.

Alternatively, to run a pristine build and tests (takes a while):


NOTE: You may see an error like make 7628 child_info_fork::abort: ... make: fork: Resource temporarily unavailable when running make. To fix this, go to the root of your MSYS dir and run autorebase.bat; see and again Alternatively, run shutdown //r.

NOTE: If the build seems super slow (takes more than 1 hour to complete), check your virus scanner and whitelist C:/msys64.

Other documentation

Other documentation for Windows includes:

Last modified 4 weeks ago Last modified on Nov 1, 2015 6:21:30 PM