packages feed

llvm-base-3.2.0.1: LLVM/FFI/Linker.hsc

{-# LANGUAGE CPP, ForeignFunctionInterface #-}

module LLVM.FFI.Linker where
import LLVM.FFI.Core
import Foreign.C.String(CString)
import Foreign.C.Types(CUInt(..), CInt(..))
import Foreign.Ptr(Ptr)

#include <llvm-c/Linker.h>

data LinkerMode = DestroySource | PreserveSource
                  deriving (Show, Eq)

fromLinkerMode :: LinkerMode -> CUInt
fromLinkerMode DestroySource = (#const LLVMLinkerDestroySource)
fromLinkerMode PreserveSource = (#const LLVMLinkerDestroySource)

toLinkerMode :: CUInt -> LinkerMode
toLinkerMode c | c == (#const LLVMLinkerDestroySource) = DestroySource
toLinkerMode c | c == (#const LLVMLinkerPreserveSource) = PreserveSource
toLinkerMode c = error $ "LLVM.FFI.Linker.toLinkerMode: unrecognized linker mode" ++ show c

foreign import ccall unsafe "LLVMLinkModules" linkModules
    :: ModuleRef -> ModuleRef -> CUInt -> Ptr CString -> IO CInt