Adding extra C compiler arguments when building with hadrian?
Ömer Sinan Ağacan
omeragacan at gmail.com
Mon Feb 10 17:13:20 UTC 2020
Thanks. I'm currently editing the existing "quickest" flavor instead of adding
my own flavor. So far the changes are
diff --git a/hadrian/src/Settings/Flavours/Quickest.hs
b/hadrian/src/Settings/Flavours/Quickest.hs
index c0fd72764f..b0f490d35a 100644
--- a/hadrian/src/Settings/Flavours/Quickest.hs
+++ b/hadrian/src/Settings/Flavours/Quickest.hs
@@ -4,15 +4,20 @@ import Expression
import Flavour
import {-# SOURCE #-} Settings.Default
import Settings.Flavours.Common
+import Packages (rts)
-- Please update doc/flavours.md when changing this file.
quickestFlavour :: Flavour
quickestFlavour = defaultFlavour
{ name = "quickest"
- , args = defaultBuilderArgs <> quickestArgs <>
defaultPackageArgs
+ , args = defaultBuilderArgs <> quickestArgs <>
defaultPackageArgs <> dbgArgs
, libraryWays = pure [vanilla]
- , rtsWays = pure [vanilla, threaded]
- , dynamicGhcPrograms = return False }
+ , rtsWays = pure [vanilla, threaded, debug, threadedDebug,
+ dynamic, threadedDynamic, debugDynamic,
threadedDebugDynamic]
+ , dynamicGhcPrograms = return False
+ , ghcDebugged = True
+ , ghcThreaded = False
+ }
quickestArgs :: Args
quickestArgs = sourceArgs SourceArgs
@@ -23,3 +28,6 @@ quickestArgs = sourceArgs SourceArgs
, hsLibrary = mempty
, hsCompiler = stage0 ? arg "-O"
, hsGhc = stage0 ? arg "-O" }
+
+dbgArgs :: Args
+dbgArgs = builder Cc ? package rts ? arg "-O0" <> arg "-g3"
This fails with
Error when running Shake build system:
at action, called at src/Rules.hs:71:19 in main:Rules
at need, called at src/Rules.hs:93:5 in main:Rules
* Depends on: _build/stage1/bin/runghc
at need, called at src/Rules/Register.hs:73:5 in main:Rules.Register
* Depends on:
_build/stage1/lib/x86_64-linux-ghc-8.11.0.20200206/libHSrts-1.0-ghc8.11.0.20200206.so
at error, called at
src/Development/Shake/Internal/Rules/File.hs:179:58 in
shake-0.18.3-593067565aafb558d09b4352b8abc327d8911a39a0e9abab2804b002b1ae536e:Development.Shake.Internal.Rules.File
* Raised the exception:
Error, rule finished running but did not produce file:
_build/stage1/lib/x86_64-linux-ghc-8.11.0.20200206/libHSrts-1.0-ghc8.11.0.20200206.so
If I set `dynamicGhcPrograms = return False` then it works, but it makes things
harder for me so I'd like to dynamically link the RTS.
I thought the `dynamic` way should be generating the requested .so file, no idea
why it doesn't. Is this a bug in hadrian?
Ömer
Daniel Gröber <dxld at darkboxed.org>, 10 Şub 2020 Pzt, 16:17 tarihinde şunu yazdı:
>
> Hi,
>
> On Mon, Feb 10, 2020 at 03:57:27PM +0300, Ömer Sinan Ağacan wrote:
> > In make build system I can add extra C compiler arguments to any flavor using
> > something like
> >
> > BuildFlavour = ...
> >
> > ifneq "$(BuildFlavour)" ""
> > include mk/flavours/$(BuildFlavour).mk
> > endif
> >
> > GhcRtsHcOpts += -O0 -g3
> >
> > How do I do the same in hadrian when defining a flavor?
>
> I was experimenting with building ghc with -fsanitize=address and have
> this in hadrin/UserSettings.hs still:
>
> userFlavour = defaultFlavour
> { name = "user"
> , args = mconcat
> [ builder Cc ? arg "-fsanitize=address"
> , builder (Ghc CompileCWithGhc) ? arg "-optc -fsanitize=address"
> , builder (Ghc LinkHs) ? arg "-optl -fsanitize=address"
> ]
> }
>
> I'm not sure when (builder Cc) is used vs. (Ghc CompileCWithGhc) so I
> just add flags to both ;)
>
> I think you can restrict these args to just the rts package with
> something like `package rts ? ...` on each line, also `import Package`
> to get the `rts` binder.
>
> --Daniel
More information about the ghc-devs
mailing list