{-# LANGUAGE Safe #-} {-# LANGUAGE ForeignFunctionInterface #-} {-# LANGUAGE EmptyDataDecls #-} {-# LANGUAGE DeriveDataTypeable #-} module LLVM.FFI.Support.Host ( getHostCPUName, getHostFeatures, freeFeatures, getFirstFeature, getNextFeature, getFeatureName, getFeatureSupport, ) where import qualified LLVM.FFI.Core as LLVM import qualified Foreign.C.Types as C import Foreign.C.String (CString) import Foreign.Ptr (Ptr) import Data.Typeable (Typeable) foreign import ccall unsafe "LLVMGetHostCPUName" getHostCPUName :: Ptr C.CSize -> IO CString data FeatureMap deriving (Typeable) type FeatureMapRef = Ptr FeatureMap data FeatureIterator deriving (Typeable) type FeatureIteratorRef = Ptr FeatureIterator foreign import ccall unsafe "LLVMGetHostFeatures" getHostFeatures :: IO FeatureMapRef foreign import ccall unsafe "LLVMFreeFeatures" freeFeatures :: FeatureMapRef -> IO () foreign import ccall unsafe "LLVMGetFirstFeature" getFirstFeature :: FeatureMapRef -> IO FeatureIteratorRef foreign import ccall unsafe "LLVMGetNextFeature" getNextFeature :: FeatureMapRef -> FeatureIteratorRef -> IO FeatureIteratorRef foreign import ccall unsafe "LLVMGetFeatureName" getFeatureName :: FeatureIteratorRef -> IO CString foreign import ccall unsafe "LLVMGetFeatureSupport" getFeatureSupport :: FeatureIteratorRef -> IO LLVM.Bool