-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbuild.rs
417 lines (411 loc) · 21.9 KB
/
build.rs
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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
use std::env;
use std::path::PathBuf;
fn main() {
metadeps::probe().unwrap();
#[cfg(feature = "memb")]
let bindings = {
// Tell cargo to invalidate the built crate whenever the wrapper changes
println!("cargo:rerun-if-changed=wrapper_memb.h");
bindgen::Builder::default()
.header("wrapper_memb.h")
.whitelist_var("rcu_flavor_memb")
.whitelist_var("urcu_memb_flavor")
//.parse_callbacks(Box::new(bindgen::CargoCallbacks))
.whitelist_type("cds_wfcq_head_ptr_t")
.whitelist_type("cds_wfcq_head")
.whitelist_type("cds_wfcq_node")
.whitelist_type("cds_wfcq_tail")
.whitelist_type("rcu_head")
.whitelist_type("rcu_flavor_struct")
.whitelist_function("call_rcu_after_fork_child_memb")
.whitelist_function("call_rcu_after_fork_parent_memb")
.whitelist_function("call_rcu_before_fork_memb")
.whitelist_function("call_rcu_data_free_memb")
.whitelist_function("call_rcu_memb")
.whitelist_function("create_all_cpu_call_rcu_data_memb")
.whitelist_function("create_call_rcu_data_memb")
.whitelist_function("defer_rcu_memb")
.whitelist_function("free_all_cpu_call_rcu_data_memb")
.whitelist_function("get_call_rcu_data_memb")
.whitelist_function("get_call_rcu_thread_memb")
.whitelist_function("get_cpu_call_rcu_data_memb")
.whitelist_function("get_default_call_rcu_data_memb")
.whitelist_function("get_thread_call_rcu_data_memb")
.whitelist_function("rcu_barrier_memb")
.whitelist_function("rcu_cmpxchg_pointer_sym")
.whitelist_function("rcu_defer_barrier_memb")
.whitelist_function("rcu_defer_barrier_thread_memb")
.whitelist_function("rcu_defer_register_thread_memb")
.whitelist_function("rcu_defer_unregister_thread_memb")
.whitelist_function("rcu_dereference_sym")
.whitelist_function("rcu_init_memb")
.whitelist_function("rcu_read_lock_memb")
.whitelist_function("rcu_read_ongoing_memb")
.whitelist_function("rcu_read_unlock_memb")
.whitelist_function("rcu_register_thread_memb")
.whitelist_function("rcu_register_thread")
.whitelist_function("rcu_set_pointer_sym")
.whitelist_function("rcu_unregister_thread_memb")
.whitelist_function("rcu_xchg_pointer_sym")
.whitelist_function("set_cpu_call_rcu_data_memb")
.whitelist_function("set_thread_call_rcu_data_memb")
.whitelist_function("synchronize_rcu_memb")
.whitelist_function("urcu_register_rculfhash_atfork_memb")
.whitelist_function("urcu_unregister_rculfhash_atfork_memb")
.whitelist_function("urcu_memb_call_rcu")
.whitelist_function("urcu_memb_call_rcu_after_fork_child")
.whitelist_function("urcu_memb_call_rcu_after_fork_parent")
.whitelist_function("urcu_memb_call_rcu_before_fork")
.whitelist_function("urcu_memb_call_rcu_data_free")
.whitelist_function("urcu_memb_create_all_cpu_call_rcu_data")
.whitelist_function("urcu_memb_create_call_rcu_data")
.whitelist_function("urcu_memb_defer_rcu")
.whitelist_function("urcu_memb_free_all_cpu_call_rcu_data")
.whitelist_function("urcu_memb_get_call_rcu_data")
.whitelist_function("urcu_memb_get_call_rcu_thread")
.whitelist_function("urcu_memb_get_cpu_call_rcu_data")
.whitelist_function("urcu_memb_get_default_call_rcu_data")
.whitelist_function("urcu_memb_get_thread_call_rcu_data")
.whitelist_function("urcu_memb_rcu_barrier")
.whitelist_function("urcu_memb_rcu_defer_barrier")
.whitelist_function("urcu_memb_rcu_defer_barrier_thread")
.whitelist_function("urcu_memb_rcu_defer_register_thread")
.whitelist_function("urcu_memb_rcu_defer_unregister_thread")
.whitelist_function("urcu_memb_rcu_init")
.whitelist_function("urcu_memb_rcu_read_lock")
.whitelist_function("urcu_memb_rcu_read_ongoing")
.whitelist_function("urcu_memb_rcu_read_unlock")
.whitelist_function("urcu_memb_rcu_register_thread")
.whitelist_function("urcu_memb_rcu_unregister_thread")
.whitelist_function("urcu_memb_set_cpu_call_rcu_data")
.whitelist_function("urcu_memb_set_thread_call_rcu_data")
.whitelist_function("urcu_memb_synchronize_rcu")
.whitelist_function("urcu_memb_urcu_register_rculfhash_atfork")
.whitelist_function("urcu_memb_urcu_unregister_rculfhash_atfork")
.whitelist_function("urcu_memb_barrier")
.whitelist_function("urcu_memb_defer_barrier")
.whitelist_function("urcu_memb_defer_barrier_thread")
.whitelist_function("urcu_memb_defer_register_thread")
.whitelist_function("urcu_memb_defer_unregister_thread")
.whitelist_function("urcu_memb_init")
.whitelist_function("urcu_memb_read_lock")
.whitelist_function("urcu_memb_read_ongoing")
.whitelist_function("urcu_memb_read_unlock")
.whitelist_function("urcu_memb_register_thread")
.whitelist_function("urcu_memb_unregister_thread")
.whitelist_function("urcu_memb_register_rculfhash_atfork")
.whitelist_function("urcu_memb_unregister_rculfhash_atfork")
};
#[cfg(feature = "qsbr")]
let bindings = {
// Tell cargo to invalidate the built crate whenever the wrapper changes
println!("cargo:rerun-if-changed=wrapper_qsbr.h");
bindgen::Builder::default()
.header("wrapper_qsbr.h")
//.parse_callbacks(Box::new(bindgen::CargoCallbacks))
.whitelist_var("urcu_qsbr_flavor")
.whitelist_function("call_rcu_after_fork_child_qsbr")
.whitelist_function("call_rcu_after_fork_parent_qsbr")
.whitelist_function("call_rcu_before_fork_qsbr")
.whitelist_function("call_rcu_data_free_qsbr")
.whitelist_function("call_rcu_qsbr")
.whitelist_function("create_all_cpu_call_rcu_data_qsbr")
.whitelist_function("create_call_rcu_data_qsbr")
.whitelist_function("defer_rcu_qsbr")
.whitelist_function("free_all_cpu_call_rcu_data_qsbr")
.whitelist_function("get_call_rcu_data_qsbr")
.whitelist_function("get_call_rcu_thread_qsbr")
.whitelist_function("get_cpu_call_rcu_data_qsbr")
.whitelist_function("get_default_call_rcu_data_qsbr")
.whitelist_function("get_thread_call_rcu_data_qsbr")
.whitelist_function("rcu_barrier_qsbr")
.whitelist_function("rcu_cmpxchg_pointer_sym")
.whitelist_function("rcu_defer_barrier_qsbr")
.whitelist_function("rcu_defer_barrier_thread_qsbr")
.whitelist_function("rcu_defer_register_thread_qsbr")
.whitelist_function("rcu_defer_unregister_thread_qsbr")
.whitelist_function("rcu_dereference_sym")
.whitelist_function("rcu_read_lock_qsbr")
.whitelist_function("rcu_read_ongoing_qsbr")
.whitelist_function("rcu_read_unlock_qsbr")
.whitelist_function("rcu_register_thread_qsbr")
.whitelist_function("rcu_register_thread")
.whitelist_function("rcu_set_pointer_sym")
.whitelist_function("rcu_unregister_thread_qsbr")
.whitelist_function("rcu_xchg_pointer_sym")
.whitelist_function("set_cpu_call_rcu_data_qsbr")
.whitelist_function("set_thread_call_rcu_data_qsbr")
.whitelist_function("synchronize_rcu_qsbr")
.whitelist_function("urcu_register_rculfhash_atfork_qsbr")
.whitelist_function("urcu_unregister_rculfhash_atfork_qsbr")
.whitelist_function("urcu_qsbr_call_rcu")
.whitelist_function("urcu_qsbr_call_rcu_after_fork_child")
.whitelist_function("urcu_qsbr_call_rcu_after_fork_parent")
.whitelist_function("urcu_qsbr_call_rcu_before_fork")
.whitelist_function("urcu_qsbr_call_rcu_data_free")
.whitelist_function("urcu_qsbr_create_all_cpu_call_rcu_data")
.whitelist_function("urcu_qsbr_create_call_rcu_data")
.whitelist_function("urcu_qsbr_defer_rcu")
.whitelist_function("urcu_qsbr_free_all_cpu_call_rcu_data")
.whitelist_function("urcu_qsbr_get_call_rcu_data")
.whitelist_function("urcu_qsbr_get_call_rcu_thread")
.whitelist_function("urcu_qsbr_get_cpu_call_rcu_data")
.whitelist_function("urcu_qsbr_get_default_call_rcu_data")
.whitelist_function("urcu_qsbr_get_thread_call_rcu_data")
.whitelist_function("urcu_qsbr_rcu_barrier")
.whitelist_function("urcu_qsbr_rcu_defer_barrier")
.whitelist_function("urcu_qsbr_rcu_defer_barrier_thread")
.whitelist_function("urcu_qsbr_rcu_defer_register_thread")
.whitelist_function("urcu_qsbr_rcu_defer_unregister_thread")
.whitelist_function("urcu_qsbr_rcu_init")
.whitelist_function("urcu_qsbr_rcu_read_lock")
.whitelist_function("urcu_qsbr_rcu_read_ongoing")
.whitelist_function("urcu_qsbr_rcu_read_unlock")
.whitelist_function("urcu_qsbr_rcu_register_thread")
.whitelist_function("urcu_qsbr_rcu_unregister_thread")
.whitelist_function("urcu_qsbr_set_cpu_call_rcu_data")
.whitelist_function("urcu_qsbr_set_thread_call_rcu_data")
.whitelist_function("urcu_qsbr_synchronize_rcu")
.whitelist_function("urcu_qsbr_urcu_register_rculfhash_atfork")
.whitelist_function("urcu_qsbr_urcu_unregister_rculfhash_atfork")
.whitelist_function("urcu_qsbr_barrier")
.whitelist_function("urcu_qsbr_defer_barrier")
.whitelist_function("urcu_qsbr_defer_barrier_thread")
.whitelist_function("urcu_qsbr_defer_register_thread")
.whitelist_function("urcu_qsbr_defer_unregister_thread")
.whitelist_function("urcu_qsbr_init")
.whitelist_function("urcu_qsbr_read_ongoing")
.whitelist_function("urcu_qsbr_register_thread")
.whitelist_function("urcu_qsbr_unregister_thread")
.whitelist_function("urcu_qsbr_register_rculfhash_atfork")
.whitelist_function("urcu_qsbr_unregister_rculfhash_atfork")
.whitelist_function("urcu_qsbr_quiescent_state")
};
// if compilation fails here with "bindings" not defined, you need to define a feature like "qsbr" or "memb"
let bindings = bindings
// cds
.whitelist_var("cds_wfcq_ret_CDS_WFCQ_RET_DEST_EMPTY")
.whitelist_var("cds_wfcq_ret_CDS_WFCQ_RET_DEST_NON_EMPTY")
.whitelist_var("cds_wfcq_ret_CDS_WFCQ_RET_SRC_EMPTY")
.whitelist_var("cds_wfcq_ret_CDS_WFCQ_RET_WOULDBLOCK")
.whitelist_var("cds_wfcq_state_CDS_WFCQ_STATE_LAST")
.whitelist_var("URCU_CALL_RCU_PAUSE")
.whitelist_var("URCU_CALL_RCU_PAUSED")
.whitelist_var("URCU_CALL_RCU_RT")
.whitelist_var("URCU_CALL_RCU_RUNNING")
.whitelist_var("URCU_CALL_RCU_STOP")
.whitelist_var("URCU_CALL_RCU_STOPPED")
.whitelist_var("CDS_LFHT_AUTO_RESIZE")
.whitelist_var("CONFIG_RCU_HAVE_CLOCK_GETTIME")
.whitelist_var("CONFIG_RCU_HAVE_FENCE")
.whitelist_var("CONFIG_RCU_HAVE_FUTEX")
.whitelist_var("CONFIG_RCU_SMP")
.whitelist_function("urcu_atfork")
.whitelist_function("__cds_wfcq_dequeue_blocking")
.whitelist_function("__cds_wfcq_dequeue_nonblocking")
.whitelist_function("__cds_wfcq_dequeue_with_state_blocking")
.whitelist_function("__cds_wfcq_dequeue_with_state_nonblocking")
.whitelist_function("__cds_wfcq_first_blocking")
.whitelist_function("__cds_wfcq_first_nonblocking")
.whitelist_function("__cds_wfcq_init")
.whitelist_function("__cds_wfcq_next_blocking")
.whitelist_function("__cds_wfcq_next_nonblocking")
.whitelist_function("__cds_wfcq_splice_blocking")
.whitelist_function("__cds_wfcq_splice_nonblocking")
.whitelist_function("_cds_lfht_new")
.whitelist_function("__ctype_get_mb_cur_max")
.whitelist_function("cds_wfcq_dequeue_blocking")
.whitelist_function("cds_wfcq_dequeue_lock")
.whitelist_function("cds_wfcq_dequeue_unlock")
.whitelist_function("cds_wfcq_dequeue_with_state_blocking")
.whitelist_function("cds_wfcq_destroy")
.whitelist_function("cds_wfcq_empty")
.whitelist_function("cds_wfcq_enqueue")
.whitelist_function("cds_wfcq_init")
.whitelist_function("cds_wfcq_node_init")
.whitelist_function("cds_wfcq_splice_blocking")
.whitelist_function("rcu_register_thread")
.whitelist_function("caa_container_of")
.whitelist_function("caa_likely")
.whitelist_function("caa_max")
.whitelist_function("caa_unlikely")
.whitelist_function("call_rcu")
.whitelist_function("call_rcu_after_fork_child")
.whitelist_function("call_rcu_after_fork_parent")
.whitelist_function("call_rcu_before_fork")
.whitelist_function("call_rcu_data_free")
.whitelist_function("cds_hlist_add_head")
.whitelist_function("cds_hlist_add_head_rcu")
.whitelist_function("cds_hlist_del")
.whitelist_function("cds_hlist_del_rcu")
.whitelist_function("cds_hlist_entry")
.whitelist_function("cds_hlist_for_each_entry")
.whitelist_function("cds_hlist_for_each_entry_rcu")
.whitelist_function("cds_hlist_for_each_entry_safe")
.whitelist_function("CDS_INIT_HLIST_HEAD")
.whitelist_function("CDS_INIT_LIST_HEAD")
.whitelist_function("cds_lfht_add")
.whitelist_function("cds_lfht_add_replace")
.whitelist_function("cds_lfht_add_unique")
.whitelist_function("cds_lfht_count_nodes")
.whitelist_function("cds_lfht_del")
.whitelist_function("cds_lfht_destroy")
.whitelist_function("cds_lfht_first")
.whitelist_function("cds_lfht_for_each")
.whitelist_function("cds_lfht_for_each_duplicate")
.whitelist_function("cds_lfht_for_each_entry")
.whitelist_function("cds_lfht_for_each_entry_duplicate")
.whitelist_function("cds_lfht_is_node_deleted")
.whitelist_function("cds_lfht_iter_get_node")
.whitelist_function("cds_lfht_lookup")
.whitelist_function("cds_lfht_new")
.whitelist_function("cds_lfht_next")
.whitelist_function("cds_lfht_next_duplicate")
.whitelist_function("cds_lfht_replace")
.whitelist_function("cds_lfht_resize")
.whitelist_function("cds_lfq_dequeue_rcu")
.whitelist_function("cds_lfq_destroy_rcu")
.whitelist_function("cds_lfq_enqueue_rcu")
.whitelist_function("cds_lfq_init_rcu")
.whitelist_function("cds_lfq_node_init_rcu")
.whitelist_function("cds_lfs_empty")
.whitelist_function("cds_lfs_for_each")
.whitelist_function("cds_lfs_for_each_safe")
.whitelist_function("cds_lfs_init")
.whitelist_function("cds_lfs_node_init")
.whitelist_function("__cds_lfs_pop")
.whitelist_function("__cds_lfs_pop_all")
.whitelist_function("cds_lfs_pop_all_blocking")
.whitelist_function("cds_lfs_pop_blocking")
.whitelist_function("cds_lfs_pop_lock")
.whitelist_function("cds_lfs_pop_unlock")
.whitelist_function("cds_lfs_push")
.whitelist_function("cds_list_add")
.whitelist_function("cds_list_add_rcu")
.whitelist_function("cds_list_add_tail")
.whitelist_function("cds_list_del")
.whitelist_function("cds_list_del_init")
.whitelist_function("cds_list_del_rcu")
.whitelist_function("cds_list_empty")
.whitelist_function("cds_list_entry")
.whitelist_function("cds_list_first_entry")
.whitelist_function("cds_list_for_each")
.whitelist_function("cds_list_for_each_entry")
.whitelist_function("cds_list_for_each_entry_rcu")
.whitelist_function("cds_list_for_each_entry_reverse")
.whitelist_function("cds_list_for_each_prev")
.whitelist_function("cds_list_for_each_prev_safe")
.whitelist_function("cds_list_for_each_rcu")
.whitelist_function("cds_list_for_each_safe")
.whitelist_function("CDS_LIST_HEAD")
.whitelist_function("CDS_LIST_HEAD_INIT")
.whitelist_function("cds_list_move")
.whitelist_function("cds_list_replace")
.whitelist_function("cds_list_replace_init")
.whitelist_function("cds_list_replace_rcu")
.whitelist_function("cds_list_splice")
.whitelist_function("__cds_wfcq_dequeue_blocking")
.whitelist_function("cds_wfcq_dequeue_blocking")
.whitelist_function("cds_wfcq_dequeue_lock")
.whitelist_function("__cds_wfcq_dequeue_nonblocking")
.whitelist_function("cds_wfcq_dequeue_unlock")
.whitelist_function("cds_wfcq_empty")
.whitelist_function("cds_wfcq_enqueue")
.whitelist_function("__cds_wfcq_first_blocking")
.whitelist_function("__cds_wfcq_first_nonblocking")
.whitelist_function("__cds_wfcq_for_each_blocking")
.whitelist_function("__cds_wfcq_for_each_blocking_safe")
.whitelist_function("cds_wfcq_init")
.whitelist_function("__cds_wfcq_next_blocking")
.whitelist_function("__cds_wfcq_next_nonblocking")
.whitelist_function("cds_wfcq_node_init")
.whitelist_function("__cds_wfcq_splice_blocking")
.whitelist_function("cds_wfcq_splice_blocking")
.whitelist_function("__cds_wfcq_splice_nonblocking")
.whitelist_function("cds_wfs_empty")
.whitelist_function("cds_wfs_first")
.whitelist_function("cds_wfs_for_each_blocking")
.whitelist_function("cds_wfs_for_each_blocking_safe")
.whitelist_function("cds_wfs_init")
.whitelist_function("cds_wfs_next_blocking")
.whitelist_function("cds_wfs_next_nonblocking")
.whitelist_function("cds_wfs_node_init")
.whitelist_function("__cds_wfs_pop_all")
.whitelist_function("cds_wfs_pop_all_blocking")
.whitelist_function("__cds_wfs_pop_blocking")
.whitelist_function("cds_wfs_pop_blocking")
.whitelist_function("cds_wfs_pop_lock")
.whitelist_function("__cds_wfs_pop_nonblocking")
.whitelist_function("cds_wfs_pop_unlock")
.whitelist_function("cds_wfs_push")
.whitelist_function("CMM_ACCESS_ONCE")
.whitelist_function("cmm_barrier")
.whitelist_function("CMM_LOAD_SHARED")
.whitelist_function("cmm_smp_mb")
.whitelist_function("cmm_smp_mb__after_uatomic_add")
.whitelist_function("cmm_smp_mb__after_uatomic_and")
.whitelist_function("cmm_smp_mb__after_uatomic_dec")
.whitelist_function("cmm_smp_mb__after_uatomic_inc")
.whitelist_function("cmm_smp_mb__after_uatomic_or")
.whitelist_function("cmm_smp_mb__before_uatomic_add")
.whitelist_function("cmm_smp_mb__before_uatomic_and")
.whitelist_function("cmm_smp_mb__before_uatomic_dec")
.whitelist_function("cmm_smp_mb__before_uatomic_inc")
.whitelist_function("cmm_smp_mb__before_uatomic_or")
.whitelist_function("cmm_smp_rmb")
.whitelist_function("cmm_smp_wmb")
.whitelist_function("CMM_STORE_SHARED")
.whitelist_function("create_all_cpu_call_rcu_data")
.whitelist_function("create_call_rcu_data")
.whitelist_function("DECLARE_URCU_TLS")
.whitelist_function("defer_rcu")
.whitelist_function("DEFINE_URCU_TLS")
.whitelist_function("free_all_cpu_call_rcu_data")
.whitelist_function("get_call_rcu_data")
.whitelist_function("get_call_rcu_thread")
.whitelist_function("get_cpu_call_rcu_data")
.whitelist_function("get_default_call_rcu_data")
.whitelist_function("get_thread_call_rcu_data")
.whitelist_function("rcu_assign_pointer")
.whitelist_function("rcu_cmpxchg_pointer")
.whitelist_function("rcu_dereference")
.whitelist_function("rcu_exit")
.whitelist_function("rcu_init")
.whitelist_function("rcu_quiescent_state")
.whitelist_function("rcu_read_lock")
.whitelist_function("rcu_read_unlock")
.whitelist_function("rcu_register_thread")
.whitelist_function("rcu_set_pointer")
.whitelist_function("rcu_thread_offline")
.whitelist_function("rcu_thread_online")
.whitelist_function("rcu_unregister_thread")
.whitelist_function("rcu_xchg_pointer")
.whitelist_function("set_cpu_call_rcu_data")
.whitelist_function("set_thread_call_rcu_data")
.whitelist_function("synchronize_rcu")
.whitelist_function("uatomic_add")
.whitelist_function("uatomic_add_return")
.whitelist_function("uatomic_and")
.whitelist_function("uatomic_cmpxchg")
.whitelist_function("uatomic_dec")
.whitelist_function("uatomic_inc")
.whitelist_function("uatomic_or")
.whitelist_function("uatomic_read")
.whitelist_function("uatomic_set")
.whitelist_function("uatomic_xchg")
//.blacklist_item("__pthread_internal_list")
//.blacklist_item("__pthread_mutex_s")
//.blacklist_item("__pthread_list_t")
//.blacklist_item("pthread_mutex_t")
.derive_debug(true)
.impl_debug(true)
.derive_partialeq(true)
.derive_eq(true)
.derive_hash(true)
.generate()
.expect("Unable to generate bindings");
let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
bindings
.write_to_file(out_path.join("bindings.rs"))
.expect("Couldn't write bindings!");
}