Per file options
- Dominant language
- Haskell
- Stars
- 1.7k
- Forks
- 750
- Avg merge
- 4d 3h
- Merged PRs (30d)
- 28
Description
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:
```haskell
-- 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:
cpp-options-custom:
ghc-options-custom:
```
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 ...
```
Contributor guide
Assessment
This issue has not been assessed yet.