sig
  exception Error of string
  module GenericValue :
    sig
      type t
      external of_float :
        Llvm.lltype -> float -> Llvm_executionengine.GenericValue.t
        = "llvm_genericvalue_of_float"
      external of_pointer : '-> Llvm_executionengine.GenericValue.t
        = "llvm_genericvalue_of_pointer"
      external of_int32 :
        Llvm.lltype -> int32 -> Llvm_executionengine.GenericValue.t
        = "llvm_genericvalue_of_int32"
      external of_int :
        Llvm.lltype -> int -> Llvm_executionengine.GenericValue.t
        = "llvm_genericvalue_of_int"
      external of_nativeint :
        Llvm.lltype -> nativeint -> Llvm_executionengine.GenericValue.t
        = "llvm_genericvalue_of_nativeint"
      external of_int64 :
        Llvm.lltype -> int64 -> Llvm_executionengine.GenericValue.t
        = "llvm_genericvalue_of_int64"
      external as_float :
        Llvm.lltype -> Llvm_executionengine.GenericValue.t -> float
        = "llvm_genericvalue_as_float"
      external as_pointer : Llvm_executionengine.GenericValue.t -> 'a
        = "llvm_genericvalue_as_pointer"
      external as_int32 : Llvm_executionengine.GenericValue.t -> int32
        = "llvm_genericvalue_as_int32"
      external as_int : Llvm_executionengine.GenericValue.t -> int
        = "llvm_genericvalue_as_int"
      external as_nativeint :
        Llvm_executionengine.GenericValue.t -> nativeint
        = "llvm_genericvalue_as_nativeint"
      external as_int64 : Llvm_executionengine.GenericValue.t -> int64
        = "llvm_genericvalue_as_int64"
    end
  module ExecutionEngine :
    sig
      type t
      external create :
        Llvm.llmodule -> Llvm_executionengine.ExecutionEngine.t
        = "llvm_ee_create"
      external create_interpreter :
        Llvm.llmodule -> Llvm_executionengine.ExecutionEngine.t
        = "llvm_ee_create_interpreter"
      external create_jit :
        Llvm.llmodule -> int -> Llvm_executionengine.ExecutionEngine.t
        = "llvm_ee_create_jit"
      external dispose : Llvm_executionengine.ExecutionEngine.t -> unit
        = "llvm_ee_dispose"
      external add_module :
        Llvm.llmodule -> Llvm_executionengine.ExecutionEngine.t -> unit
        = "llvm_ee_add_module"
      external remove_module :
        Llvm.llmodule ->
        Llvm_executionengine.ExecutionEngine.t -> Llvm.llmodule
        = "llvm_ee_remove_module"
      external find_function :
        string ->
        Llvm_executionengine.ExecutionEngine.t -> Llvm.llvalue option
        = "llvm_ee_find_function"
      external run_function :
        Llvm.llvalue ->
        Llvm_executionengine.GenericValue.t array ->
        Llvm_executionengine.ExecutionEngine.t ->
        Llvm_executionengine.GenericValue.t = "llvm_ee_run_function"
      external run_static_ctors :
        Llvm_executionengine.ExecutionEngine.t -> unit
        = "llvm_ee_run_static_ctors"
      external run_static_dtors :
        Llvm_executionengine.ExecutionEngine.t -> unit
        = "llvm_ee_run_static_dtors"
      external run_function_as_main :
        Llvm.llvalue ->
        string array ->
        (string * string) array ->
        Llvm_executionengine.ExecutionEngine.t -> int
        = "llvm_ee_run_function_as_main"
      external free_machine_code :
        Llvm.llvalue -> Llvm_executionengine.ExecutionEngine.t -> unit
        = "llvm_ee_free_machine_code"
      external target_data :
        Llvm_executionengine.ExecutionEngine.t -> Llvm_target.TargetData.t
        = "LLVMGetExecutionEngineTargetData"
    end
  external initialize_native_target : unit -> bool
    = "llvm_initialize_native_target"
end