23
|
1
|
#+title: ffi |
|
2
|
#+author: Richard Westhaver |
28
|
3
|
#+setupfile: ../../clean.theme |
12
|
4
|
This doc is about the [[https://en.wikipedia.org/wiki/Foreign_function_interface][Foreign Function Interface]] (FFI) features of the |
|
5
|
=core=. |
|
6
|
|
|
7
|
Besides accessing system, OS, and external libraries via binding code |
|
8
|
(dynamically in Lisp, statically in Rust), we also expose parts of the |
|
9
|
core in a C-compatible fashion. In Lisp, we use the SB-ALIEN interface |
|
10
|
to load (with dlopen) and call foreign symbols. In Rust we mostly use |
|
11
|
rust-bindgen and the built-in rustc features. |
|
12
|
|
|
13
|
* Libraries |
|
14
|
The following binding libraries are provided with supporting |
|
15
|
code. There is some cross-over between the Lisp and Rust bindings |
|
16
|
depending on what library features we need and where. Some of the |
|
17
|
bindings are very minimal or for experimental-use only only. |
|
18
|
** xkb |
|
19
|
These bindings are actually directed at libxkbcommon instead of |
|
20
|
x11/xkb directly. |
|
21
|
*** xkbcommon |
|
22
|
https://xkbcommon.org/doc/current/md_doc_2quick-guide.html |
|
23
|
** rocksdb |
|
24
|
[[https://github.com/facebook/rocksdb/wiki][RocksDB Wiki]] |
|
25
|
** btrfs |
|
26
|
The kernel headers btrfs and btrfs_tree will be wrapped at some point |
|
27
|
in addition to the userspace library (btrfsutil) documented below. |
|
28
|
*** btrfsutil |
|
29
|
https://github.com/kdave/btrfs-progs |
|
30
|
** uring |
|
31
|
https://man.archlinux.org/man/io_uring.7.en |
|
32
|
** zstd |
|
33
|
zstd compression bindings: https://github.com/facebook/zstd |
|
34
|
** tree-sitter |
|
35
|
bindings to tree-sitter parser generator and language libraries: https://github.com/tree-sitter/tree-sitter |
19
|
36
|
** COMMENT blake3 |
12
|
37
|
temporary package for CL implementation of Blake3 SHA. Wraps C |
|
38
|
implementation (libblake3). |
17
|
39
|
** COMMENT alpm |
|
40
|
https://man.archlinux.org/man/core/pacman/libalpm.3.en |
|
41
|
https://github.com/archlinux/alpm.rs/tree/382af70cdbff8e1f65c0bf8df79693786f44429c/alpm/examples |
|
42
|
|
|
43
|
** COMMENT bqn |
12
|
44
|
These bindings are for libcbqn which can be build from CBQN: |
|
45
|
https://github.com/dzaima/CBQN |
17
|
46
|
** COMMENT k |
12
|
47
|
https://codeberg.org/ngn/k |
|
48
|
bindings for ngn/k (libk). |
19
|
49
|
** COMMENT nuklear |
|
50
|
** COMMENT ssh2 |