X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2Fmain%2FDriverPipeline.hs;h=046e21ce5e2ebaf13117a6adad190e47c0ac4754;hp=7dc9e14b51b7dc221802efd78d60c7cf1c114585;hb=df1fecb95e3a0cf901184605da96dc8ae092b173;hpb=f1a72b2938cc289c9a3879301ab445ec9efd63dd diff --git a/compiler/main/DriverPipeline.hs b/compiler/main/DriverPipeline.hs index 7dc9e14..046e21c 100644 --- a/compiler/main/DriverPipeline.hs +++ b/compiler/main/DriverPipeline.hs @@ -48,6 +48,7 @@ import Maybes ( expectJust ) import ParserCoreUtils ( getCoreModuleName ) import SrcLoc import FastString +import LlvmCodeGen ( llvmFixupAsm ) -- import MonadUtils -- import Data.Either @@ -1268,8 +1269,13 @@ runPhase LlvmLlc _stop hsc_env _basename _suff input_fn get_output_fn maybe_loc let dflags = hsc_dflags hsc_env let lc_opts = getOpts dflags opt_lc let opt_lvl = max 0 (min 2 $ optLevel dflags) +#if darwin_TARGET_OS + let nphase = LlvmMangle +#else + let nphase = As +#endif - output_fn <- get_output_fn dflags As maybe_loc + output_fn <- get_output_fn dflags nphase maybe_loc SysTools.runLlvmLlc dflags (map SysTools.Option lc_opts @@ -1278,11 +1284,22 @@ runPhase LlvmLlc _stop hsc_env _basename _suff input_fn get_output_fn maybe_loc SysTools.FileOption "" input_fn, SysTools.Option "-o", SysTools.FileOption "" output_fn]) - return (As, dflags, maybe_loc, output_fn) + return (nphase, dflags, maybe_loc, output_fn) where llvmOpts = ["-O1", "-O2", "-O3"] +----------------------------------------------------------------------------- +-- LlvmMangle phase + +runPhase LlvmMangle _stop hsc_env _basename _suff input_fn get_output_fn maybe_loc + = liftIO $ do + let dflags = hsc_dflags hsc_env + output_fn <- get_output_fn dflags As maybe_loc + llvmFixupAsm input_fn output_fn + return (As, dflags, maybe_loc, output_fn) + + -- warning suppression runPhase other _stop _dflags _basename _suff _input_fn _get_output_fn _maybe_loc = panic ("runPhase: don't know how to run phase " ++ show other) @@ -1328,12 +1345,14 @@ runPhase_MoveBinary dflags input_fn dep_packages let behaviour' = concatMap (\x -> if x=='\\' then "\\\\" else [x]) behaviour renameFile input_fn wrapped_executable let rtsDetails = (getPackageDetails (pkgState dflags) rtsPackageId); + (md_c_flags, _) = machdepCCOpts dflags SysTools.runCc dflags ([ SysTools.FileOption "" ((head (libraryDirs rtsDetails)) ++ "/dyn-wrapper.c") , SysTools.Option ("-DBEHAVIOUR=\"" ++ behaviour' ++ "\"") , SysTools.Option "-o" - , SysTools.FileOption "" input_fn - ] ++ map (SysTools.FileOption "-I") (includeDirs rtsDetails)) + , SysTools.FileOption "" input_fn] ++ + map (SysTools.FileOption "-I") (includeDirs rtsDetails) ++ + map Option md_c_flags) return True _ -> return True | otherwise = return True @@ -1842,9 +1861,9 @@ doCpp dflags raw include_cc_opts input_fn output_fn = do cpp_prog ([SysTools.Option verb] ++ map SysTools.Option include_paths ++ map SysTools.Option hsSourceCppOpts + ++ map SysTools.Option target_defs ++ map SysTools.Option hscpp_opts ++ map SysTools.Option cc_opts - ++ map SysTools.Option target_defs ++ [ SysTools.Option "-x" , SysTools.Option "c" , SysTools.Option input_fn