Bindgen

Bindgen is a tool to automatically generate bindings to C libraries. It can be invoked with the banjo bindgen command, which takes a C file as an argument and outputs a file bindings.bnj with the generated bindings. To use bindgen, you need to install libclang using pip.

banjo bindgen library.c

Include paths for the C preprocessor can be added using the -I option.

banjo bindgen -I path_a -I path_b library.c

Generators

The processing of C constructs and conversion to bindings can be customized with generators. Generators are Python source files that contain functions used by bindgen to convert the C source file. A custom generator can be supplied to bindgen with the --generator option.

banjo bindgen --generator libgen.py library.c

Generators contain functions for filtering and converting symbol names.

# Returns true if symbols from this file should be processed.
# This can be used to ignore large system headers like windows.h
# `path` is a string that represents the path to the file as returned by libclang.
def filter_file_path(path)

# Returns true if bindings should be generated for this symbol.
def filter_symbol(sym)

# Renames symbols by updating their 'name' attribute.
def rename_symbol(sym)

The symbol arguments always contain a kind attributes as well as a name attribute that can be modified in rename_symbol. The possible kinds are: "func", "const", "struct", "field", "enum", "enum_variant" and "type_alias". Some symbols contain additional attributes, such as "struct"s, which have a fields attribute.

Bindgen provides utility functions in the utils module that can be imported into generators.