# 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 | |
release (same as perf with -haddock) | -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 | |
static | -O -H64m -fPIC -static |
-O -H64m -fPIC -static |
-O2 | -O2 | -O2 | -O -optl -static |
-O2 -optl -static |
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 recommended that you use this in conjunction with `no_dynamic_ghc` since
GHC does not support loading of profiled libraries with the
dynamic linker. You should use a flavour that builds profiling libs and rts,
i.e. not quick . This flag adds cost centres with the -fprof-late flag. |
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. |
no_profiled_libs |
Disables building of libraries in profiled build ways. |
omit_pragmas |
Build the stage2 compiler with -fomit-interface-pragmas to reduce recompilation. |
ipe |
Build the stage2 libraries with IPE debugging information for use with -hi profiling. |
debug_ghc |
Build the stage2 compiler linked against the debug rts |
debug_stage1_ghc |
Build the stage1 compiler linked against the debug rts |
assertions |
Build the stage2 compiler with assertions enabled. |
fully_static |
Produce fully statically-linked executables and build libraries suitable for static linking. |
collect_timings |
Collects timings while building the stage2+ compiler by adding the
flags -ddump-to-file -ddump-timings . |
lint |
Enable Core, STG, and C-- linting in all compilation with the stage1 compiler. |
Flavour | Library ways | RTS ways | ||||
---|---|---|---|---|---|---|
stage0 | stage1+ | stage0 | stage1+ | stage0 | stage1+ | |
default perf prof devel1 devel2 | vanilla | vanilla profiling dynamic |
debug threaded threadedDebug debugDynamic threadedDynamic threadedDebugDynamic |
debug threaded threadedDebug threadedProfiling debugDynamic threadedDynamic threadedDebugDynamic |
||
static | vanilla | vanilla profiling |
debug threaded threadedDebug |
debug threaded threadedDebug threadedProfiling |
Only in prof flavour |
Only in prof flavour |
quick quick-validate quick-debug |
vanilla | vanilla dynamic |
debug threaded threadedDebug debugDynamic threadedDynamic threadedDebugDynamic |
debug threaded threadedDebug debugDynamic threadedDynamic threadedDebugDynamic |
||
quickest bench |
vanilla | vanilla | vanilla threaded |
vanilla threaded |