-----------------------------------------------------------------------------
--- $Id: DriverFlags.hs,v 1.103 2002/10/11 16:45:17 simonpj Exp $
+-- $Id: DriverFlags.hs,v 1.111 2003/02/04 15:09:40 simonpj Exp $
--
-- Driver flags
--
------- 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) )
------- 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 --------------------------------------------------
, ( "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 )
, ( "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
, ( "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"))
, ( "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-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<blah>) stuff ---------------------------
------ 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) )
return ( [ if sta then "-DDONT_WANT_WIN32_DLL_SUPPORT" else ""
-- , if suffixMatch "mingw32" cTARGETPLATFORM then "-mno-cygwin" else ""
],
- [ "-fno-defer-pop", "-fomit-frame-pointer",
+ [ "-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
-- 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"] )