Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Ways
The central concept of a "way" is that all objects in a given program must be compiled in the same "way". Certain options change parameters of the virtual machine, eg. profiling adds an extra word to the object header, so profiling objects cannot be linked with non-profiling objects.
After parsing the command-line options, we determine which "way" we are building - this might be a combination way, eg. profiling+threaded.
There are two kinds of ways: - RTS only: only affect the runtime system (RTS) and don't affect code generation (e.g. threaded, debug) - Full ways: affect code generation and the RTS (e.g. profiling, dynamic linking)
We then find the "build-tag" associated with this way, and this becomes the suffix used to find .hi files and libraries used in this compilation.
Synopsis
- data Way
- hasWay :: Set Way -> Way -> Bool
- allowed_combination :: Set Way -> Bool
- wayGeneralFlags :: Platform -> Way -> [GeneralFlag]
- wayUnsetGeneralFlags :: Platform -> Way -> [GeneralFlag]
- wayOptc :: Platform -> Way -> [String]
- wayOptl :: Platform -> Way -> [String]
- wayOptP :: Platform -> Way -> [String]
- wayDesc :: Way -> String
- wayRTSOnly :: Way -> Bool
- wayTag :: Way -> String
- waysTag :: Set Way -> String
- waysBuildTag :: Set Way -> String
- hostFullWays :: Set Way
- hostIsProfiled :: Bool
- hostIsDynamic :: Bool
Documentation
A way
Don't change the constructor order as it us used by waysTag
to create a
unique tag (e.g. thr_debug_p) which is expected by other tools (e.g. Cabal).
WayCustom String | for GHC API clients building custom variants |
WayThreaded | (RTS only) Multithreaded runtime system |
WayDebug | Debugging, enable trace messages and extra checks |
WayProf | Profiling, enable cost-centre stacks and profiling reports |
WayEventLog | (RTS only) enable event logging |
WayDyn | Dynamic linking |
wayGeneralFlags :: Platform -> Way -> [GeneralFlag] Source #
Turn these flags on when enabling this way
wayUnsetGeneralFlags :: Platform -> Way -> [GeneralFlag] Source #
Turn these flags off when enabling this way
wayOptc :: Platform -> Way -> [String] Source #
Pass these options to the C compiler when enabling this way
wayOptP :: Platform -> Way -> [String] Source #
Pass these options to the preprocessor when enabling this way
wayRTSOnly :: Way -> Bool Source #
Return true for ways that only impact the RTS, not the generated code
waysBuildTag :: Set Way -> String Source #
Unique build-tag associated to a list of ways
RTS only ways are filtered out because they have no impact on the build.
Host GHC ways
hostFullWays :: Set Way Source #
Return host "full" ways (i.e. ways that have an impact on the compilation, not RTS only ways). These ways must be used when compiling codes targeting the internal interpreter.
hostIsProfiled :: Bool Source #
Consult the RTS to find whether it has been built with profiling enabled.
hostIsDynamic :: Bool Source #
Consult the RTS to find whether GHC itself has been built with dynamic linking. This can't be statically known at compile-time, because we build both the static and dynamic versions together with -dynamic-too.