paritytech/libusb-sys

Name: libusb-sys

Owner: Parity Technologies

Description: Rust bindings for the libusb library.

Forked from: dcuddeback/libusb-sys

Created: 2017-01-31 10:47:50.0

Updated: 2018-04-15 14:52:00.0

Pushed: 2018-01-12 11:45:50.0

Homepage:

Size: 538

Language: C

GitHub Committers

UserMost Recent Commit# Commits

Other Committers

UserEmailMost Recent Commit# Commits

README

Libusb Rust Bindings

The libusb-sys crate provides declarations and linkage for the libusb C library. Following the *-sys package conventions, the libusb-sys crate does not define higher-level abstractions over the native libusb library functions.

Dependencies

In order to use the libusb-sys crate, you must have the libusb library installed where it can be found by pkg-config.

All systems supported by libusb are also supported by the libusb-sys crate. It's been tested on Linux, OS X, and Windows.

Cross-Compiling

To link to a cross-compiled version of the native libusb library, it's necessary to set several environment variables to configure pkg-config to work with a cross-compiler's sysroot. Autotools Mythbuster has a good explanation of supporting cross-compilation with pkg-config.

However, Rust's pkg-config build helper doesn't support calling a $CHOST-prefixed pkg-config. It will always call pkg-config without a prefix. To cross-compile libusb-sys with the pkg-config build helper, one must define the environment variables PKG_CONFIG_DIR, PKG_CONFIG_LIBDIR, and PKG_CONFIG_SYSROOT_DIR for the default pkg-config. It's also necessary to set PKG_CONFIG_ALLOW_CROSS to tell Rust's pkg-config helper that it's okay to proceed with a cross-compile.

To adapt the pkg-config wrapper in the Autotools Mythbuster guide so that it works with Rust, one will end up with a script similar to the following:

in/sh

OOT=/build/root

rt PKG_CONFIG_DIR=
rt PKG_CONFIG_LIBDIR=${SYSROOT}/usr/lib/pkgconfig:${SYSROOT}/usr/share/pkgconfig
rt PKG_CONFIG_SYSROOT_DIR=${SYSROOT}
rt PKG_CONFIG_ALLOW_CROSS=1

o build
Usage

Add libusb-sys as a dependency in Cargo.toml:

endencies]
sb-sys = "0.2"

Import the libusb_sys crate and use the functions as they're defined in the native libusb library. See the libusb 1.0 API documention for more usage information.

rn crate libusb_sys as ffi;

ain() {
t version = unsafe { ffi::libusb_get_version() };

intln!("libusb v{}.{}.{}.{}", version.major, version.minor, version.micro, version.nano);

Finding Help

Since libusb-sys is no more than a wrapper around the native libusb library, the best source for help is the information already available for libusb:

License

Copyright © 2015 David Cuddeback

Distributed under the MIT License.


This work is supported by the National Institutes of Health's National Center for Advancing Translational Sciences, Grant Number U24TR002306. This work is solely the responsibility of the creators and does not necessarily represent the official views of the National Institutes of Health.