diff options
author | Andrey Mokhov <andrey.mokhov@gmail.com> | 2017-11-06 22:59:37 +0000 |
---|---|---|
committer | Andrey Mokhov <andrey.mokhov@gmail.com> | 2017-11-06 22:59:37 +0000 |
commit | 7b0b9f603bb1215e2b7af23c2404d637b95a4988 (patch) | |
tree | ca118c1b14bc4429e827e0caf925dbc3ab77d1cd /src/Settings/Builders/Hsc2Hs.hs | |
download | haskell-7b0b9f603bb1215e2b7af23c2404d637b95a4988.tar.gz |
Squashed 'hadrian/' content from commit 438dc57
git-subtree-dir: hadrian
git-subtree-split: 438dc576e7b84c473a09d1d7ec7798a30303bc4e
Diffstat (limited to 'src/Settings/Builders/Hsc2Hs.hs')
-rw-r--r-- | src/Settings/Builders/Hsc2Hs.hs | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/Settings/Builders/Hsc2Hs.hs b/src/Settings/Builders/Hsc2Hs.hs new file mode 100644 index 0000000000..6185f6bec3 --- /dev/null +++ b/src/Settings/Builders/Hsc2Hs.hs @@ -0,0 +1,56 @@ +module Settings.Builders.Hsc2Hs (hsc2hsBuilderArgs) where + +import Settings.Builders.Common + +hsc2hsBuilderArgs :: Args +hsc2hsBuilderArgs = builder Hsc2Hs ? do + stage <- getStage + ccPath <- getBuilderPath $ Cc CompileC stage + gmpDir <- getSetting GmpIncludeDir + top <- expr topDirectory + hArch <- getSetting HostArch + hOs <- getSetting HostOs + tArch <- getSetting TargetArch + tOs <- getSetting TargetOs + version <- if stage == Stage0 + then expr ghcCanonVersion + else getSetting ProjectVersionInt + mconcat [ arg $ "--cc=" ++ ccPath + , arg $ "--ld=" ++ ccPath + , notM windowsHost ? arg "--cross-safe" + , pure $ map ("-I" ++) (words gmpDir) + , map ("--cflag=" ++) <$> getCFlags + , map ("--lflag=" ++) <$> getLFlags + , notStage0 ? crossCompiling ? arg "--cross-compile" + , stage0 ? arg ("--cflag=-D" ++ hArch ++ "_HOST_ARCH=1") + , stage0 ? arg ("--cflag=-D" ++ hOs ++ "_HOST_OS=1" ) + , notStage0 ? arg ("--cflag=-D" ++ tArch ++ "_HOST_ARCH=1") + , notStage0 ? arg ("--cflag=-D" ++ tOs ++ "_HOST_OS=1" ) + , arg $ "--cflag=-D__GLASGOW_HASKELL__=" ++ version + , arg $ "--template=" ++ top -/- templateHscPath + , arg $ "-I" ++ top -/- "inplace/lib/include/" + , arg =<< getInput + , arg "-o", arg =<< getOutput ] + +getCFlags :: Expr [String] +getCFlags = do + context <- getContext + autogen <- expr $ autogenPath context + mconcat [ remove ["-O"] (cArgs <> getStagedSettingList ConfCcArgs) + , getStagedSettingList ConfCppArgs + , cIncludeArgs + , getPkgDataList CppArgs + , getPkgDataList DepCcArgs + , cWarnings + , arg "-include", arg $ autogen -/- "cabal_macros.h" ] + +getLFlags :: Expr [String] +getLFlags = do + libDirs <- getPkgDataList DepLibDirs + extraLibs <- getPkgDataList DepExtraLibs + mconcat [ getStagedSettingList ConfGccLinkerArgs + , ldArgs + , getPkgDataList LdArgs + , pure [ "-L" ++ unifyPath dir | dir <- libDirs ] + , pure [ "-l" ++ unifyPath dir | dir <- extraLibs ] + , getPkgDataList DepLdArgs ] |