[project @ 2005-02-02 10:14:01 by simonmar]
[ghc-hetmet.git] / ghc / compiler / main / DriverState.hs
index c70d16b..392ed14 100644 (file)
@@ -8,7 +8,6 @@
 
 module DriverState where
 
-#include "../includes/ghcconfig.h"
 #include "HsVersions.h"
 
 import CmdLineOpts
@@ -37,16 +36,23 @@ cHaskell1Version = "5" -- i.e., Haskell 98
 
 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
@@ -72,15 +78,21 @@ isInterpretiveMode _             = False
 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
 
@@ -107,11 +119,9 @@ GLOBAL_VAR(v_Keep_ilx_files,               False,          Bool)
 -- 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)
@@ -129,14 +139,19 @@ GLOBAL_VAR(v_Split_info,          ("",0),         (String,Int))
 
        
 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