diff options
Diffstat (limited to 'src/Stage.hs')
-rw-r--r-- | src/Stage.hs | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/Stage.hs b/src/Stage.hs new file mode 100644 index 0000000000..7c9405c2b8 --- /dev/null +++ b/src/Stage.hs @@ -0,0 +1,31 @@ +module Stage (Stage (..), stageString) where + +import Development.Shake.Classes +import GHC.Generics + +-- | A stage refers to a certain compiler in GHC's build process. +-- +-- * Stage 0 is built with the bootstrapping compiler, i.e. the one already +-- installed on the user's system. The compiler that is produced during +-- stage 0 is called /stage 1 compiler/. +-- +-- * Stage 1 is built using the stage 1 compiler and all GHC sources. The result +-- is called /stage 2 compiler/ and it has all features of the new GHC. +-- +-- * Stage 2 is built using the stage 2 compiler. The result is a compiler +-- fully "built by itself", commonly referred to as /bootstrapping/. +-- +-- * Stage 3 is built as a self test. The resulting compiler should have +-- the same object code as the one built in stage 2, which is a good test +-- for the compiler. Since it serves no other purpose than that, the stage 3 +-- build is usually omitted in the build process. +data Stage = Stage0 | Stage1 | Stage2 | Stage3 + deriving (Show, Eq, Ord, Enum, Generic, Bounded) + +instance Binary Stage +instance Hashable Stage +instance NFData Stage + +-- | Prettyprint a 'Stage'. +stageString :: Stage -> String +stageString stage = "stage" ++ show (fromEnum stage) |