{-# LINE 1 "src/LLVM/FFI/TargetMachine.hsc" #-} {-# LANGUAGE Safe #-} {-# LANGUAGE ForeignFunctionInterface #-} {-# LANGUAGE EmptyDataDecls #-} {-# LANGUAGE DeriveDataTypeable #-} module LLVM.FFI.TargetMachine where import qualified LLVM.FFI.Core as LLVM import LLVM.FFI.Target (TargetDataRef) import LLVM.FFI.Core (ModuleRef, PassManagerRef, MemoryBufferRef) import qualified Foreign.C.Types as C import Foreign.C.String (CString) import Foreign.Ptr (Ptr) import Data.Typeable (Typeable) import Data.Word (Word32) type CUInt = C.CUInt type CInt = C.CInt type Triple = CString type ErrorMessage = CString newtype CodeGenOptLevel = CodeGenOptLevel (Word32) {-# LINE 30 "src/LLVM/FFI/TargetMachine.hsc" #-} deriving (Eq) codeGenLevelNone, codeGenLevelLess :: CodeGenOptLevel codeGenLevelDefault, codeGenLevelAggressive :: CodeGenOptLevel codeGenLevelNone :: CodeGenOptLevel codeGenLevelNone = Word32 -> CodeGenOptLevel CodeGenOptLevel (Word32 0) {-# LINE 35 "src/LLVM/FFI/TargetMachine.hsc" #-} codeGenLevelLess = CodeGenOptLevel (1) {-# LINE 36 "src/LLVM/FFI/TargetMachine.hsc" #-} codeGenLevelDefault = CodeGenOptLevel (2) {-# LINE 37 "src/LLVM/FFI/TargetMachine.hsc" #-} codeGenLevelAggressive = CodeGenOptLevel (3) {-# LINE 38 "src/LLVM/FFI/TargetMachine.hsc" #-} newtype RelocMode = RelocMode (Word32) {-# LINE 40 "src/LLVM/FFI/TargetMachine.hsc" #-} deriving (Eq) relocDefault :: RelocMode relocStatic :: RelocMode relocPIC :: RelocMode relocDynamicNoPic :: RelocMode relocROPI :: RelocMode relocRWPI :: RelocMode relocROPI_RWPI :: RelocMode relocDefault :: RelocMode relocDefault = Word32 -> RelocMode RelocMode (Word32 0) {-# LINE 51 "src/LLVM/FFI/TargetMachine.hsc" #-} relocStatic = RelocMode (1) relocPIC :: RelocMode {-# LINE 52 "src/LLVM/FFI/TargetMachine.hsc" #-} relocPIC = RelocMode (2) {-# LINE 53 "src/LLVM/FFI/TargetMachine.hsc" #-} relocDynamicNoPic = RelocMode (3) {-# LINE 54 "src/LLVM/FFI/TargetMachine.hsc" #-} relocROPI = RelocMode (4) {-# LINE 55 "src/LLVM/FFI/TargetMachine.hsc" #-} relocRWPI = RelocMode (5) {-# LINE 56 "src/LLVM/FFI/TargetMachine.hsc" #-} relocROPI_RWPI = RelocMode (6) {-# LINE 57 "src/LLVM/FFI/TargetMachine.hsc" #-} newtype CodeModel = CodeModel (Word32) {-# LINE 59 "src/LLVM/FFI/TargetMachine.hsc" #-} deriving (Eq) codeModelDefault :: CodeModel codeModelJITDefault :: CodeModel codeModelTiny :: CodeModel codeModelSmall :: CodeModel codeModelKernel :: CodeModel codeModelMedium :: CodeModel codeModelLarge :: CodeModel codeModelDefault :: CodeModel codeModelDefault = Word32 -> CodeModel CodeModel (Word32 0) {-# LINE 70 "src/LLVM/FFI/TargetMachine.hsc" #-} codeModelJITDefault = CodeModel (1) {-# LINE 71 "src/LLVM/FFI/TargetMachine.hsc" #-} codeModelTiny = CodeModel (2) {-# LINE 72 "src/LLVM/FFI/TargetMachine.hsc" #-} codeModelSmall = CodeModel (3) {-# LINE 73 "src/LLVM/FFI/TargetMachine.hsc" #-} codeModelKernel = CodeModel (4) {-# LINE 74 "src/LLVM/FFI/TargetMachine.hsc" #-} codeModelMedium = CodeModel (5) {-# LINE 75 "src/LLVM/FFI/TargetMachine.hsc" #-} codeModelLarge = CodeModel (6) {-# LINE 76 "src/LLVM/FFI/TargetMachine.hsc" #-} newtype CodeGenFileType = CodeGenFileType (Word32) {-# LINE 78 "src/LLVM/FFI/TargetMachine.hsc" #-} deriving (Eq) assemblyFile, objectFile :: CodeGenFileType assemblyFile :: CodeGenFileType assemblyFile = Word32 -> CodeGenFileType CodeGenFileType (Word32 0) {-# LINE 82 "src/LLVM/FFI/TargetMachine.hsc" #-} objectFile = CodeGenFileType (1) {-# LINE 83 "src/LLVM/FFI/TargetMachine.hsc" #-} data TargetMachine deriving (Typeable) type TargetMachineRef = Ptr TargetMachine data Target deriving (Typeable) type TargetRef = Ptr Target foreign import ccall unsafe "LLVMGetFirstTarget" getFirstTarget :: IO TargetRef foreign import ccall unsafe "LLVMGetNextTarget" getNextTarget :: TargetRef -> IO TargetRef foreign import ccall unsafe "LLVMGetTargetFromName" getTargetFromName :: CString -> IO TargetRef foreign import ccall unsafe "LLVMGetTargetFromTriple" getTargetFromTriple :: Triple -> (Ptr TargetRef) -> (Ptr CString) -> IO LLVM.Bool foreign import ccall unsafe "LLVMGetTargetName" getTargetName :: TargetRef -> IO CString foreign import ccall unsafe "LLVMGetTargetDescription" getTargetDescription :: TargetRef -> IO CString foreign import ccall unsafe "LLVMTargetHasJIT" targetHasJIT :: TargetRef -> IO LLVM.Bool foreign import ccall unsafe "LLVMTargetHasTargetMachine" targetHasTargetMachine :: TargetRef -> IO LLVM.Bool foreign import ccall unsafe "LLVMTargetHasAsmBackend" targetHasAsmBackend :: TargetRef -> IO LLVM.Bool foreign import ccall unsafe "LLVMCreateTargetMachine" createTargetMachine :: TargetRef -> CString -> CString -> CString -> CodeGenOptLevel -> RelocMode -> CodeModel -> IO TargetMachineRef foreign import ccall unsafe "LLVMDisposeTargetMachine" disposeTargetMachine :: TargetMachineRef -> IO () foreign import ccall unsafe "LLVMGetTargetMachineTarget" getTargetMachineTarget :: TargetMachineRef -> IO TargetRef foreign import ccall unsafe "LLVMGetTargetMachineTriple" getTargetMachineTriple :: TargetMachineRef -> IO Triple foreign import ccall unsafe "LLVMGetTargetMachineCPU" getTargetMachineCPU :: TargetMachineRef -> IO CString foreign import ccall unsafe "LLVMGetTargetMachineFeatureString" getTargetMachineFeatureString :: TargetMachineRef -> IO CString foreign import ccall unsafe "LLVMCreateTargetDataLayout" createTargetDataLayout :: TargetMachineRef -> IO TargetDataRef foreign import ccall unsafe "LLVMSetTargetMachineAsmVerbosity" setTargetMachineAsmVerbosity :: TargetMachineRef -> LLVM.Bool -> IO () foreign import ccall unsafe "LLVMTargetMachineEmitToFile" targetMachineEmitToFile :: TargetMachineRef -> ModuleRef -> CString -> CodeGenFileType -> Ptr ErrorMessage -> IO LLVM.Bool foreign import ccall unsafe "LLVMTargetMachineEmitToMemoryBuffer" targetMachineEmitToMemoryBuffer :: TargetMachineRef -> ModuleRef -> CodeGenFileType -> Ptr ErrorMessage -> (Ptr MemoryBufferRef) -> IO LLVM.Bool foreign import ccall unsafe "LLVMGetDefaultTargetTriple" getDefaultTargetTriple :: IO Triple foreign import ccall unsafe "LLVMNormalizeTargetTriple" normalizeTargetTriple :: Triple -> IO CString foreign import ccall unsafe "LLVMGetHostCPUName" getHostCPUName :: IO CString foreign import ccall unsafe "LLVMGetHostCPUFeatures" getHostCPUFeatures :: IO CString foreign import ccall unsafe "LLVMAddAnalysisPasses" addAnalysisPasses :: TargetMachineRef -> PassManagerRef -> IO ()