sig
  module Endian : sig type t = Big | Little end
  module CodeGenOptLevel :
    sig type t = None | Less | Default | Aggressive end
  module RelocMode : sig type t = Default | Static | PIC | DynamicNoPIC end
  module CodeModel :
    sig type t = Default | JITDefault | Small | Kernel | Medium | Large end
  module CodeGenFileType : sig type t = AssemblyFile | ObjectFile end
  exception Error of string
  module DataLayout :
    sig
      type t
      val of_string : string -> Llvm_target.DataLayout.t
      val as_string : Llvm_target.DataLayout.t -> string
      val add_to_pass_manager :
        [< Llvm.PassManager.any ] Llvm.PassManager.t ->
        Llvm_target.DataLayout.t -> unit
      val byte_order : Llvm_target.DataLayout.t -> Llvm_target.Endian.t
      val pointer_size : Llvm_target.DataLayout.t -> int
      val intptr_type :
        Llvm.llcontext -> Llvm_target.DataLayout.t -> Llvm.lltype
      val qualified_pointer_size : int -> Llvm_target.DataLayout.t -> int
      val qualified_intptr_type :
        Llvm.llcontext -> int -> Llvm_target.DataLayout.t -> Llvm.lltype
      val size_in_bits : Llvm.lltype -> Llvm_target.DataLayout.t -> Int64.t
      val store_size : Llvm.lltype -> Llvm_target.DataLayout.t -> Int64.t
      val abi_size : Llvm.lltype -> Llvm_target.DataLayout.t -> Int64.t
      val abi_align : Llvm.lltype -> Llvm_target.DataLayout.t -> int
      val stack_align : Llvm.lltype -> Llvm_target.DataLayout.t -> int
      val preferred_align : Llvm.lltype -> Llvm_target.DataLayout.t -> int
      val preferred_align_of_global :
        Llvm.llvalue -> Llvm_target.DataLayout.t -> int
      val element_at_offset :
        Llvm.lltype -> Int64.t -> Llvm_target.DataLayout.t -> int
      val offset_of_element :
        Llvm.lltype -> int -> Llvm_target.DataLayout.t -> Int64.t
    end
  module Target :
    sig
      type t
      val default_triple : unit -> string
      val first : unit -> Llvm_target.Target.t option
      val succ : Llvm_target.Target.t -> Llvm_target.Target.t option
      val all : unit -> Llvm_target.Target.t list
      val by_name : string -> Llvm_target.Target.t option
      val by_triple : string -> Llvm_target.Target.t
      val name : Llvm_target.Target.t -> string
      val description : Llvm_target.Target.t -> string
      val has_jit : Llvm_target.Target.t -> bool
      val has_target_machine : Llvm_target.Target.t -> bool
      val has_asm_backend : Llvm_target.Target.t -> bool
    end
  module TargetMachine :
    sig
      type t
      val create :
        triple:string ->
        ?cpu:string ->
        ?features:string ->
        ?level:Llvm_target.CodeGenOptLevel.t ->
        ?reloc_mode:Llvm_target.RelocMode.t ->
        ?code_model:Llvm_target.CodeModel.t ->
        Llvm_target.Target.t -> Llvm_target.TargetMachine.t
      val target : Llvm_target.TargetMachine.t -> Llvm_target.Target.t
      val triple : Llvm_target.TargetMachine.t -> string
      val cpu : Llvm_target.TargetMachine.t -> string
      val features : Llvm_target.TargetMachine.t -> string
      val data_layout :
        Llvm_target.TargetMachine.t -> Llvm_target.DataLayout.t
      val set_verbose_asm : bool -> Llvm_target.TargetMachine.t -> unit
      val emit_to_file :
        Llvm.llmodule ->
        Llvm_target.CodeGenFileType.t ->
        string -> Llvm_target.TargetMachine.t -> unit
      val emit_to_memory_buffer :
        Llvm.llmodule ->
        Llvm_target.CodeGenFileType.t ->
        Llvm_target.TargetMachine.t -> Llvm.llmemorybuffer
    end
end