Skip to content
build and install C-compatible libraries
Rust
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github Experiment with the github funding options Jun 20, 2019
src
.gitignore Ignore Cargo.lock Jun 25, 2019
.travis.yml
Cargo.toml Prepare to a new release Jul 22, 2019
LICENSE Add license file to make github happy Jun 25, 2019
README.md Add travis badge Jul 24, 2019

README.md

Cargo C-ABI helpers

LICENSE dependency status Crates.io Build Status

cargo applet to build and install C-ABI compatibile dynamic and static libraries.

It produces and installs a correct pkg-config file, a static library and a dynamic library, and a C header to be used by any C (and C-compatible) software.

Usage

# build the library, create the .h header, create the .pc file
$ cargo cbuild --destdir=${D} --prefix=/usr --libdir=/usr/lib64
# build the library, create the .h header, create the .pc file and install all of it
$ cargo cinstall --destdir=${D} --prefix=/usr --libdir=/usr/lib64

For a more in-depth explanation of how cargo-c works and how to use it for your crates, read Building Crates so they Look Like C ABI Libraries.

The TL;DR:

  • Create a capi.rs with the C-API you want to expose and use #[cfg(cargo_c)] to hide it when you build a normal rust library.
  • Make sure you have a lib target and if you are using a workspace the first member is the crate you want to export, that means that you might have to add a "." member at the start of the list.
  • Remember to add a [cbindgen.toml][cbinden-toml] and fill it with at least the include guard and probably you want to set the language to C (it defaults to C++)
  • Once you are happy with the result update your documentation to tell the user to install cargo-c and do cargo cinstall --prefix=/usr --destdir=/tmp/some-place or something along those lines.

Users

Status

  • cli
    • build command
    • install command
    • cargo applet support
  • build targets
    • pkg-config generation
    • header generation (cbindgen integration)
  • staticlib support
  • cdylib support
  • Extra Cargo.toml keys
  • Better status reporting
You can’t perform that action at this time.