-- language opts
opt_DictsStrict,
- opt_MaxContextReductionDepth,
opt_IrrefutableTuples,
opt_Parallel,
opt_RuntimeTypes,
-- misc opts
opt_IgnoreDotGhci,
opt_ErrorSpans,
- opt_EmitCExternDecls,
opt_GranMacros,
opt_HiVersion,
opt_HistorySize,
#include "HsVersions.h"
-import Util ( consIORef )
import CmdLineParser
import Config ( cProjectVersionInt, cProjectPatchLevel,
cGhcUnregisterised )
import Util
import Maybes ( firstJust )
import Panic ( GhcException(..), ghcError )
-import Constants ( mAX_CONTEXT_REDUCTION_DEPTH )
-import EXCEPTION ( throwDyn )
-import DATA_IOREF
-import UNSAFE_IO ( unsafePerformIO )
-import Monad ( when )
-import Char ( isDigit )
-import List ( sort, intersperse )
+import Control.Exception ( throwDyn )
+import Data.IORef
+import System.IO.Unsafe ( unsafePerformIO )
+import Control.Monad ( when )
+import Data.Char ( isDigit )
+import Data.List ( sort, intersperse, nub )
-----------------------------------------------------------------------------
-- Static flags
-- language opts
opt_DictsStrict = lookUp FSLIT("-fdicts-strict")
opt_IrrefutableTuples = lookUp FSLIT("-firrefutable-tuples")
-opt_MaxContextReductionDepth = lookup_def_int "-fcontext-stack" mAX_CONTEXT_REDUCTION_DEPTH
opt_Parallel = lookUp FSLIT("-fparallel")
opt_Flatten = lookUp FSLIT("-fflatten")
opt_LiberateCaseThreshold = lookup_def_int "-fliberate-case-threshold" (10::Int)
opt_MaxWorkerArgs = lookup_def_int "-fmax-worker-args" (10::Int)
-opt_EmitCExternDecls = lookUp FSLIT("-femit-extern-decls")
opt_GranMacros = lookUp FSLIT("-fgransim")
opt_HiVersion = read (cProjectVersionInt ++ cProjectPatchLevel) :: Int
opt_HistorySize = lookup_def_int "-fhistory-size" 20
"fauto-sccs-on-individual-cafs",
"fscc-profiling",
"fticky-ticky",
- "fall-strict",
"fdicts-strict",
"firrefutable-tuples",
"fparallel",
"fflatten",
- "fsemi-tagging",
- "flet-no-escape",
- "femit-extern-decls",
- "fglobalise-toplev-names",
"fgransim",
"fno-hi-version-check",
"dno-black-holing",
"static",
"funregisterised",
"fext-core",
- "frule-check",
"frules-off",
"fcpr-off",
"ferror-spans",
"fPIC"
]
|| any (flip prefixMatch f) [
- "fcontext-stack",
"fliberate-case-threshold",
"fmax-worker-args",
"fhistory-size",
_ `allowedWith` WayDebug = True
WayDebug `allowedWith` _ = True
- WayThreaded `allowedWith` WayProf = True
WayProf `allowedWith` WayUnreg = True
WayProf `allowedWith` WayNDP = True
_ `allowedWith` _ = False
findBuildTag :: IO [String] -- new options
findBuildTag = do
way_names <- readIORef v_Ways
- let ws = sort way_names
+ let ws = sort (nub way_names)
if not (allowed_combination ws)
then throwDyn (CmdLineError $
"combination not supported: " ++
way_details =
[ (WayThreaded, Way "thr" True "Threaded" [
#if defined(freebsd_TARGET_OS)
- "-optc-pthread"
- , "-optl-pthread"
+-- "-optc-pthread"
+-- , "-optl-pthread"
+ -- FreeBSD's default threading library is the KSE-based M:N libpthread,
+ -- which GHC has some problems with. It's currently not clear whether
+ -- the problems are our fault or theirs, but it seems that using the
+ -- alternative 1:1 threading library libthr works around it:
+ "-optl-lthr"
+#elif defined(solaris2_TARGET_OS)
+ "-optl-lrt"
#endif
] ),