summaryrefslogtreecommitdiff
path: root/compiler/main/SysTools.hs
diff options
context:
space:
mode:
authorJohn Ericson <git@JohnEricson.me>2019-03-27 00:27:01 -0400
committerBen Gamari <ben@smart-cactus.org>2019-05-14 16:41:19 -0400
commite529c65eacf595006dd5358491d28c202d673732 (patch)
tree0498cb0a7023c491c240d64069e2442073e83d77 /compiler/main/SysTools.hs
parentf9e4ea401121572d799b9db56f24aa1abdf5edf8 (diff)
downloadhaskell-e529c65eacf595006dd5358491d28c202d673732.tar.gz
Remove all target-specific portions of Config.hs
1. If GHC is to be multi-target, these cannot be baked in at compile time. 2. Compile-time flags have a higher maintenance than run-time flags. 3. The old way makes build system implementation (various bootstrapping details) with the thing being built. E.g. GHC doesn't need to care about which integer library *will* be used---this is purely a crutch so the build system doesn't need to pass flags later when using that library. 4. Experience with cross compilation in Nixpkgs has shown things work nicer when compiler's can *optionally* delegate the bootstrapping the package manager. The package manager knows the entire end-goal build plan, and thus can make top-down decisions on bootstrapping. GHC can just worry about GHC, not even core library like base and ghc-prim!
Diffstat (limited to 'compiler/main/SysTools.hs')
-rw-r--r--compiler/main/SysTools.hs47
1 files changed, 42 insertions, 5 deletions
diff --git a/compiler/main/SysTools.hs b/compiler/main/SysTools.hs
index 50cc6d58e5..b3dc60654e 100644
--- a/compiler/main/SysTools.hs
+++ b/compiler/main/SysTools.hs
@@ -259,6 +259,29 @@ initSysTools top_dir
platformIsCrossCompiling = crossCompiling
}
+ integerLibrary <- getSetting "integer library"
+ integerLibraryType <- case integerLibrary of
+ "integer-gmp" -> pure IntegerGMP
+ "integer-simple" -> pure IntegerSimple
+ _ -> pgmError $ unwords
+ [ "Entry for"
+ , show "integer library"
+ , "must be one of"
+ , show "integer-gmp"
+ , "or"
+ , show "integer-simple"
+ ]
+
+ ghcWithInterpreter <- getBooleanSetting "Use interpreter"
+ ghcWithNativeCodeGen <- getBooleanSetting "Use native code generator"
+ ghcWithSMP <- getBooleanSetting "Support SMP"
+ ghcRTSWays <- getSetting "RTS ways"
+ leadingUnderscore <- getBooleanSetting "Leading underscore"
+ useLibFFI <- getBooleanSetting "Use LibFFI"
+ ghcThreaded <- getBooleanSetting "Use Threads"
+ ghcDebugged <- getBooleanSetting "Use Debugging"
+ ghcRtsWithLibdw <- getBooleanSetting "RTS expects libdw"
+
return $ Settings {
sTargetPlatform = platform,
sTmpDir = normalise tmpdir,
@@ -306,8 +329,20 @@ initSysTools top_dir
sOpt_lc = [],
sOpt_i = [],
sPlatformConstants = platformConstants,
+
sTargetPlatformString = targetPlatformString,
- sTablesNextToCode = tablesNextToCode
+ sIntegerLibrary = integerLibrary,
+ sIntegerLibraryType = integerLibraryType,
+ sGhcWithInterpreter = ghcWithInterpreter,
+ sGhcWithNativeCodeGen = ghcWithNativeCodeGen,
+ sGhcWithSMP = ghcWithSMP,
+ sGhcRTSWays = ghcRTSWays,
+ sTablesNextToCode = tablesNextToCode,
+ sLeadingUnderscore = leadingUnderscore,
+ sLibFFI = useLibFFI,
+ sGhcThreaded = ghcThreaded,
+ sGhcDebugged = ghcDebugged,
+ sGhcRtsWithLibdw = ghcRtsWithLibdw
}
@@ -383,10 +418,12 @@ linkDynLib dflags0 o_files dep_packages
-- against libHSrts, then both end up getting loaded,
-- and things go wrong. We therefore link the libraries
-- with the same RTS flags that we link GHC with.
- dflags1 = if cGhcThreaded then addWay' WayThreaded dflags0
- else dflags0
- dflags2 = if cGhcDebugged then addWay' WayDebug dflags1
- else dflags1
+ dflags1 = if sGhcThreaded $ settings dflags0
+ then addWay' WayThreaded dflags0
+ else dflags0
+ dflags2 = if sGhcDebugged $ settings dflags1
+ then addWay' WayDebug dflags1
+ else dflags1
dflags = updateWays dflags2
verbFlags = getVerbFlags dflags