content: {-# LANGUAGE
    ForeignFunctionInterface,
    GeneralizedNewtypeDeriving
    #-}
  module LLVM.Internal.FFI.Target where
  
  import LLVM.Prelude
  
  import Foreign.Ptr
  import Foreign.C
  
  import LLVM.Internal.FFI.DataLayout
  import LLVM.Internal.FFI.LLVMCTypes
  import LLVM.Internal.FFI.MemoryBuffer
  import LLVM.Internal.FFI.Module
  import LLVM.Internal.FFI.PtrHierarchy
  
  data Target
  
  foreign import ccall unsafe "LLVM_Hs_InitializeNativeTarget" initializeNativeTarget ::
      IO LLVMBool
  
  foreign import ccall unsafe "LLVM_Hs_LookupTarget" lookupTarget ::
      CString -> CString -> Ptr (OwnerTransfered CString) -> Ptr (OwnerTransfered CString) -> IO (Ptr Target)
  
  data TargetOptions
  data MCTargetOptions
  
  foreign import ccall unsafe "LLVM_Hs_CreateTargetOptions" createTargetOptions ::
    IO (Ptr TargetOptions)
  
  foreign import ccall unsafe "LLVM_Hs_SetTargetOptionFlag" setTargetOptionFlag ::
    Ptr TargetOptions -> TargetOptionFlag -> LLVMBool -> IO ()
  
  foreign import ccall unsafe "LLVM_Hs_GetTargetOptionFlag" getTargetOptionsFlag ::
    Ptr TargetOptions -> TargetOptionFlag -> IO LLVMBool
  
  foreign import ccall unsafe "LLVM_Hs_SetMCTargetOptionFlag" setMCTargetOptionFlag ::
    Ptr MCTargetOptions -> MCTargetOptionFlag -> LLVMBool -> IO ()
  
  foreign import ccall unsafe "LLVM_Hs_GetMCTargetOptionFlag" getMCTargetOptionsFlag ::
    Ptr MCTargetOptions -> MCTargetOptionFlag -> IO LLVMBool
  
  foreign import ccall unsafe "LLVM_Hs_GetCompressDebugSections" getCompressDebugSections ::
    Ptr TargetOptions -> IO DebugCompressionType
  
  foreign import ccall unsafe "LLVM_Hs_SetCompressDebugSections" setCompressDebugSections ::
    Ptr TargetOptions -> DebugCompressionType -> IO ()
  
  foreign import ccall unsafe "LLVM_Hs_SetStackAlignmentOverride" setStackAlignmentOverride ::
    Ptr TargetOptions -> CUInt -> IO ()
  
  foreign import ccall unsafe "LLVM_Hs_GetStackAlignmentOverride" getStackAlignmentOverride ::
    Ptr TargetOptions -> IO CUInt
  
  foreign import ccall unsafe "LLVM_Hs_SetFloatABIType" setFloatABIType ::
    Ptr TargetOptions -> FloatABIType -> IO ()
  
  foreign import ccall unsafe "LLVM_Hs_GetFloatABIType" getFloatABIType ::
    Ptr TargetOptions -> IO FloatABIType
  
  foreign import ccall unsafe "LLVM_Hs_SetAllowFPOpFusion" setAllowFPOpFusion ::
    Ptr TargetOptions -> FPOpFusionMode -> IO ()
  
  foreign import ccall unsafe "LLVM_Hs_GetAllowFPOpFusion" getAllowFPOpFusion ::
    Ptr TargetOptions -> IO FPOpFusionMode
  
  foreign import ccall unsafe "LLVM_Hs_SetThreadModel" setThreadModel ::
    Ptr TargetOptions -> ThreadModel -> IO ()
  
  foreign import ccall unsafe "LLVM_Hs_GetThreadModel" getThreadModel ::
    Ptr TargetOptions -> IO ThreadModel
  
  foreign import ccall unsafe "LLVM_Hs_SetEABIVersion" setEABIVersion ::
    Ptr TargetOptions -> EABI -> IO ()
  
  foreign import ccall unsafe "LLVM_Hs_GetEABIVersion" getEABIVersion ::
    Ptr TargetOptions -> IO EABI
  
  foreign import ccall unsafe "LLVM_Hs_SetDebuggerTuning" setDebuggerTuning ::
    Ptr TargetOptions -> DebuggerKind -> IO ()
  
  foreign import ccall unsafe "LLVM_Hs_GetDebuggerTuning" getDebuggerTuning ::
    Ptr TargetOptions -> IO DebuggerKind
  
  foreign import ccall unsafe "LLVM_Hs_SetFPDenormalMode" setFPDenormalMode ::
    Ptr TargetOptions -> FPDenormalMode -> IO ()
  
  foreign import ccall unsafe "LLVM_Hs_GetFPDenormalMode" getFPDenormalMode ::
    Ptr TargetOptions -> IO FPDenormalMode
  
  foreign import ccall unsafe "LLVM_Hs_SetExceptionModel" setExceptionModel ::
    Ptr TargetOptions -> ExceptionHandling -> IO ()
  
  foreign import ccall unsafe "LLVM_Hs_GetExceptionModel" getExceptionModel ::
    Ptr TargetOptions -> IO ExceptionHandling
  
  foreign import ccall unsafe "LLVM_Hs_DisposeTargetOptions" disposeTargetOptions ::
    Ptr TargetOptions -> IO ()
  
  data TargetMachine
  
  foreign import ccall unsafe "LLVM_Hs_CreateTargetMachine" createTargetMachine ::
    Ptr Target
    -> CString
    -> CString
    -> CString
    -> Ptr TargetOptions
    -> RelocModel
    -> CodeModel
    -> CodeGenOptLevel
    -> IO (Ptr TargetMachine)
  
  foreign import ccall unsafe "LLVMDisposeTargetMachine" disposeTargetMachine ::
    Ptr TargetMachine -> IO ()
  
  foreign import ccall unsafe "LLVM_Hs_TargetMachineOptions" targetMachineOptions ::
    Ptr TargetMachine -> IO (Ptr TargetOptions)
  
  foreign import ccall unsafe "LLVM_Hs_MCTargetOptions" machineCodeOptions ::
    Ptr TargetOptions -> IO (Ptr MCTargetOptions)
  
  foreign import ccall unsafe "LLVM_Hs_TargetMachineEmit" targetMachineEmit ::
    Ptr TargetMachine
    -> Ptr Module
    -> Ptr RawPWriteStream
    -> CodeGenFileType
    -> Ptr (OwnerTransfered CString)
    -> IO LLVMBool
  
  foreign import ccall unsafe "LLVMTargetMachineEmitToFile" targetMachineEmitToFile ::
    Ptr TargetMachine
    -> Ptr Module
    -> CString
    -> CodeGenFileType
    -> Ptr (OwnerTransfered CString)
    -> IO LLVMBool
  
  foreign import ccall unsafe "LLVMTargetMachineEmitToMemoryBuffer" targetMachineEmitToMemoryBuffer ::
    Ptr TargetMachine
    -> Ptr Module
    -> CodeGenFileType
    -> Ptr (OwnerTransfered CString)
    -> Ptr (Ptr MemoryBuffer)
    -> IO LLVMBool
  
  data TargetLowering
  
  -- foreign import ccall unsafe "LLVM_Hs_GetTargetLowering" getTargetLowering ::
  --   Ptr TargetMachine -> IO (Ptr TargetLowering)
  
  foreign import ccall unsafe "LLVMGetTargetMachineTriple" getTargetMachineTriple ::
    Ptr TargetMachine -> IO (OwnerTransfered CString)
  
  foreign import ccall unsafe "LLVM_Hs_GetDefaultTargetTriple" getDefaultTargetTriple :: 
    IO (OwnerTransfered CString)
  
  foreign import ccall unsafe "LLVM_Hs_GetProcessTargetTriple" getProcessTargetTriple :: 
    IO (OwnerTransfered CString)
  
  foreign import ccall unsafe "LLVM_Hs_GetHostCPUName" getHostCPUName :: 
    Ptr CSize -> IO CString
  
  foreign import ccall unsafe "LLVM_Hs_GetHostCPUFeatures" getHostCPUFeatures ::
    IO (OwnerTransfered CString)
  
  foreign import ccall unsafe "LLVM_Hs_GetTargetMachineDataLayout" getTargetMachineDataLayout ::
    Ptr TargetMachine -> IO (OwnerTransfered CString)
  
  data TargetLibraryInfo
  
  foreign import ccall unsafe "LLVM_Hs_CreateTargetLibraryInfo" createTargetLibraryInfo ::
    CString -> IO (Ptr TargetLibraryInfo)
  
  foreign import ccall unsafe "LLVM_Hs_GetLibFunc" getLibFunc ::
    Ptr TargetLibraryInfo -> CString -> Ptr LibFunc -> IO LLVMBool
  
  foreign import ccall unsafe "LLVM_Hs_LibFuncGetName" libFuncGetName ::
    Ptr TargetLibraryInfo -> LibFunc -> Ptr CSize -> IO CString
  
  foreign import ccall unsafe "LLVM_Hs_LibFuncSetAvailableWithName" libFuncSetAvailableWithName ::
    Ptr TargetLibraryInfo -> LibFunc -> CString -> IO ()
  
  foreign import ccall unsafe "LLVM_Hs_DisposeTargetLibraryInfo" disposeTargetLibraryInfo ::
    Ptr TargetLibraryInfo -> IO ()
  
  foreign import ccall unsafe "LLVM_Hs_InitializeAllTargets" initializeAllTargets :: IO ()
  
  foreign import ccall unsafe "LLVMCreateTargetDataLayout" createTargetDataLayout ::
    Ptr TargetMachine -> IO (Ptr DataLayout)
  