Giter Club home page Giter Club logo

rust-htslib's Introduction

Crates.io Crates.io Crates.io docs.rs GitHub Workflow Status Coverage Status

HTSlib bindings for Rust

This library provides HTSlib bindings and a high level Rust API for reading and writing BAM files.

To clone this repository, issue

$ git clone --recursive https://github.com/rust-bio/rust-htslib.git

ensuring that the HTSlib submodule is fetched, too. If you only want to use the library, there is no need to clone the repository. Go on to the Usage section in this case.

Requirements

rust-htslib comes with pre-built bindings to htslib for Mac and Linux. You will need a C toolchain compatible with the cc crate. The build script for this crate will automatically build a link htslib.

MUSL build

To compile this for MUSL crate you need docker and cross:

$ cargo install cross
$ cross build 				              # will build with GNU GCC or LLVM toolchains

If you want to run rust-htslib code on AWS lambda, you'll need to statically compile it with MUSL as follows:

$ cross build --target x86_64-unknown-linux-musl      # will build with MUSL toolchain

Alternatively, you can also install it locally by installing the development headers of zlib, bzip2 and xz. For instance, in Debian systems one needs the following dependencies:

$ sudo apt-get install zlib1g-dev libbz2-dev liblzma-dev clang pkg-config

We provide Dockerfile bases that provide these dependencies. Refer to the docker directory in this repository for the latest instructions, including LLVM installation.

On OSX:

$ brew install FiloSottile/musl-cross/musl-cross
$ brew install bzip2 zlib xz curl-openssl

Usage

Add this to your Cargo.toml:

[dependencies]
rust-htslib = "*"

By default rust-htslib links to bzip2-sys and lzma-sys for full CRAM support. If you do not need CRAM support, or you do need to support CRAM files with these compression methods, you can deactivate these features to reduce you dependency count:

[dependencies]
rust-htslib = { version = "*", default-features = false }

rust-htslib has optional support for serde, to allow (de)serialization of bam::Record via any serde-supported format.

Http access to files is available with the curl feature.

Beta-level S3 and Google Cloud Storge support is available with the s3 and gcs features.

rust-htslib can optionally use bindgen to generate bindings to htslib. This can slow down the build substantially. Enabling the bindgen feature will cause hts-sys to use a create a binding file for your architecture. Pre-built bindings are supplied for Mac and Linux. The bindgen feature on Windows is untested - please file a bug if you need help.

[dependencies]
rust-htslib = { version = "*", features = ["serde_feature"] }

For more information, please see the docs.

Alternatives

There's noodles by Michael Macias which implements a large part of htslib's C functionality in pure Rust (still experimental though).

Authors

For other contributors, see here.

License

Licensed under the MIT license https://opensource.org/licenses/MIT. This project may not be copied, modified, or distributed except according to those terms. Some test files are taken from https://github.com/samtools/htslib.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.