xref: /aosp_15_r20/external/llvm/bindings/ocaml/target/llvm_target.ml (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker(*===-- llvm_target.ml - LLVM OCaml Interface ------------------*- OCaml -*-===*
2*9880d681SAndroid Build Coastguard Worker *
3*9880d681SAndroid Build Coastguard Worker *                     The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker *
5*9880d681SAndroid Build Coastguard Worker * This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker * License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker *
8*9880d681SAndroid Build Coastguard Worker *===----------------------------------------------------------------------===*)
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Workermodule Endian = struct
11*9880d681SAndroid Build Coastguard Worker  type t =
12*9880d681SAndroid Build Coastguard Worker  | Big
13*9880d681SAndroid Build Coastguard Worker  | Little
14*9880d681SAndroid Build Coastguard Workerend
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Workermodule CodeGenOptLevel = struct
17*9880d681SAndroid Build Coastguard Worker  type t =
18*9880d681SAndroid Build Coastguard Worker  | None
19*9880d681SAndroid Build Coastguard Worker  | Less
20*9880d681SAndroid Build Coastguard Worker  | Default
21*9880d681SAndroid Build Coastguard Worker  | Aggressive
22*9880d681SAndroid Build Coastguard Workerend
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Workermodule RelocMode = struct
25*9880d681SAndroid Build Coastguard Worker  type t =
26*9880d681SAndroid Build Coastguard Worker  | Default
27*9880d681SAndroid Build Coastguard Worker  | Static
28*9880d681SAndroid Build Coastguard Worker  | PIC
29*9880d681SAndroid Build Coastguard Worker  | DynamicNoPIC
30*9880d681SAndroid Build Coastguard Workerend
31*9880d681SAndroid Build Coastguard Worker
32*9880d681SAndroid Build Coastguard Workermodule CodeModel = struct
33*9880d681SAndroid Build Coastguard Worker  type t =
34*9880d681SAndroid Build Coastguard Worker  | Default
35*9880d681SAndroid Build Coastguard Worker  | JITDefault
36*9880d681SAndroid Build Coastguard Worker  | Small
37*9880d681SAndroid Build Coastguard Worker  | Kernel
38*9880d681SAndroid Build Coastguard Worker  | Medium
39*9880d681SAndroid Build Coastguard Worker  | Large
40*9880d681SAndroid Build Coastguard Workerend
41*9880d681SAndroid Build Coastguard Worker
42*9880d681SAndroid Build Coastguard Workermodule CodeGenFileType = struct
43*9880d681SAndroid Build Coastguard Worker  type t =
44*9880d681SAndroid Build Coastguard Worker  | AssemblyFile
45*9880d681SAndroid Build Coastguard Worker  | ObjectFile
46*9880d681SAndroid Build Coastguard Workerend
47*9880d681SAndroid Build Coastguard Worker
48*9880d681SAndroid Build Coastguard Workerexception Error of string
49*9880d681SAndroid Build Coastguard Worker
50*9880d681SAndroid Build Coastguard Workerlet () = Callback.register_exception "Llvm_target.Error" (Error "")
51*9880d681SAndroid Build Coastguard Worker
52*9880d681SAndroid Build Coastguard Workermodule DataLayout = struct
53*9880d681SAndroid Build Coastguard Worker  type t
54*9880d681SAndroid Build Coastguard Worker
55*9880d681SAndroid Build Coastguard Worker  external of_string : string -> t = "llvm_datalayout_of_string"
56*9880d681SAndroid Build Coastguard Worker  external as_string : t -> string = "llvm_datalayout_as_string"
57*9880d681SAndroid Build Coastguard Worker  external byte_order : t -> Endian.t = "llvm_datalayout_byte_order"
58*9880d681SAndroid Build Coastguard Worker  external pointer_size : t -> int = "llvm_datalayout_pointer_size"
59*9880d681SAndroid Build Coastguard Worker  external intptr_type : Llvm.llcontext -> t -> Llvm.lltype
60*9880d681SAndroid Build Coastguard Worker                       = "llvm_datalayout_intptr_type"
61*9880d681SAndroid Build Coastguard Worker  external qualified_pointer_size : int -> t -> int
62*9880d681SAndroid Build Coastguard Worker                                  = "llvm_datalayout_qualified_pointer_size"
63*9880d681SAndroid Build Coastguard Worker  external qualified_intptr_type : Llvm.llcontext -> int -> t -> Llvm.lltype
64*9880d681SAndroid Build Coastguard Worker                                 = "llvm_datalayout_qualified_intptr_type"
65*9880d681SAndroid Build Coastguard Worker  external size_in_bits : Llvm.lltype -> t -> Int64.t
66*9880d681SAndroid Build Coastguard Worker                        = "llvm_datalayout_size_in_bits"
67*9880d681SAndroid Build Coastguard Worker  external store_size : Llvm.lltype -> t -> Int64.t
68*9880d681SAndroid Build Coastguard Worker                      = "llvm_datalayout_store_size"
69*9880d681SAndroid Build Coastguard Worker  external abi_size : Llvm.lltype -> t -> Int64.t
70*9880d681SAndroid Build Coastguard Worker                    = "llvm_datalayout_abi_size"
71*9880d681SAndroid Build Coastguard Worker  external abi_align : Llvm.lltype -> t -> int
72*9880d681SAndroid Build Coastguard Worker                     = "llvm_datalayout_abi_align"
73*9880d681SAndroid Build Coastguard Worker  external stack_align : Llvm.lltype -> t -> int
74*9880d681SAndroid Build Coastguard Worker                       = "llvm_datalayout_stack_align"
75*9880d681SAndroid Build Coastguard Worker  external preferred_align : Llvm.lltype -> t -> int
76*9880d681SAndroid Build Coastguard Worker                           = "llvm_datalayout_preferred_align"
77*9880d681SAndroid Build Coastguard Worker  external preferred_align_of_global : Llvm.llvalue -> t -> int
78*9880d681SAndroid Build Coastguard Worker                                   = "llvm_datalayout_preferred_align_of_global"
79*9880d681SAndroid Build Coastguard Worker  external element_at_offset : Llvm.lltype -> Int64.t -> t -> int
80*9880d681SAndroid Build Coastguard Worker                             = "llvm_datalayout_element_at_offset"
81*9880d681SAndroid Build Coastguard Worker  external offset_of_element : Llvm.lltype -> int -> t -> Int64.t
82*9880d681SAndroid Build Coastguard Worker                             = "llvm_datalayout_offset_of_element"
83*9880d681SAndroid Build Coastguard Workerend
84*9880d681SAndroid Build Coastguard Worker
85*9880d681SAndroid Build Coastguard Workermodule Target = struct
86*9880d681SAndroid Build Coastguard Worker  type t
87*9880d681SAndroid Build Coastguard Worker
88*9880d681SAndroid Build Coastguard Worker  external default_triple : unit -> string = "llvm_target_default_triple"
89*9880d681SAndroid Build Coastguard Worker  external first : unit -> t option = "llvm_target_first"
90*9880d681SAndroid Build Coastguard Worker  external succ : t -> t option = "llvm_target_succ"
91*9880d681SAndroid Build Coastguard Worker  external by_name : string -> t option = "llvm_target_by_name"
92*9880d681SAndroid Build Coastguard Worker  external by_triple : string -> t = "llvm_target_by_triple"
93*9880d681SAndroid Build Coastguard Worker  external name : t -> string = "llvm_target_name"
94*9880d681SAndroid Build Coastguard Worker  external description : t -> string = "llvm_target_description"
95*9880d681SAndroid Build Coastguard Worker  external has_jit : t -> bool = "llvm_target_has_jit"
96*9880d681SAndroid Build Coastguard Worker  external has_target_machine : t -> bool = "llvm_target_has_target_machine"
97*9880d681SAndroid Build Coastguard Worker  external has_asm_backend : t -> bool = "llvm_target_has_asm_backend"
98*9880d681SAndroid Build Coastguard Worker
99*9880d681SAndroid Build Coastguard Worker  let all () =
100*9880d681SAndroid Build Coastguard Worker    let rec step elem lst =
101*9880d681SAndroid Build Coastguard Worker      match elem with
102*9880d681SAndroid Build Coastguard Worker      | Some target -> step (succ target) (target :: lst)
103*9880d681SAndroid Build Coastguard Worker      | None        -> lst
104*9880d681SAndroid Build Coastguard Worker    in
105*9880d681SAndroid Build Coastguard Worker    step (first ()) []
106*9880d681SAndroid Build Coastguard Workerend
107*9880d681SAndroid Build Coastguard Worker
108*9880d681SAndroid Build Coastguard Workermodule TargetMachine = struct
109*9880d681SAndroid Build Coastguard Worker  type t
110*9880d681SAndroid Build Coastguard Worker
111*9880d681SAndroid Build Coastguard Worker  external create : triple:string -> ?cpu:string -> ?features:string ->
112*9880d681SAndroid Build Coastguard Worker                    ?level:CodeGenOptLevel.t -> ?reloc_mode:RelocMode.t ->
113*9880d681SAndroid Build Coastguard Worker                    ?code_model:CodeModel.t -> Target.t -> t
114*9880d681SAndroid Build Coastguard Worker                  = "llvm_create_targetmachine_bytecode"
115*9880d681SAndroid Build Coastguard Worker                    "llvm_create_targetmachine_native"
116*9880d681SAndroid Build Coastguard Worker  external target : t -> Target.t
117*9880d681SAndroid Build Coastguard Worker                  = "llvm_targetmachine_target"
118*9880d681SAndroid Build Coastguard Worker  external triple : t -> string
119*9880d681SAndroid Build Coastguard Worker                  = "llvm_targetmachine_triple"
120*9880d681SAndroid Build Coastguard Worker  external cpu : t -> string
121*9880d681SAndroid Build Coastguard Worker               = "llvm_targetmachine_cpu"
122*9880d681SAndroid Build Coastguard Worker  external features : t -> string
123*9880d681SAndroid Build Coastguard Worker                    = "llvm_targetmachine_features"
124*9880d681SAndroid Build Coastguard Worker  external data_layout : t -> DataLayout.t
125*9880d681SAndroid Build Coastguard Worker                       = "llvm_targetmachine_data_layout"
126*9880d681SAndroid Build Coastguard Worker  external add_analysis_passes : [< Llvm.PassManager.any ] Llvm.PassManager.t -> t -> unit
127*9880d681SAndroid Build Coastguard Worker                               = "llvm_targetmachine_add_analysis_passes"
128*9880d681SAndroid Build Coastguard Worker  external set_verbose_asm : bool -> t -> unit
129*9880d681SAndroid Build Coastguard Worker                           = "llvm_targetmachine_set_verbose_asm"
130*9880d681SAndroid Build Coastguard Worker  external emit_to_file : Llvm.llmodule -> CodeGenFileType.t -> string ->
131*9880d681SAndroid Build Coastguard Worker                          t -> unit
132*9880d681SAndroid Build Coastguard Worker                        = "llvm_targetmachine_emit_to_file"
133*9880d681SAndroid Build Coastguard Worker  external emit_to_memory_buffer : Llvm.llmodule -> CodeGenFileType.t ->
134*9880d681SAndroid Build Coastguard Worker                                   t -> Llvm.llmemorybuffer
135*9880d681SAndroid Build Coastguard Worker                                 = "llvm_targetmachine_emit_to_memory_buffer"
136*9880d681SAndroid Build Coastguard Workerend
137