-- optimisation opts
opt_NoMethodSharing,
opt_NoStateHack,
- opt_LiberateCaseThreshold,
opt_CprOff,
opt_RulesOff,
opt_SimplNoPreInlining,
import FastString ( FastString, mkFastString )
import Util
import Maybes ( firstJust )
-import Panic ( GhcException(..), ghcError )
+import Panic
import Control.Exception ( throwDyn )
import Data.IORef
when (not (null errs)) $ throwDyn (UsageError (unlines errs))
-- deal with the way flags: the way (eg. prof) gives rise to
- -- futher flags, some of which might be static.
+ -- further flags, some of which might be static.
way_flags <- findBuildTag
-- if we're unregisterised, add some more flags
(more_leftover, errs) <- processArgs static_flags (unreg_flags ++ way_flags)
+ -- see sanity code in staticOpts
+ writeIORef v_opt_C_ready True
+
-- TABLES_NEXT_TO_CODE affects the info table layout.
-- Be careful to do this *after* all processArgs,
-- because evaluating tablesNextToCode involves looking at the global
-- holds the static opts while they're being collected, before
-- being unsafely read by unpacked_static_opts below.
GLOBAL_VAR(v_opt_C, defaultStaticOpts, [String])
-staticFlags = unsafePerformIO (readIORef v_opt_C)
+GLOBAL_VAR(v_opt_C_ready, False, Bool)
+staticFlags = unsafePerformIO $ do
+ ready <- readIORef v_opt_C_ready
+ if (not ready)
+ then panic "a static opt was looked at too early!"
+ else readIORef v_opt_C
-- -static is the default
defaultStaticOpts = ["-static"]
opt_CprOff = lookUp FSLIT("-fcpr-off")
opt_RulesOff = lookUp FSLIT("-frules-off")
-- Switch off CPR analysis in the new demand analyser
-opt_LiberateCaseThreshold = lookup_def_int "-fliberate-case-threshold" (10::Int)
opt_MaxWorkerArgs = lookup_def_int "-fmax-worker-args" (10::Int)
opt_GranMacros = lookUp FSLIT("-fgransim")
findBuildTag = do
way_names <- readIORef v_Ways
let ws = sort (nub way_names)
+
if not (allowed_combination ws)
then throwDyn (CmdLineError $
"combination not supported: " ++
writeIORef v_RTS_Build_tag rts_tag
return (concat flags)
+
+
mkBuildTag :: [Way] -> String
mkBuildTag ways = concat (intersperse "_" (map wayTag ways))
, "-DPROFILING"
, "-optc-DPROFILING" ]),
- (WayTicky, Way "t" False "Ticky-ticky Profiling"
+ (WayTicky, Way "t" True "Ticky-ticky Profiling"
[ "-fticky-ticky"
, "-DTICKY_TICKY"
, "-optc-DTICKY_TICKY" ]),