X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Fmain%2FDriverFlags.hs;h=378265e31e672789a5afa743887181e2858e7070;hb=d28ba8c800901bea01f70c4719278c2a364cf9fc;hp=10551a235868ca505664b00b9f68f8d602ee85b3;hpb=cb5ccf0a7588f9d67835d99a8135b02f3f5ba884;p=ghc-hetmet.git diff --git a/ghc/compiler/main/DriverFlags.hs b/ghc/compiler/main/DriverFlags.hs index 10551a2..378265e 100644 --- a/ghc/compiler/main/DriverFlags.hs +++ b/ghc/compiler/main/DriverFlags.hs @@ -1,5 +1,5 @@ ----------------------------------------------------------------------------- --- $Id: DriverFlags.hs,v 1.95 2002/06/03 13:08:37 matthewc Exp $ +-- $Id: DriverFlags.hs,v 1.116 2003/06/23 10:35:17 simonpj Exp $ -- -- Driver flags -- @@ -27,10 +27,10 @@ import Config import Util import Panic -import Exception -import IOExts -import System ( exitWith, ExitCode(..) ) +import EXCEPTION +import DATA_IOREF ( readIORef, writeIORef ) +import System ( exitWith, ExitCode(..) ) import IO import Maybe import Monad @@ -225,11 +225,12 @@ static_flags = ------- Miscellaneous ----------------------------------------------- , ( "no-link-chk" , NoArg (return ()) ) -- ignored for backwards compat , ( "no-hs-main" , NoArg (writeIORef v_NoHsMain True) ) + , ( "main-is" , SepArg setMainIs ) ------- Output Redirection ------------------------------------------ , ( "odir" , HasArg (writeIORef v_Output_dir . Just) ) , ( "o" , SepArg (writeIORef v_Output_file . Just) ) - , ( "osuf" , HasArg (writeIORef v_Object_suf . Just) ) + , ( "osuf" , HasArg (writeIORef v_Object_suf) ) , ( "hcsuf" , HasArg (writeIORef v_HC_suf . Just) ) , ( "hisuf" , HasArg (writeIORef v_Hi_suf) ) , ( "hidir" , HasArg (writeIORef v_Hi_dir . Just) ) @@ -261,8 +262,14 @@ static_flags = ------- Libraries --------------------------------------------------- , ( "L" , Prefix (addToDirList v_Library_paths) ) - , ( "l" , Prefix (add v_Cmdline_libraries) ) + , ( "l" , AnySuffix (\s -> add v_Opt_l s >> add v_Opt_dll s) ) +#ifdef darwin_TARGET_OS + ------- Frameworks -------------------------------------------------- + -- -framework-path should really be -F ... + , ( "framework-path" , HasArg (addToDirList v_Framework_paths) ) + , ( "framework" , HasArg (add v_Cmdline_frameworks) ) +#endif ------- Packages ---------------------------------------------------- , ( "package-name" , HasArg (\s -> add v_Opt_C ("-inpackage="++s)) ) @@ -271,6 +278,8 @@ static_flags = , ( "syslib" , HasArg (addPackage) ) -- for compatibility w/ old vsns ------- Specific phases -------------------------------------------- + , ( "pgmL" , HasArg setPgmL ) + , ( "pgmP" , HasArg setPgmP ) , ( "pgmP" , HasArg setPgmP ) , ( "pgmF" , HasArg setPgmF ) , ( "pgmc" , HasArg setPgmc ) @@ -288,6 +297,7 @@ static_flags = , ( "optdll" , HasArg (add v_Opt_dll) ) ----- Linker -------------------------------------------------------- + , ( "no-link" , NoArg (writeIORef v_NoLink True) ) , ( "static" , NoArg (writeIORef v_Static True) ) , ( "dynamic" , NoArg (writeIORef v_Static False) ) , ( "rdynamic" , NoArg (return ()) ) -- ignored for compat w/ gcc @@ -305,14 +315,11 @@ static_flags = , ( "fno-asm-mangling" , NoArg (writeIORef v_Do_asm_mangling False) ) , ( "fmax-simplifier-iterations", - Prefix (writeIORef v_MaxSimplifierIterations . read) ) + PrefixPred (all isDigit) (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") ) - , ( "fexcess-precision" , NoArg (do writeIORef v_Excess_precision True add v_Opt_C "-fexcess-precision")) @@ -350,19 +357,8 @@ dynamic_flags = [ #endif ------ HsCpp opts --------------------------------------------------- - -- With a C compiler whose system() doesn't use a UNIX shell (i.e. - -- mingwin gcc), -D and -U args must *not* be quoted, as the quotes - -- will be interpreted as part of the arguments, and not stripped; - -- on all other systems, quoting is necessary, to avoid interpretation - -- of shell metacharacters in the arguments (e.g. green-card's - -- -DBEGIN_GHC_ONLY='}-' trick). -#ifndef mingw32_TARGET_OS - , ( "D", Prefix (\s -> addOpt_P ("-D'"++s++"'") ) ) - , ( "U", Prefix (\s -> addOpt_P ("-U'"++s++"'") ) ) -#else - , ( "D", Prefix (\s -> addOpt_P ("-D"++s) ) ) - , ( "U", Prefix (\s -> addOpt_P ("-U"++s) ) ) -#endif + , ( "D", AnySuffix addOpt_P ) + , ( "U", AnySuffix addOpt_P ) ------ Debugging ---------------------------------------------------- , ( "dstg-stats", NoArg (writeIORef v_StgStats True) ) @@ -388,12 +384,12 @@ dynamic_flags = [ , ( "ddump-tc", NoArg (setDynFlag Opt_D_dump_tc) ) , ( "ddump-types", NoArg (setDynFlag Opt_D_dump_types) ) , ( "ddump-rules", NoArg (setDynFlag Opt_D_dump_rules) ) - , ( "ddump-usagesp", NoArg (setDynFlag Opt_D_dump_usagesp) ) , ( "ddump-cse", NoArg (setDynFlag Opt_D_dump_cse) ) , ( "ddump-worker-wrapper", NoArg (setDynFlag Opt_D_dump_worker_wrapper) ) , ( "dshow-passes", NoArg (setVerbosity "2") ) , ( "ddump-rn-trace", NoArg (setDynFlag Opt_D_dump_rn_trace) ) , ( "ddump-tc-trace", NoArg (setDynFlag Opt_D_dump_tc_trace) ) + , ( "ddump-splices", NoArg (setDynFlag Opt_D_dump_splices) ) , ( "ddump-rn-stats", NoArg (setDynFlag Opt_D_dump_rn_stats) ) , ( "ddump-stix", NoArg (setDynFlag Opt_D_dump_stix) ) , ( "ddump-simpl-stats", NoArg (setDynFlag Opt_D_dump_simpl_stats) ) @@ -407,7 +403,6 @@ dynamic_flags = [ , ( "ddump-vect", NoArg (setDynFlag Opt_D_dump_vect) ) , ( "dcore-lint", NoArg (setDynFlag Opt_DoCoreLinting) ) , ( "dstg-lint", NoArg (setDynFlag Opt_DoStgLinting) ) - , ( "dusagesp-lint", NoArg (setDynFlag Opt_DoUSPLinting) ) ------ Machine dependant (-m) stuff --------------------------- @@ -417,6 +412,7 @@ dynamic_flags = [ ------ Warning opts ------------------------------------------------- , ( "W" , NoArg (mapM_ setDynFlag minusWOpts) ) + , ( "Werror" , NoArg (setDynFlag Opt_WarnIsError) ) , ( "Wall" , NoArg (mapM_ setDynFlag minusWallOpts) ) , ( "Wnot" , NoArg (mapM_ unSetDynFlag minusWallOpts) ) /* DEPREC */ , ( "w" , NoArg (mapM_ unSetDynFlag minusWallOpts) ) @@ -427,7 +423,6 @@ dynamic_flags = [ , ( "fvia-c", NoArg (setLang HscC) ) , ( "fvia-C", NoArg (setLang HscC) ) , ( "filx", NoArg (setLang HscILX) ) - , ( "fcore", NoArg (setLang HscCore) ) -- "active negatives" , ( "fno-implicit-prelude", NoArg (setDynFlag Opt_NoImplicitPrelude) ) @@ -488,8 +483,13 @@ decodeSize str ----------------------------------------------------------------------------- -- RTS Hooks +#if __GLASGOW_HASKELL__ >= 504 +foreign import ccall unsafe "setHeapSize" setHeapSize :: Int -> IO () +foreign import ccall unsafe "enableTimingStats" enableTimingStats :: IO () +#else foreign import "setHeapSize" unsafe setHeapSize :: Int -> IO () foreign import "enableTimingStats" unsafe enableTimingStats :: IO () +#endif ----------------------------------------------------------------------------- -- Build the Hsc static command line opts @@ -521,6 +521,21 @@ buildStaticHscOpts = do return ( static : filtered_opts ) +setMainIs :: String -> IO () +setMainIs arg + | not (null main_mod) -- The arg looked like "Foo.baz" + = do { writeIORef v_MainFunIs (Just main_fn) ; + writeIORef v_MainModIs (Just main_mod) } + + | isUpper (head main_fn) -- The arg looked like "Foo" + = writeIORef v_MainModIs (Just main_fn) + + | otherwise -- The arg looked like "baz" + = writeIORef v_MainFunIs (Just main_fn) + where + (main_mod, main_fn) = split_longest_prefix arg (== '.') + + ----------------------------------------------------------------------------- -- Via-C compilation stuff @@ -530,7 +545,11 @@ buildStaticHscOpts = do machdepCCOpts | prefixMatch "alpha" cTARGETPLATFORM - = return ( ["-static", "-w", "-mieee"], [] ) + = return ( ["-static", "-w", "-mieee" +#ifdef HAVE_THREADED_RTS_SUPPORT + , "-D_REENTRANT" +#endif + ], [] ) -- 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. @@ -559,9 +578,22 @@ machdepCCOpts -- the fp (%ebp) for our register maps. = do n_regs <- dynFlag stolen_x86_regs sta <- readIORef v_Static - return ( [ if sta then "-DDONT_WANT_WIN32_DLL_SUPPORT" else "", - if suffixMatch "mingw32" cTARGETPLATFORM then "-mno-cygwin" else "" ], - [ "-fno-defer-pop", "-fomit-frame-pointer", + return ( [ if sta then "-DDONT_WANT_WIN32_DLL_SUPPORT" else "" +-- , if suffixMatch "mingw32" cTARGETPLATFORM then "-mno-cygwin" else "" + ], + [ "-fno-defer-pop", +#ifdef HAVE_GCC_MNO_OMIT_LFPTR + -- Some gccs are configured with + -- -momit-leaf-frame-pointer on by default, and it + -- apparently takes precedence over + -- -fomit-frame-pointer, so we disable it first here. + "-mno-omit-leaf-frame-pointer", +#endif + "-fomit-frame-pointer", + -- we want -fno-builtin, because when gcc inlines + -- built-in functions like memcpy() it tends to + -- run out of registers, requiring -monly-n-regs + "-fno-builtin", "-DSTOLEN_X86_REGS="++show n_regs ] ) @@ -578,7 +610,15 @@ machdepCCOpts -- disable all warnings altogether using the -w flag. Oh well. | prefixMatch "powerpc-apple-darwin" cTARGETPLATFORM - = return ( ["-no-cpp-precomp"], [""] ) + -- -no-cpp-precomp: + -- Disable Apple's precompiling preprocessor. It's a great thing + -- for "normal" programs, but it doesn't support register variable + -- declarations. + -- -mdynamic-no-pic: + -- As we don't support haskell code in shared libraries anyway, + -- we might as well turn of PIC code generation and save space and time. + -- This is completely optional. + = return ( ["-no-cpp-precomp","-mdynamic-no-pic"], [] ) | prefixMatch "powerpc" cTARGETPLATFORM || prefixMatch "rs6000" cTARGETPLATFORM = return ( ["-static"], ["-finhibit-size-directive"] )