wiki:Building/Architecture/Idiom/Stages

Version 1 (modified by simonmar, 5 years ago) (diff)

--

Idiom: stages

What do we use to compile GHC? GHC itself, of course. In a complete build we actually build GHC twice: once using the GHC version that is installed, and then again using the GHC we just built. To be clear about which GHC we are talking about, we number them:

  • Stage 0 is the GHC you have installed. The "GHC you have installed" is also called "the bootstrap compiler".
  • Stage 1 is the first GHC we build, using stage 0. Stage 1 is then used to build the packages.
  • Stage 2 is the second GHC we build, using stage 1. This is the one we normally install when you say make install.
  • Stage 3 is optional, but is sometimes built to test stage 2.

Stage 1 does not support interactive execution (GHCi) and Template Haskell. The reason being that when running byte code we must dynamically link the packages, and only in stage 2 and later can we guarantee that the packages we dynamically link are compatible with those that GHC was built against (because they are the very same packages).