# Build flavours Hadrian supports a few predefined _build flavours_, i.e. collections of build settings that fully define a GHC build (see `src/Flavour.hs`). Users can add their own build flavours if need be, as described [here](https://gitlab.haskell.org/ghc/ghc/blob/master/hadrian/doc/user-settings.md#build-flavour). ## Arguments The following table summarises extra arguments passed to GHC in different build flavours. There are four groups of arguments: arguments in `hsDefault` are passed to GHC for all Haskell source files, `hsLibrary` arguments are added when compiling libraries, `hsCompiler` when compiling the `compiler` library, and `hsGhc` when compiling/linking the GHC program.
Flavour | Extra arguments | |||||||
---|---|---|---|---|---|---|---|---|
hsDefault | hsLibrary | hsCompiler | hsGhc | |||||
stage0 | stage1+ | stage0 | stage1+ | stage0 | stage1+ | stage0 | stage1+ | |
default | -O -H32m |
-O2 -H32m |
-haddock | |||||
quick | -O0 -H64m |
-O0 -H64m |
-O | -O2 | -O | -O | ||
quick-validate | -O0 -H64m -Werror |
-O0 -H64m -Werror |
-O | -O2 | -O | -O | ||
quick-debug | -O0 -H64m |
-O0 -H64m |
-O | -O2 | -O | -O | -debug (link) | |
quickest | -O0 -H64m |
-O0 -H64m |
-O | -O | ||||
perf | -O -H64m |
-O -H64m |
-O2 | -O2 | -O2 | -O | -O2 | |
bench | -O -H64m |
-O -H64m |
-O2 | -O2 | -O0 | -O2 | -O2 | |
devel1 | -O -H64m |
-O -H64m |
-dcore-lint | -O0 -DDEBUG |
-O0 -DDEBUG |
|||
devel2 | -O -H64m |
-O -H64m |
-dcore-lint | -O2 | -O0 -DDEBUG |
-O0 -DDEBUG |
||
validate | -O0 -H64m |
-fllvm-fill-undef-with-garbage | -O -dcore-lint -dno-debug-output |
-O2 -DDEBUG |
-O -dcore-lint -dno-debug-output |
-O | -O | |
slow-validate | -O0 -H64m |
-fllvm-fill-undef-with-garbage | -O -dcore-lint -dno-debug-output |
-O2 -DDEBUG |
-O -DDEBUG -dcore-lint -dno-debug-output |
-O | -O |
Transformer name | Effect |
---|---|
werror |
Use the `-Werror` flag for all stage1+ compilation. |
debug_info |
Enable production of native debugging information (via GHC/GCC's `-g3`) during stage1+ compilations. |
ticky_ghc |
Compile the GHC executable with Ticky-Ticky profiler support. |
split_sections |
Enable section splitting for all libraries (except for the GHC library due to the long linking times that this causes). |
thread_sanitizer |
Build the runtime system with ThreadSanitizer support |
llvm |
Use GHC's LLVM backend (`-fllvm`) for all stage1+ compilation. |
profiled_ghc |
Build the GHC executable with cost-centre profiling support. It is that you use this in conjunction with `no_dynamic_ghc` since GHC does not It is support loading of profiled libraries with the dynamically-linker. |
no_dynamic_ghc |
Linked GHC against the statically-linked RTS. This causes GHC to default to loading static rather than dynamic library when, e.g., loading libraries during TemplateHaskell evaluations. |
Flavour | Library ways | RTS ways | |||
---|---|---|---|---|---|
stage0 | stage1+ | stage0 | stage1+ | stage0 | stage1+ |
default perf prof devel1 devel2 | vanilla | vanilla profiling dynamic |
logging debug threaded threadedDebug threadedLogging debugDynamic threadedDynamic threadedDebugDynamic loggingDynamic threadedLoggingDynamic |
logging debug threaded threadedDebug threadedLogging threadedProfiling debugDynamic threadedDynamic threadedDebugDynamic loggingDynamic threadedLoggingDynamic |
|
quick quick-validate quick-debug |
vanilla | vanilla dynamic |
logging debug threaded threadedDebug threadedLogging debugDynamic threadedDynamic threadedDebugDynamic loggingDynamic threadedLoggingDynamic |
logging debug threaded threadedDebug threadedLogging debugDynamic threadedDynamic threadedDebugDynamic loggingDynamic threadedLoggingDynamic |
|
quickest bench |
vanilla | vanilla | vanilla threaded |
vanilla threaded |