module DriverState where
-#include "../includes/ghcconfig.h"
#include "HsVersions.h"
import CmdLineOpts
data GhcMode
= DoMkDependHS -- ghc -M
- | DoMkDLL -- ghc --mk-dll
- | StopBefore Phase -- ghc -E | -C | -S | -c
+ | StopBefore Phase -- ghc -E | -C | -S
+ -- StopBefore StopLn is the default
| DoMake -- ghc --make
| DoInteractive -- ghc --interactive
- | DoLink -- [ the default ]
| DoEval String -- ghc -e
deriving (Show)
-GLOBAL_VAR(v_GhcMode, DoLink, GhcMode)
-GLOBAL_VAR(v_GhcModeFlag, "", String)
+data GhcLink -- What to do in the link step
+ = -- Only relevant for modes
+ -- DoMake and StopBefore StopLn
+ NoLink -- Don't link at all
+ | StaticLink -- Ordinary linker [the default]
+ | MkDLL -- Make a DLL
+
+GLOBAL_VAR(v_GhcMode, StopBefore StopLn, GhcMode)
+GLOBAL_VAR(v_GhcModeFlag, "", String)
+GLOBAL_VAR(v_GhcLink, StaticLink, GhcLink)
setMode :: GhcMode -> String -> IO ()
setMode m flag = do
isMakeMode DoMake = True
isMakeMode _ = False
-isLinkMode DoLink = True
-isLinkMode DoMkDLL = True
-isLinkMode _ = False
+-- True if we are going to attempt to link in this mode.
+-- (we might not actually link, depending on the GhcLink flag)
+isLinkMode (StopBefore StopLn) = True
+isLinkMode DoMake = True
+isLinkMode _ = False
isCompManagerMode DoMake = True
isCompManagerMode DoInteractive = True
isCompManagerMode (DoEval _) = True
isCompManagerMode _ = False
+isNoLink :: GhcLink -> Bool
+isNoLink NoLink = True
+isNoLink other = False
+
-----------------------------------------------------------------------------
-- Global compilation flags
-- Misc
GLOBAL_VAR(v_Scale_sizes_by, 1.0, Double)
GLOBAL_VAR(v_Static, True, Bool)
-GLOBAL_VAR(v_NoLink, False, Bool)
GLOBAL_VAR(v_NoHsMain, False, Bool)
GLOBAL_VAR(v_MainModIs, Nothing, Maybe String)
GLOBAL_VAR(v_MainFunIs, Nothing, Maybe String)
-GLOBAL_VAR(v_Recomp, True, Bool)
GLOBAL_VAR(v_Collect_ghc_timing, False, Bool)
GLOBAL_VAR(v_Do_asm_mangling, True, Bool)
GLOBAL_VAR(v_Excess_precision, False, Bool)
can_split :: Bool
-can_split = prefixMatch "i386" cTARGETPLATFORM
- || prefixMatch "alpha" cTARGETPLATFORM
- || prefixMatch "hppa" cTARGETPLATFORM
- || prefixMatch "m68k" cTARGETPLATFORM
- || prefixMatch "mips" cTARGETPLATFORM
- || prefixMatch "powerpc" cTARGETPLATFORM
- || prefixMatch "rs6000" cTARGETPLATFORM
- || prefixMatch "sparc" cTARGETPLATFORM
+can_split =
+#if defined(i386_TARGET_ARCH) \
+ || defined(alpha_TARGET_ARCH) \
+ || defined(hppa_TARGET_ARCH) \
+ || defined(m68k_TARGET_ARCH) \
+ || defined(mips_TARGET_ARCH) \
+ || defined(powerpc_TARGET_ARCH) \
+ || defined(rs6000_TARGET_ARCH) \
+ || defined(sparc_TARGET_ARCH)
+ True
+#else
+ False
+#endif
-----------------------------------------------------------------------------
-- Compiler output options