llvm-hs-6.1.0: src/LLVM/Internal/ObjectFile.hs
module LLVM.Internal.ObjectFile where
import Control.Monad.IO.Class
import Control.Monad.AnyCont
import Foreign.Ptr
import LLVM.Prelude
import LLVM.Internal.Coding
import LLVM.Internal.MemoryBuffer
import qualified LLVM.Internal.FFI.ObjectFile as FFI
newtype ObjectFile = ObjectFile (Ptr FFI.ObjectFile)
-- | Dispose of an 'ObjectFile'.
disposeObjectFile :: ObjectFile -> IO ()
disposeObjectFile (ObjectFile obj) = FFI.disposeObjectFile obj
-- | Create a object file which can later be linked with the
-- 'LLVM.Internal.OrcJIT.LinkingLayer'.
--
-- Note that the file at `path` should already be a compiled object file i.e a
-- `.o` file. This does *not* compile source files.
createObjectFile :: FilePath -> IO ObjectFile
createObjectFile path = flip runAnyContT return $ do
buf <- encodeM (File path)
obj <- liftIO $ FFI.createObjectFile buf
when (obj == nullPtr) $ error "LLVMCreateObjectFile returned a null pointer."
return (ObjectFile obj)