Use Cabal directly in place of ghc-cabal + make build root configurable (#531)
[hadrian.git] / src / Settings / Builders / Cc.hs
index 19eb08b..c78a19d 100644 (file)
@@ -1,35 +1,28 @@
 module Settings.Builders.Cc (ccBuilderArgs) where
 
-import Development.Shake.FilePath
-import Expression
-import Oracles.Config.Setting
-import Oracles.PackageData
-import Predicates (builder)
-import Settings
-import Settings.Builders.Common (cIncludeArgs)
+import Hadrian.Haskell.Cabal.PackageData as PD
+import Settings.Builders.Common
 
--- TODO: handle custom $1_$2_MKDEPENDC_OPTS and
 ccBuilderArgs :: Args
-ccBuilderArgs = mconcat
-    [ builder (Cc Compile) ?
-        mconcat [ commonCcArgs
-                , arg "-c", arg =<< getInput
-                , arg "-o", arg =<< getOutput ]
+ccBuilderArgs = do
+    way <- getWay
+    builder Cc ? mconcat
+        [ getPackageData PD.ccOpts
+        , getStagedSettingList ConfCcArgs
 
-    , builder (Cc FindDependencies) ? do
-        output <- getOutput
-        mconcat [ arg "-E"
-                , arg "-MM"
-                , commonCcArgs
-                , arg "-MF"
-                , arg output
-                , arg "-MT"
-                , arg $ dropExtension output -<.> "o"
-                , arg "-x"
-                , arg "c"
-                , arg =<< getInput ] ]
+        , builder (Cc CompileC) ? mconcat
+            [ arg "-Wall"
+            , cIncludeArgs
+            , Dynamic `wayUnit` way ? pure [ "-fPIC", "-DDYNAMIC" ]
+            , arg "-c", arg =<< getInput
+            , arg "-o", arg =<< getOutput ]
 
-commonCcArgs :: Args
-commonCcArgs = mconcat [ append =<< getPkgDataList CcArgs
-                       , append =<< getSettingList . ConfCcArgs =<< getStage
-                       , cIncludeArgs ]
+        , 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 ] ]