mirror of
https://github.com/logos-messaging/nim-sds.git
synced 2026-02-17 04:23:09 +00:00
106 lines
2.3 KiB
Markdown
106 lines
2.3 KiB
Markdown
# nim-sds
|
|
|
|
Nim implementation of the e2e reliability protocol.
|
|
|
|
## Quick start
|
|
|
|
```bash
|
|
# Build the shared library
|
|
nix build '.?submodules=1#libsds'
|
|
|
|
# Run tests
|
|
nix develop '.?submodules=1' --command nim test sds.nims
|
|
|
|
# Clean the Nix store
|
|
nix run '.#clean'
|
|
```
|
|
|
|
## Building
|
|
|
|
### Desktop
|
|
|
|
```bash
|
|
nix build --print-out-paths '.?submodules=1#libsds'
|
|
```
|
|
|
|
### Android
|
|
|
|
```bash
|
|
nix build --print-out-paths '.?submodules=1#libsds-android-arm64'
|
|
nix build --print-out-paths '.?submodules=1#libsds-android-amd64'
|
|
nix build --print-out-paths '.?submodules=1#libsds-android-x86'
|
|
nix build --print-out-paths '.?submodules=1#libsds-android-arm'
|
|
```
|
|
|
|
### Development shell
|
|
|
|
Enter the dev shell (sets up vendored dependencies automatically):
|
|
```bash
|
|
nix develop '.?submodules=1'
|
|
```
|
|
|
|
Then build directly with Nim:
|
|
```bash
|
|
# Linux
|
|
nim libsdsDynamicLinux sds.nims
|
|
nim libsdsStaticLinux sds.nims
|
|
|
|
# macOS
|
|
nim libsdsDynamicMac sds.nims
|
|
nim libsdsStaticMac sds.nims
|
|
|
|
# Windows
|
|
nim libsdsDynamicWindows sds.nims
|
|
nim libsdsStaticWindows sds.nims
|
|
```
|
|
|
|
Run tests:
|
|
```bash
|
|
nim test sds.nims
|
|
```
|
|
|
|
The built library is output to `build/`.
|
|
|
|
### Android (without Nix)
|
|
|
|
Download the latest Android NDK. For example, on Ubuntu with Intel:
|
|
|
|
```bash
|
|
cd ~
|
|
wget https://dl.google.com/android/repository/android-ndk-r27c-linux.zip
|
|
unzip android-ndk-r27c-linux.zip
|
|
```
|
|
|
|
Then, add the following to your `~/.bashrc` file:
|
|
```bash
|
|
export ANDROID_NDK_ROOT=$HOME/android-ndk-r27c
|
|
export PATH=$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH
|
|
```
|
|
|
|
Set up vendored dependencies and build:
|
|
```bash
|
|
export NIMBLE_DIR="$(pwd)/vendor/.nimble"
|
|
bash scripts/generate_nimble_links.sh
|
|
ln -s sds.nimble sds.nims
|
|
|
|
# Set arch-specific env vars, then build
|
|
ARCH=arm64 ANDROID_ARCH=aarch64-linux-android ARCH_DIRNAME=aarch64-linux-android \
|
|
nim libsdsAndroid sds.nims
|
|
```
|
|
|
|
| Architecture | ARCH | ANDROID_ARCH | ARCH_DIRNAME |
|
|
| ------------ | ---- | ------------ | ------------ |
|
|
| arm64 | `arm64` | `aarch64-linux-android` | `aarch64-linux-android` |
|
|
| amd64 | `amd64` | `x86_64-linux-android` | `x86_64-linux-android` |
|
|
| x86 | `i386` | `i686-linux-android` | `i686-linux-android` |
|
|
| arm | `arm` | `armv7a-linux-androideabi` | `arm-linux-androideabi` |
|
|
|
|
The library is output to `build/libsds.so`.
|
|
|
|
## Maintenance
|
|
|
|
```bash
|
|
# Clean unreferenced Nix store packages
|
|
nix run '.#clean'
|
|
```
|