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

#510 in Cryptography

Download history 172/week @ 2024-04-04 292/week @ 2024-04-11 256/week @ 2024-04-18 264/week @ 2024-04-25 515/week @ 2024-05-02 358/week @ 2024-05-09 365/week @ 2024-05-16 535/week @ 2024-05-23 444/week @ 2024-05-30 438/week @ 2024-06-06 504/week @ 2024-06-13 499/week @ 2024-06-20 481/week @ 2024-06-27 473/week @ 2024-07-04 548/week @ 2024-07-11 499/week @ 2024-07-18

2,120 downloads per month
Used in 4 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 Forge Config 7 SLoC GNU Style Assembly 7 SLoC

Contains (Windows DLL, 130KB) olm/lib/ed25519/ed25519_32.dll, (Windows DLL, 115KB) olm/lib/ed25519/ed25519_64.dll, (JAR file, 54KB) gradle-wrapper.jar

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