# `libftdi1-sys`
`libftdi1-sys` is a crate providing Rust bindings to the C library
[`libftdi1`](https://www.intra2net.com/en/developer/libftdi/index.php).
# Prerequisites
This crate requires `libftdi1` version 1.4 (August 2017) or later to be available as a system library
that can be found with `pkg-config` (everywhere except windows/MSVC) or `vcpkg` (windows/MSVC)
unless you activate the `vendored` feature.
By default the crate uses pregenerated bindings which should be fine in most cases.
In special cases the bindings can be regenerated using the `bindgen` feature.
Regenerating bindings has an additional requirement that
`libclang` must be installed and visible on your path. If you are using a
`gcc`-toolchain and don't want to install the entirity of LLVM just for
`libclang`, you can use the following procedure (using a Debian-based
ARM system as an example):
```
sudo apt-get install libclang-dev
export LIBCLANG_PATH=/usr/lib/llvm-7/lib
export C_INCLUDE_PATH=/usr/lib/gcc/arm-linux-gnueabihf/8/include
cargo build
```
# MSRV
The Minimum Supported Rust Version (MSRV) is stable `1.34`.
The `bindgen` feature is developer-oriented and does not provide any MSRV guarantees.
# Features
* `libusb1-sys`: depend on `libusb1-sys` and use real `libusb` types instead of placeholders.
This makes it possible to interact directly with the underlying `libusb` structures.
* `vendored`: build a custom copy of `libftdi` instead of using the system one.
Note that this includes LGPL code in your build.
* `bindgen`: Generate bindings to `libftdi` at compile time.
# Contributing
This crate is expected to be passively maintained, not actively updated.
That being said, if you want to update binding generation,
you can set the `LIBFTDI1_SYS_DEVEL` environment variable with any value
so that an updated binding file is written in `src` alongside the original one
enabling you to compare them and copy it over the old one to update.