nim-sds/README.md

85 lines
2.1 KiB
Markdown
Raw Normal View History

2024-10-14 14:25:07 +04:00
# nim-e2e-reliability
Nim implementation of the e2e reliability protocol
2025-09-17 16:24:34 +02:00
## Building
2026-02-09 18:22:20 +05:30
### Nix (recommended)
2026-02-09 18:22:20 +05:30
Build the shared library:
```bash
nix build --print-out-paths '.?submodules=1#libsds'
2026-02-09 18:22:20 +05:30
```
Build for Android:
```bash
nix build --print-out-paths '.?submodules=1#libsds-android-arm64'
2026-02-09 18:22:20 +05:30
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'
```
2026-02-09 18:22:20 +05:30
### Development shell
2026-02-09 18:22:20 +05:30
Enter the dev shell (sets up vendored dependencies automatically):
```bash
nix develop '.?submodules=1'
2025-09-17 16:24:34 +02:00
```
2026-02-09 18:22:20 +05:30
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
nimble test
```
The built library is output to `build/`.
### Android (without Nix)
2025-09-17 16:24:34 +02:00
Download the latest Android NDK. For example, on Ubuntu with Intel:
2026-02-09 18:22:20 +05:30
```bash
cd ~
wget https://dl.google.com/android/repository/android-ndk-r27c-linux.zip
unzip android-ndk-r27c-linux.zip
```
2026-02-09 18:22:20 +05:30
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
```
2026-02-09 18:22:20 +05:30
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
2026-02-09 18:22:20 +05:30
# Set arch-specific env vars, then build
ARCH=arm64 ANDROID_ARCH=aarch64-linux-android ARCH_DIRNAME=aarch64-linux-android \
nim libsdsAndroid sds.nims
```
2026-02-09 18:22:20 +05:30
| 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` |
2026-02-09 18:22:20 +05:30
The library is output to `build/libsds.so`.