haskell / haskell/cabal

Per file options

Open
#10,552 1 comment 0 reactions 0 assignees Claimed by @andreabedini View on GitHub
type: enhancement
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.