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