nim-e2e-reliability

Nim implementation of the e2e reliability protocol

Building

Build the shared library:

nix build --print-out-paths '.?submodules=1#libsds'

Build for Android:

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):

nix develop '.?submodules=1'

Then build directly with nim:

# 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:

nimble test

The built library is output to build/.

Android (without Nix)

Download the latest Android NDK. For example, on Ubuntu with Intel:

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:

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:

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.

Description
Nim implementation of the e2e reliability protocol
Readme
Languages
Nim 85.7%
Nix 7%
Makefile 3.9%
Shell 1.8%
C 1.6%