X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Fmain%2FDriverFlags.hs;h=e4dd662b76b7bc04943d102197f5322635894c98;hb=5ca4a0134475bbc790af6ce7d7517a97e877bff6;hp=9a8efee1ef5fa40c0605ba81c5af4abafca62b13;hpb=9a3a6d713d1a01df5342206993ac9a816e6d5a31;p=ghc-hetmet.git diff --git a/ghc/compiler/main/DriverFlags.hs b/ghc/compiler/main/DriverFlags.hs index 9a8efee..e4dd662 100644 --- a/ghc/compiler/main/DriverFlags.hs +++ b/ghc/compiler/main/DriverFlags.hs @@ -1,7 +1,7 @@ {-# OPTIONS -#include "hschooks.h" #-} ----------------------------------------------------------------------------- --- $Id: DriverFlags.hs,v 1.64 2001/08/13 15:49:38 simonmar Exp $ +-- $Id: DriverFlags.hs,v 1.81 2001/12/10 01:28:00 sebc Exp $ -- -- Driver flags -- @@ -22,7 +22,7 @@ module DriverFlags ( import DriverState import DriverUtil -import SysTools ( setTmpDir, setPgm, setDryRun, showGhcUsage ) +import SysTools import CmdLineOpts import Config import Util @@ -76,8 +76,8 @@ processArgs _spec [] spare = return (reverse spare) 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 = @@ -152,16 +152,15 @@ arg_ok (AnySuffixPred p _) rest arg = p arg -- 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 ---------------------------------------------------- @@ -222,6 +221,10 @@ static_flags = , ( "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 @@ -272,6 +275,9 @@ static_flags = , ( "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") ) @@ -296,15 +302,21 @@ static_flags = 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) ) +#ifdef ILX + , ( "optI", HasArg (addOpt_I) ) + , ( "opti", HasArg (addOpt_i) ) +#endif ------ HsCpp opts --------------------------------------------------- -- With a C compiler whose system() doesn't use a UNIX shell (i.e. @@ -339,7 +351,7 @@ dynamic_flags = [ , ( "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) ) @@ -383,6 +395,7 @@ dynamic_flags = [ , ( "fvia-c", NoArg (setLang HscC) ) , ( "fvia-C", NoArg (setLang HscC) ) , ( "filx", NoArg (setLang HscILX) ) + , ( "fno-code", NoArg (setLang HscNothing) ) -- "active negatives" , ( "fno-implicit-prelude", NoArg (setDynFlag Opt_NoImplicitPrelude) ) @@ -454,7 +467,8 @@ buildStaticHscOpts = do 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* @@ -477,7 +491,10 @@ buildStaticHscOpts = do machdepCCOpts | prefixMatch "alpha" cTARGETPLATFORM - = return ( ["-static", "-Xlinker -noprefix_recognition"], [] ) + = 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. | prefixMatch "hppa" cTARGETPLATFORM -- ___HPUX_SOURCE, not _HPUX_SOURCE, is #defined if -ansi! @@ -512,6 +529,15 @@ machdepCCOpts | prefixMatch "mips" cTARGETPLATFORM = return ( ["-static"], [] ) + | prefixMatch "sparc" cTARGETPLATFORM + = return ( [], ["-w"] ) + -- 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. + + | prefixMatch "powerpc-apple-darwin" cTARGETPLATFORM + = return ( ["-no-cpp-precomp"], [""] ) + | prefixMatch "powerpc" cTARGETPLATFORM || prefixMatch "rs6000" cTARGETPLATFORM = return ( ["-static"], ["-finhibit-size-directive"] ) @@ -520,11 +546,16 @@ machdepCCOpts -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_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}) +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}) +#ifdef ILX +addOpt_I a = updDynFlags (\s -> s{opt_I = a : opt_I s}) +addOpt_i a = updDynFlags (\s -> s{opt_i = a : opt_i s}) +#endif addCmdlineHCInclude a = updDynFlags (\s -> s{cmdlineHcIncludes = a : cmdlineHcIncludes s}) @@ -533,8 +564,7 @@ getOpts :: (DynFlags -> [a]) -> IO [a] getOpts opts = dynFlag opts >>= return . reverse -- we can only change HscC to HscAsm and vice-versa with dynamic flags --- (-fvia-C and -fasm). --- NB: we can also set the new lang to ILX, via -filx. I hope this is right +-- (-fvia-C and -fasm). We can also set the new lang to ILX, via -filx. setLang l = updDynFlags (\ dfs -> case hscLang dfs of HscC -> dfs{ hscLang = l } HscAsm -> dfs{ hscLang = l }