# 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
## Flavour transformers Each of the flavours described above is intended as a starting-point for configuring your GHC build. In addition, Hadrian supports a number of "flavour transformers" which modify the configuration in various ways. These can be appended to the flavour name passed via the `--flavour` command-line flag, separated by the `+` character. For instance, ``` hadrian --flavour=perf+thread_sanitizer ``` The supported transformers are listed below:
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.
## Ways Libraries and GHC can be built in different _ways_, e.g. with or without profiling information. The following table lists ways that are built in different flavours.
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