summaryrefslogtreecommitdiff
path: root/hadrian/src/Settings/Builders/Cc.hs
diff options
context:
space:
mode:
Diffstat (limited to 'hadrian/src/Settings/Builders/Cc.hs')
-rw-r--r--hadrian/src/Settings/Builders/Cc.hs28
1 files changed, 28 insertions, 0 deletions
diff --git a/hadrian/src/Settings/Builders/Cc.hs b/hadrian/src/Settings/Builders/Cc.hs
new file mode 100644
index 0000000000..e0055f3e8b
--- /dev/null
+++ b/hadrian/src/Settings/Builders/Cc.hs
@@ -0,0 +1,28 @@
+module Settings.Builders.Cc (ccBuilderArgs) where
+
+import Hadrian.Haskell.Cabal.Type
+import Settings.Builders.Common
+
+ccBuilderArgs :: Args
+ccBuilderArgs = do
+ way <- getWay
+ builder Cc ? mconcat
+ [ getContextData ccOpts
+ , getStagedSettingList ConfCcArgs
+
+ , builder (Cc CompileC) ? mconcat
+ [ arg "-Wall"
+ , cIncludeArgs
+ , Dynamic `wayUnit` way ? pure [ "-fPIC", "-DDYNAMIC" ]
+ , arg "-c", arg =<< getInput
+ , arg "-o", arg =<< getOutput ]
+
+ , builder (Cc FindCDependencies) ? do
+ output <- getOutput
+ mconcat [ arg "-E"
+ , arg "-MM", arg "-MG"
+ , arg "-MF", arg output
+ , arg "-MT", arg $ dropExtension output -<.> "o"
+ , cIncludeArgs
+ , arg "-x", arg "c"
+ , arg =<< getInput ] ]