The Glasgow Haskell Compiler
This is the source tree for [GHC] 1, a compiler and interactive environment for the Haskell functional programming language.
For more information, visit [GHC's web site] 1.
Information for developers of GHC can be found on the [GHC Trac] 2.
Getting the Source
There are two ways to get a source tree:
- Download source tarballs
Download the GHC source distribution:
which contains GHC itself and the "boot" libraries.
- Check out the source code from git
First clone the GHC github read-only repository:
$ git clone git://github.com/ghc/ghc.git
Then run the
sync-all script in that repository to get the other repositories:
$ cd ghc $ ./sync-all get
This checks out the "boot" packages.
DO NOT submit pull request directly to the github repo. See the GHC developer team's working conventions re contributing patches.
Building & Installing
For full information on building GHC, see the [GHC Building Guide] 3. Here follows a summary - if you get into trouble, the Building Guide has all the answers.
Before building GHC you may need to install some other tools and libraries. See, [Setting up your system for building GHC] 8.
NB. In particular, you need [GHC] 1 installed in order to build GHC, because the compiler is itself written in Haskell. You also need [Happy] 4, [Alex] 5, and [Cabal] 9. For instructions on how to port GHC to a new platform, see the [GHC Building Guide] 3.
For building library documentation, you'll need [Haddock] 6. To build the compiler documentation, you need a good DocBook XML toolchain and dblatex.
Quick start: the following gives you a default build:
$ perl boot $ ./configure $ make $ make install
perl boot step is only necessary if this is a tree checked out
from git. For source distributions downloaded from [GHC's web site] 1,
this step has already been performed.
These steps give you the default build, which includes everything
optimised and built in various ways (eg. profiling libs are built).
It can take a long time. To customise the build, see the file
Once you have a build you need to keep it going. You need to keep all repos in sync with the [sync-all script] 7. To get the latest changes:
$ ./sync-all pull $ ./sync-all get
Please see the list of GHC contributors.