# nim-sds Nim implementation of the e2e reliability protocol. ## Prerequisites - [Nix](https://nixos.org/download/) package manager ## Quick start ```bash git clone https://github.com/logos-messaging/nim-sds.git cd nim-sds # Build the shared library nix build '.#libsds' # Run tests nix develop --command nimble test ``` ## Building ### Desktop ```bash nix build --print-out-paths '.#libsds' ``` ### Android ```bash nix build --print-out-paths '.#libsds-android-arm64' nix build --print-out-paths '.#libsds-android-amd64' nix build --print-out-paths '.#libsds-android-x86' nix build --print-out-paths '.#libsds-android-arm' ``` ### iOS ```bash nix build --print-out-paths '.#libsds-ios' ```
Development shell Enter the dev shell: ```bash nix develop ``` Build using nimble tasks: ```bash # Dynamic library (auto-detects OS) nimble libsdsDynamicMac # macOS nimble libsdsDynamicLinux # Linux nimble libsdsDynamicWindows # Windows # Static library nimble libsdsStaticMac # macOS nimble libsdsStaticLinux # Linux nimble libsdsStaticWindows # Windows ``` Run tests: ```bash nimble test ``` The built library is output to `build/`.
Android (without Nix) Download the latest Android NDK: ```bash cd ~ wget https://dl.google.com/android/repository/android-ndk-r27c-linux.zip unzip android-ndk-r27c-linux.zip ``` Add to `~/.bashrc`: ```bash export ANDROID_NDK_ROOT=$HOME/android-ndk-r27c export PATH=$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH ``` Then build: ```bash ARCH=arm64 nimble libsdsAndroid ``` | Architecture | Command | | ------------ | ------- | | arm64 | `ARCH=arm64 nimble libsdsAndroid` | | amd64 | `ARCH=amd64 nimble libsdsAndroid` | | x86 | `ARCH=x86 nimble libsdsAndroid` | The library is output to `build/libsds.so`.
Dependency management Dependencies are managed by [Nimble](https://github.com/nim-lang/nimble) and pinned via `nimble.lock`. To set up dependencies locally: ```bash nimble setup -l ``` To update dependencies: ```bash nimble lock ``` After updating `nimble.lock`, the Nix `outputHash` in `nix/deps.nix` must be recalculated by running `nix build` and updating the hash from the error output.
## License Licensed under either of [Apache License, Version 2.0](LICENSE-APACHE) or [MIT license](LICENSE-MIT) at your option.