To build GHC's RTS, Hadrian uses some feature that isn't available in cabal (afaik): setting custom cc-options or cpp-options per file/glob.
See https://gitlab.haskell.org/ghc/ghc/-/blob/8f2e08320f846ed72ef0306ebbe75bdb3752226a/hadrian/src/Settings/Packages.hs#L403:
-- We're after pure performance here. So make sure fast math and
-- vectorization is enabled.
, input "**/Hash.c" ? pure [ "-O3" ]
, inputs ["**/Evac.c", "**/Evac_thr.c"] ? arg "-funroll-loops"
, speedHack ?
inputs [ "**/Evac.c", "**/Evac_thr.c"
, "**/Scav.c", "**/Scav_thr.c"
, "**/Compact.c", "**/GC.c" ] ? arg "-fno-PIC"
It would be nice to convert this into proper Cabal entries so that we get one step closer to build the boot libraries with cabal. Something like:
cc-options-custom:
<glob> <options>
cpp-options-custom:
<glob> <options>
ghc-options-custom:
<glob> <options>
E.g.
cc-options-custom:
**/Compact.c -finline-limit=2500
**/Hash.c -O3
{**/Evac.c,**/Evac_thr.c} -funroll-loops
if flag(speedHack)
cc-options-custom:
**/{Evac.c, Evac_thr.c, Scav.c, Scav_thr.c, Compact.c, GC.c} -fno-PIC
cpp-options-custom:
**/RtsUtils.c -DProjectVersion=foo -DHostPlatform=bar ...
To build GHC's RTS, Hadrian uses some feature that isn't available in cabal (afaik): setting custom
cc-optionsorcpp-optionsper file/glob.See https://gitlab.haskell.org/ghc/ghc/-/blob/8f2e08320f846ed72ef0306ebbe75bdb3752226a/hadrian/src/Settings/Packages.hs#L403:
It would be nice to convert this into proper Cabal entries so that we get one step closer to build the boot libraries with cabal. Something like:
E.g.