18 releases (11 stable)

Uses old Rust 2015

1.3.2 Jun 11, 2022
1.3.1 Feb 17, 2022
1.3.0 Dec 8, 2021
1.2.0 Sep 26, 2021
0.1.0 Mar 31, 2018

#114 in Cryptography

Download history 524/week @ 2022-06-16 743/week @ 2022-06-23 699/week @ 2022-06-30 382/week @ 2022-07-07 379/week @ 2022-07-14 492/week @ 2022-07-21 429/week @ 2022-07-28 743/week @ 2022-08-04 680/week @ 2022-08-11 305/week @ 2022-08-18 253/week @ 2022-08-25 493/week @ 2022-09-01 665/week @ 2022-09-08 477/week @ 2022-09-15 444/week @ 2022-09-22 282/week @ 2022-09-29

2,040 downloads per month
Used in 5 crates (via olm-rs)

Apache-2.0

1.5MB
28K SLoC

C++ 10K SLoC // 0.1% comments C 7.5K SLoC // 0.2% comments Java 3K SLoC // 0.3% comments Objective-C 2K SLoC // 0.1% comments Python 2K SLoC // 0.4% comments JavaScript 2K SLoC // 0.1% comments Rust 2K SLoC // 0.0% comments GDB Script 120 SLoC Shell 106 SLoC // 0.2% comments TypeScript 103 SLoC // 0.1% comments Batch 93 SLoC Swift 48 SLoC INI 30 SLoC GNU Style Assembly 7 SLoC

olm-sys: Low Level Bindings For Olm

This is an intermediate crate that exposes the C API of libolm to Rust. If you want to start building things with libolm from Rust, check out olm-rs.

Supported Platforms

  • Android
  • Linux
  • macOS
  • Windows
  • FreeBSD
  • WebAssembly

Building

This library can either be built by statically or dynamically linking against libolm:

Static

This is the default and requires no further action. libolm is built locally and then linked against statically.

Build dependencies

  • libstdc++/libc++
  • cmake (requires v3.12)
  • GNU make or a compatible variant (WebAssembly only)
  • Emscripten (WebAssembly only)

Dynamic

For linking against libolm dynamically, first make sure that you have the library in your link path. Then build this library with the OLM_LINK_VARIANT environment variable set to dylib.

For example, building your project using olm-sys as a dependency would look like this:

$ OLM_LINK_VARIANT=dylib cargo build

Cross compiling for Android

To enable cross compilation for Android set the environment variable ANDROID_NDK to the location of your NDK installation, for example:

$ ANRDOID_NDK=/home/user/Android/Sdk/ndk/22.0.7026061/

The linker needs to be set to an target specific one as well, for example for aarch64-linux-android set this into your cargo config:

[target.aarch64-linux-android]
ar = "/home/user/Android/Sdk/ndk/22.0.7026061/toolchains/llvm/prebuilt/linux-x86_64/bin/ar"
linker = "/home/user/Android/Sdk/ndk/22.0.7026061/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android30-clang"

After both of these are set, compilation should work as usual using cargo:

$ ANDROID_NDK=~/Android/Sdk/ndk/22.0.7026061 cargo build --target aarch64-linux-android

Cross compiling for iOS

To enable cross compilation for iOS, set the environment variable IOS_SDK_PATH to the iOS SDK location by running:

$ export IOS_SDK_PATH=`xcrun --show-sdk-path --sdk iphoneos`

Dependencies