{-# OPTIONS -#include "hschooks.h" #-}
-----------------------------------------------------------------------------
--- $Id: DriverFlags.hs,v 1.68 2001/09/04 18:29:20 ken Exp $
+-- $Id: DriverFlags.hs,v 1.80 2001/12/05 00:08:26 sof Exp $
--
-- Driver flags
--
import DriverState
import DriverUtil
-import SysTools ( setTmpDir, setPgm, setDryRun, showGhcUsage )
+import SysTools
import CmdLineOpts
import Config
import Util
processArgs spec args@(('-':arg):args') spare = do
case findArg spec arg of
- Just (rest,action) -> do args' <- processOneArg action rest args
- processArgs spec args' spare
+ Just (rest,action) -> do args' <- processOneArg action rest args
+ processArgs spec args' spare
Nothing -> processArgs spec args' (('-':arg):spare)
processArgs spec (arg:args) spare =
-- flags further down the list with the same prefix.
static_flags =
- [ ------- help -------------------------------------------------------
- ( "?" , NoArg showGhcUsage)
- , ( "-help" , NoArg showGhcUsage)
-
-
- ------- version ----------------------------------------------------
- , ( "-version" , NoArg (do hPutStrLn stdout (cProjectName
+ [ ------- help / version ----------------------------------------------
+ ( "?" , NoArg showGhcUsage)
+ , ( "-help" , NoArg showGhcUsage)
+ , ( "-print-libdir" , NoArg (do getTopDir >>= putStrLn
+ exitWith ExitSuccess))
+ , ( "-version" , NoArg (do putStrLn (cProjectName
++ ", version " ++ cProjectVersion)
exitWith ExitSuccess))
- , ( "-numeric-version", NoArg (do hPutStrLn stdout cProjectVersion
+ , ( "-numeric-version", NoArg (do putStrLn cProjectVersion
exitWith ExitSuccess))
------- verbosity ----------------------------------------------------
, ( "keep-hc-file" , AnySuffix (\_ -> writeIORef v_Keep_hc_files True) )
, ( "keep-s-file" , AnySuffix (\_ -> writeIORef v_Keep_s_files True) )
, ( "keep-raw-s-file", AnySuffix (\_ -> writeIORef v_Keep_raw_s_files True) )
+#ifdef ILX
+ , ( "keep-il-file" , AnySuffix (\_ -> writeIORef v_Keep_il_files True) )
+ , ( "keep-ilx-file" , AnySuffix (\_ -> writeIORef v_Keep_ilx_files True) )
+#endif
, ( "keep-tmp-files" , AnySuffix (\_ -> writeIORef v_Keep_tmp_files True) )
, ( "split-objs" , NoArg (if can_split
, ( "fmax-simplifier-iterations",
Prefix (writeIORef v_MaxSimplifierIterations . read) )
+ , ( "frule-check",
+ SepArg (\s -> writeIORef v_RuleCheck (Just s)) )
+
, ( "fusagesp" , NoArg (do writeIORef v_UsageSPInf True
add v_Opt_C "-fusagesp-on") )
dynamic_flags = [
( "cpp", NoArg (updDynFlags (\s -> s{ cppFlag = True })) )
+ , ( "F", NoArg (updDynFlags (\s -> s{ ppFlag = True })) )
, ( "#include", HasArg (addCmdlineHCInclude) )
, ( "v", OptPrefix (setVerbosity) )
, ( "optL", HasArg (addOpt_L) )
, ( "optP", HasArg (addOpt_P) )
+ , ( "optF", HasArg (addOpt_F) )
, ( "optc", HasArg (addOpt_c) )
, ( "optm", HasArg (addOpt_m) )
, ( "opta", HasArg (addOpt_a) )
, ( "ddump-simpl", NoArg (setDynFlag Opt_D_dump_simpl) )
, ( "ddump-simpl-iterations", NoArg (setDynFlag Opt_D_dump_simpl_iterations) )
, ( "ddump-spec", NoArg (setDynFlag Opt_D_dump_spec) )
- , ( "ddump-sat", NoArg (setDynFlag Opt_D_dump_sat) )
+ , ( "ddump-prep", NoArg (setDynFlag Opt_D_dump_prep) )
, ( "ddump-stg", NoArg (setDynFlag Opt_D_dump_stg) )
, ( "ddump-stranal", NoArg (setDynFlag Opt_D_dump_stranal) )
, ( "ddump-tc", NoArg (setDynFlag Opt_D_dump_tc) )
0 -> hsc_minusNoO_flags
1 -> hsc_minusO_flags
2 -> hsc_minusO2_flags
- _ -> error "unknown opt level"
+ n -> throwDyn (CmdLineError ("unknown optimisation level: "
+ ++ show n))
-- ToDo: -Ofile
-- take into account -fno-* flags by removing the equivalent -f*
machdepCCOpts
| prefixMatch "alpha" cTARGETPLATFORM
- = return ( ["-static"], ["-w"] )
+ = return ( ["-static", "-w", "-mieee"], [] )
-- For now, to suppress the gcc warning "call-clobbered
-- register used for global register variable", we simply
-- disable all warnings altogether using the -w flag. Oh well.
-- register used for global register variable", we simply
-- disable all warnings altogether using the -w flag. Oh well.
+ | prefixMatch "powerpc-apple-macosx" cTARGETPLATFORM
+ = return ( ["-no-cpp-precomp"], [""] )
+
| prefixMatch "powerpc" cTARGETPLATFORM || prefixMatch "rs6000" cTARGETPLATFORM
= return ( ["-static"], ["-finhibit-size-directive"] )
addOpt_L a = updDynFlags (\s -> s{opt_L = a : opt_L s})
addOpt_P a = updDynFlags (\s -> s{opt_P = a : opt_P s})
+addOpt_F a = updDynFlags (\s -> s{opt_F = a : opt_F s})
addOpt_c a = updDynFlags (\s -> s{opt_c = a : opt_c s})
addOpt_a a = updDynFlags (\s -> s{opt_a = a : opt_a s})
addOpt_m a = updDynFlags (\s -> s{opt_m = a : opt_m s})