1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
[%%metapackage "metapp"]
[%%metadir "config/.clangml_config.objs/byte"]
type t =
| C89
| C94
| Gnu89
| C99
| Gnu99
| C11
| Gnu11
| C17
| Gnu17
| C2x
| Gnu2x
| Cxx98
| Gnucxx98
| Cxx11
| Gnucxx11
| Cxx14
| Gnucxx14
| Cxx17
| Gnucxx17
| Cxx20
| Gnucxx20
| Opencl10
| Opencl11
| Opencl12
| Opencl20
| Openclcpp10
| Openclcpp2021
| Cuda
| Hip
[@@deriving refl]
exception Unavailable of t
let to_clang : t -> Clang__bindings.clang_ext_langstandards = function
| C89 -> C89
| C94 -> C94
| Gnu89 -> Gnu89
| C99 -> C99
| Gnu99 -> Gnu99
| C11 -> C11
| Gnu11 -> Gnu11
| C17 ->
[%meta if Clangml_config.version.major >= 6 then [%expr
C17]
else [%expr
raise (Unavailable C17)]]
| Gnu17 ->
[%meta if Clangml_config.version.major >= 6 then [%expr
Gnu17]
else [%expr
raise (Unavailable Gnu17)]]
| C2x ->
[%meta if Clangml_config.version.major >= 9 then [%expr
C2x]
else [%expr
raise (Unavailable C2x)]]
| Gnu2x ->
[%meta if Clangml_config.version.major >= 9 then [%expr
Gnu2x]
else [%expr
raise (Unavailable Gnu2x)]]
| Cxx98 -> Cxx98
| Gnucxx98 -> Gnucxx98
| Cxx11 -> Cxx11
| Gnucxx11 -> Gnucxx11
| Cxx14 ->
[%meta if
Clangml_config.version >= { major = 3; minor = 5; subminor = 0 }
then [%expr
Cxx14]
else [%expr
Cxx1y]]
| Gnucxx14 ->
[%meta if
Clangml_config.version >= { major = 3; minor = 5; subminor = 0 }
then [%expr
Gnucxx14]
else [%expr
Gnucxx1y]]
| Cxx17 ->
[%meta if Clangml_config.version.major >= 5 then [%expr
Cxx17]
else if
Clangml_config.version >= { major = 3; minor = 5; subminor = 0 }
then [%expr
Cxx1z]
else [%expr
raise (Unavailable Cxx17)]]
| Gnucxx17 ->
[%meta if Clangml_config.version.major >= 5 then [%expr
Gnucxx17]
else if
Clangml_config.version >= { major = 3; minor = 5; subminor = 0 }
then [%expr
Gnucxx1z]
else [%expr
raise (Unavailable Gnucxx17)]]
| Cxx20 ->
[%meta if Clangml_config.version.major >= 10 then [%expr
Cxx20]
else if Clangml_config.version.major >= 5 then [%expr
Cxx2a]
else [%expr
raise (Unavailable Cxx20)]]
| Gnucxx20 ->
[%meta if Clangml_config.version.major >= 10 then [%expr
Gnucxx20]
else if Clangml_config.version.major >= 5 then [%expr
Gnucxx2a]
else [%expr
raise (Unavailable Gnucxx20)]]
| Opencl10 ->
[%meta if Clangml_config.version.major >= 5 then [%expr
Opencl10]
else [%expr
raise (Unavailable Opencl10)]]
| Opencl11 -> Opencl11
| Opencl12 -> Opencl12
| Opencl20 ->
[%meta if
Clangml_config.version >= { major = 3; minor = 6; subminor = 0 }
then [%expr
Opencl20]
else [%expr
raise (Unavailable Opencl20)]]
| Openclcpp10 ->
[%meta if Clangml_config.version.major >= 14 then [%expr
Openclcpp10]
else if Clangml_config.version.major >= 7 then [%expr
Openclcpp]
else [%expr
raise (Unavailable Openclcpp10)]]
| Openclcpp2021 ->
[%meta if Clangml_config.version.major >= 14 then [%expr
Openclcpp2021]
else [%expr
raise (Unavailable Openclcpp2021)]]
| Cuda -> Cuda
| Hip ->
[%meta if Clangml_config.version.major >= 7 then [%expr
Hip]
else [%expr
raise (Unavailable Hip)]]