packages feed

llvm-ffi-17.0: example/Host.hs

{- |
This program shows some interesting facts about the host machine.
-}
module Main where

import Common (getString, createExecutionEngine)

import qualified LLVM.FFI.ExecutionEngine as EE
import qualified LLVM.FFI.TargetMachine as TargetMachine
import qualified LLVM.FFI.Target as Target
import qualified LLVM.FFI.Core as LLVM
import qualified LLVM.Target.Native as Native

import Foreign.C.String (withCString)

import Control.Exception (bracket)


main :: IO ()
main = do
   Native.initializeNativeTarget

   putStrLn =<< getString TargetMachine.getHostCPUName
   putStrLn LLVM.hostTriple

   modul <- withCString "host" LLVM.moduleCreateWithName
   withCString LLVM.hostTriple $ LLVM.setTarget modul
   bracket (createExecutionEngine modul) EE.disposeExecutionEngine $
         \execEngine -> do
      td <- EE.getExecutionEngineTargetData execEngine
      putStrLn =<< getString (Target.copyStringRepOfTargetData td)