#include "HsVersions.h"
#ifndef OMIT_NATIVE_CODEGEN
-import UniqSupply ( mkSplitUniqSupply )
import AsmCodeGen ( nativeCodeGen )
#endif
+import LlvmCodeGen ( llvmCodeGen )
+
+import UniqSupply ( mkSplitUniqSupply )
#ifdef JAVA
import JavaGen ( javaGen )
import Cmm ( RawCmm )
import HscTypes
import DynFlags
+import Config
import ErrUtils ( dumpIfSet_dyn, showPass, ghcExit )
import Outputable
import Module
import Maybes ( firstJust )
-import Distribution.Text
-import Directory ( doesFileExist )
-import Monad ( when )
-import IO
+import Control.Exception
+import Control.Monad
+import System.Directory
import System.FilePath
+import System.IO
\end{code}
%************************************************************************
HscInterpreted -> return ();
HscAsm -> outputAsm dflags filenm flat_abstractC;
HscC -> outputC dflags filenm flat_abstractC pkg_deps;
+ HscLlvm -> outputLlvm dflags filenm flat_abstractC;
HscJava ->
#ifdef JAVA
outputJava dflags filenm mod_name tycons core_binds;
_ -> "#include \""++h_file++"\""
pkg_configs <- getPreloadPackagesAnd dflags packages
- let pkg_names = map (display.package) pkg_configs
+ let pkg_names = map (display.sourcePackageId) pkg_configs
doOutput filenm $ \ h -> do
hPutStr h ("/* GHC_PACKAGES " ++ unwords pkg_names ++ "\n*/\n")
\begin{code}
outputAsm :: DynFlags -> FilePath -> [RawCmm] -> IO ()
-outputAsm dflags filenm flat_absC
#ifndef OMIT_NATIVE_CODEGEN
+outputAsm dflags filenm flat_absC
= do ncg_uniqs <- mkSplitUniqSupply 'n'
{-# SCC "OutputAsm" #-} doOutput filenm $
#else /* OMIT_NATIVE_CODEGEN */
+outputAsm _ _ _
= pprPanic "This compiler was built without a native code generator"
(text "Use -fvia-C instead")
%************************************************************************
%* *
+\subsection{LLVM}
+%* *
+%************************************************************************
+
+\begin{code}
+outputLlvm :: DynFlags -> FilePath -> [RawCmm] -> IO ()
+outputLlvm dflags filenm flat_absC
+ = do ncg_uniqs <- mkSplitUniqSupply 'n'
+ doOutput filenm $ \f -> llvmCodeGen dflags f ncg_uniqs flat_absC
+\end{code}
+
+
+%************************************************************************
+%* *
\subsection{Java}
%* *
%************************************************************************
concatMap mk_include (includes rts_pkg)
mk_include i = "#include \"" ++ i ++ "\"\n"
+ -- wrapper code mentions the ffi_arg type, which comes from ffi.h
+ ffi_includes | cLibFFI = "#include \"ffi.h\"\n"
+ | otherwise = ""
+
stub_h_file_exists
<- outputForeignStubs_help stub_h stub_h_output_w
("#include \"HsFFI.h\"\n" ++ cplusplus_hdr) cplusplus_ftr
("#define IN_STG_CODE 0\n" ++
"#include \"Rts.h\"\n" ++
rts_includes ++
+ ffi_includes ++
cplusplus_hdr)
cplusplus_ftr
-- We're adding the default hc_header to the stub file, but this