FFI DB Command-Line Interface (CLI)

Installation

The tool can be installed quickly and easily on any computer that has Ruby available:

$ gem install ffidb

Reference

Commands:
  ffidb export LIBRARY|SYMBOL...  # Generate C/C++/Go/Java/Python/Ruby/etc code
  ffidb help [COMMAND]            # Describe available commands or one specific command
  ffidb init                      # Initialize the registry (at: ~/.ffidb)
  ffidb list [LIBRARY]            # List FFI libraries and symbols
  ffidb parse HEADER...           # Parse .h header files
  ffidb search PATTERN            # Search for FFI symbols using a glob pattern
  ffidb show SYMBOL               # Show FFI symbol information
  ffidb update                    # Fetch updates to the registry (at: ~/.ffidb)

Options:
  -d, [--debug], [--no-debug]      # Enable debugging
  -v, [--verbose], [--no-verbose]  # Be verbose (print warnings)
  -q, [--quiet], [--no-quiet]      # Be quiet (silence non-fatal errors)

Initializing the Registry

Usage:
  ffidb init

Options:
  -d, [--debug], [--no-debug]      # Enable debugging
  -v, [--verbose], [--no-verbose]  # Be verbose (print warnings)
  -q, [--quiet], [--no-quiet]      # Be quiet (silence non-fatal errors)

Description:
  Initializes the local FFIDB registry, a prerequisite for using FFIDB.

  Your local FFIDB registry is located at $HOME/.ffidb.

  This command is equivalent to:

    $ git clone --depth=1 https://github.com/ffidb/ffidb.git $HOME/.ffidb

Updating the Registry

Usage:
  ffidb update

Options:
  -d, [--debug], [--no-debug]      # Enable debugging
  -v, [--verbose], [--no-verbose]  # Be verbose (print warnings)
  -q, [--quiet], [--no-quiet]      # Be quiet (silence non-fatal errors)

Description:
  Updates the local FFIDB registry, pulling updates from GitHub.

  Your local FFIDB registry is located at $HOME/.ffidb.

  This command is equivalent to:

    $ cd $HOME/.ffidb && git pull

Listing Libraries and Symbols

Usage:
  ffidb list [LIBRARY]

Options:
  -d, [--debug], [--no-debug]      # Enable debugging
  -v, [--verbose], [--no-verbose]  # Be verbose (print warnings)
  -q, [--quiet], [--no-quiet]      # Be quiet (silence non-fatal errors)

Description:
  Lists libraries with their FFI symbols (such as functions).

  For example:

    $ ffidb list lua

Searching Libraries and Symbols

Usage:
  ffidb search PATTERN

Options:
  -d, [--debug], [--no-debug]      # Enable debugging
  -v, [--verbose], [--no-verbose]  # Be verbose (print warnings)
  -q, [--quiet], [--no-quiet]      # Be quiet (silence non-fatal errors)

Description:
  Searches for FFI symbols (for example, functions) using a glob pattern.

  For example:

    $ ffidb search sqlite3_*_blob

Viewing Symbol Information

Usage:
  ffidb show SYMBOL

Options:
  -d, [--debug], [--no-debug]      # Enable debugging
  -v, [--verbose], [--no-verbose]  # Be verbose (print warnings)
  -q, [--quiet], [--no-quiet]      # Be quiet (silence non-fatal errors)

Description:
  Shows information about an FFI symbol (for example, a function).

  For example:

    $ ffidb show lua_callk

Generating FFI Bindings

Usage:
  ffidb export LIBRARY|SYMBOL...

Options:
  -f, [--format=FORMAT]            # Specify the output FORMAT (for example: java)
  -L, [--library-path=DIRECTORY]   # Load all libraries from DIRECTORY
      [--exclude=PATTERN]          # Exclude symbols matching the glob PATTERN
      [--exclude-from=FILE]        # Read exclude patterns from FILE
  -d, [--debug], [--no-debug]      # Enable debugging
  -v, [--verbose], [--no-verbose]  # Be verbose (print warnings)
  -q, [--quiet], [--no-quiet]      # Be quiet (silence non-fatal errors)

Description:
  Generates code for a target language (e.g., C/C++/Java/Python/Ruby/etc).

  Currently supported target formats and programming languages:

    --format=c                     # C99
    --format=c++                   # C++11
    --format=dart                  # Dart & Flutter
    --format=go                    # Go (cgo)
    --format=java                  # Java (JNA)
    --format=json                  # JSON
    --format=lisp                  # Common Lisp (CFFI)
    --format=python                # Python (ctypes)
    --format=ruby                  # Ruby (FFI)
    --format=yaml                  # YAML

  For example:

    $ ffidb export lua -f=c        # Export Lua bindings as C code
    $ ffidb export lua -f=cpp      # Export Lua bindings as C++ code
    $ ffidb export lua -f=java     # Export Lua bindings as Java JNA code
    $ ffidb export lua -f=python   # Export Lua bindings as Python ctypes code
    $ ffidb export lua -f=ruby     # Export Lua bindings as Ruby FFI code

Parsing C Header Files

Usage:
  ffidb parse HEADER...

Options:
  -C, [--config=FILE]              # Use a library.yaml configuration FILE
  -D, [--define=VAR[=VAL]]         # Define VAR as a preprocessor symbol
  -I, [--include=DIRECTORY]        # Add DIRECTORY to the headers search path
  -d, [--debug], [--no-debug]      # Enable debugging
  -v, [--verbose], [--no-verbose]  # Be verbose (print warnings)
  -q, [--quiet], [--no-quiet]      # Be quiet (silence non-fatal errors)

Description:
  Parses .h header files, outputting YAML using the FFIDB schema.

  Note: parsing requires installation of the 'ffi-clang' library:

    $ gem install ffi-clang