|
|
# Idiom: distdir
|
|
|
|
|
|
|
|
|
Often we want to build a component multiple times in different ways. For example:
|
|
|
|
|
|
- certain libraries (e.g. Cabal) are required by GHC, so we build them once with the
|
|
|
bootstrapping compiler, and again with stage 1 once that is built.
|
|
|
|
|
|
- GHC itself is built multiple times (stage 1, stage 2, maybe stage 3)
|
|
|
|
|
|
- some tools (e.g. ghc-pkg) are also built once with the bootstrapping compiler,
|
|
|
and then again using stage 1 later.
|
|
|
|
|
|
|
|
|
In order to support multiple builds in a directory, we place all generated files in a subdirectory, called the "distdir". The distdir can be anything at all; for example in `compiler/` we name our distdirs after the stage (`stage1`, `stage2` etc.). When there is only a single build in a directory, by convention we usually call the distdir simply "dist".
|
|
|
|
|
|
|
|
|
There is a related concept called *ways*, which includes profiling and dynamic-linking. Multiple ways are currently part of the same "build" and use the same distdir, but in the future we might unify these concepts and give each way its own distdir. |