addCmdlineHCInclude,
buildStaticHscOpts,
machdepCCOpts,
+ picCCOpts,
processArgs, OptKind(..), -- for DriverMkDepend only
) where
, ( "S" , PassFlag (setMode (StopBefore As)))
, ( "-make" , PassFlag (setMode DoMake))
, ( "-interactive" , PassFlag (setMode DoInteractive))
- , ( "-mk-dll" , PassFlag (setMode DoMkDLL))
+ , ( "-mk-dll" , NoArg (writeIORef v_GhcLink MkDLL))
, ( "e" , HasArg (\s -> setMode (DoEval s) "-e"))
-- -fno-code says to stop after Hsc but don't generate any code.
, ( "ignore-dot-ghci", NoArg (writeIORef v_Read_DotGHCi False) )
, ( "read-dot-ghci" , NoArg (writeIORef v_Read_DotGHCi True) )
- ------- recompilation checker --------------------------------------
- , ( "recomp" , NoArg (setRecompFlag True) )
- , ( "no-recomp" , NoArg (setRecompFlag False) )
-
------- ways --------------------------------------------------------
, ( "prof" , NoArg (addNoDups v_Ways WayProf) )
, ( "unreg" , NoArg (addNoDups v_Ways WayUnreg) )
, ( "optdll" , HasArg (add v_Opt_dll) )
----- Linker --------------------------------------------------------
- , ( "c" , NoArg (writeIORef v_NoLink True) )
- , ( "no-link" , NoArg (writeIORef v_NoLink True) ) -- Deprecated
+ , ( "c" , NoArg (writeIORef v_GhcLink NoLink) )
+ , ( "no-link" , NoArg (writeIORef v_GhcLink NoLink) ) -- Deprecated
, ( "static" , NoArg (writeIORef v_Static True) )
, ( "dynamic" , NoArg (writeIORef v_Static False) )
, ( "rdynamic" , NoArg (return ()) ) -- ignored for compat w/ gcc
, ( "opti", HasArg (addOpt_i) )
#endif
+ ------- recompilation checker --------------------------------------
+ , ( "recomp" , NoArg (setRecompFlag True) )
+ , ( "no-recomp" , NoArg (setRecompFlag False) )
+
------- Packages ----------------------------------------------------
, ( "package-conf" , HasArg extraPkgConf_ )
, ( "no-user-package-conf", NoArg noUserPkgConf_ )
, ( "ddump-rules", setDumpFlag Opt_D_dump_rules)
, ( "ddump-cse", setDumpFlag Opt_D_dump_cse)
, ( "ddump-worker-wrapper", setDumpFlag Opt_D_dump_worker_wrapper)
- , ( "ddump-rn-trace", setDumpFlag Opt_D_dump_rn_trace)
- , ( "ddump-if-trace", setDumpFlag Opt_D_dump_if_trace)
+ , ( "ddump-rn-trace", NoArg (setDynFlag Opt_D_dump_rn_trace))
+ , ( "ddump-if-trace", NoArg (setDynFlag Opt_D_dump_if_trace))
, ( "ddump-tc-trace", setDumpFlag Opt_D_dump_tc_trace)
, ( "ddump-splices", setDumpFlag Opt_D_dump_splices)
- , ( "ddump-rn-stats", setDumpFlag Opt_D_dump_rn_stats)
+ , ( "ddump-rn-stats", NoArg (setDynFlag Opt_D_dump_rn_stats))
, ( "ddump-opt-cmm", setDumpFlag Opt_D_dump_opt_cmm)
, ( "ddump-simpl-stats", setDumpFlag Opt_D_dump_simpl_stats)
, ( "ddump-bcos", setDumpFlag Opt_D_dump_BCOs)
, ( "ddump-hi", setDumpFlag Opt_D_dump_hi)
, ( "ddump-minimal-imports", setDumpFlag Opt_D_dump_minimal_imports)
, ( "ddump-vect", setDumpFlag Opt_D_dump_vect)
- , ( "dcore-lint", setDumpFlag Opt_DoCoreLinting)
- , ( "dstg-lint", setDumpFlag Opt_DoStgLinting)
- , ( "dcmm-lint", setDumpFlag Opt_DoCmmLinting)
+ , ( "dcore-lint", NoArg (setDynFlag Opt_DoCoreLinting))
+ , ( "dstg-lint", NoArg (setDynFlag Opt_DoStgLinting))
+ , ( "dcmm-lint", NoArg (setDynFlag Opt_DoCmmLinting))
, ( "dshow-passes", NoArg (setRecompFlag False >> setVerbosity "2") )
------ Machine dependant (-m<blah>) stuff ---------------------------
-- Disable Apple's precompiling preprocessor. It's a great thing
-- for "normal" programs, but it doesn't support register variable
-- declarations.
+ = return ( [], ["-no-cpp-precomp"] )
+#else
+ = return ( [], [] )
+#endif
+
+picCCOpts dflags
+#if darwin_TARGET_OS
+ -- Apple prefers to do things the other way round.
+ -- PIC is on by default.
-- -mdynamic-no-pic:
- -- Turn off PIC code generation to save space and time.
+ -- Turn off PIC code generation.
-- -fno-common:
-- Don't generate "common" symbols - these are unwanted
-- in dynamic libraries.
- = if opt_PIC
- then return ( ["-no-cpp-precomp", "-fno-common"],
- ["-fno-common"] )
- else return ( ["-no-cpp-precomp", "-mdynamic-no-pic"],
- ["-mdynamic-no-pic"] )
-
-#elif powerpc_TARGET_ARCH
- | opt_PIC
- = return ( ["-fPIC"], ["-fPIC"] )
- | otherwise
- = return ( [], [] )
+ | opt_PIC
+ = return ["-fno-common"]
+ | otherwise
+ = return ["-mdynamic-no-pic"]
+#elif mingw32_TARGET_OS
+ -- no -fPIC for Windows
+ = return []
+#else
+ | opt_PIC
+ = return ["-fPIC"]
+ | otherwise
+ = return []
#endif
-----------------------------------------------------------------------------