Prerequisites: python3; gcc and/or clang. For sysadmins, to install in /usr/local/{include,lib,bin}: ./configure && make -j8 install For users, to install in $HOME/{include,lib,bin}: ./configure --prefix=$HOME && make -j8 install For distributors creating a package: Run ./configure --prefix=/usr && make -j8 and then follow your usual packaging procedures for the .h files in build/0/package/include, the libraries in build/0/package/lib, and the test programs in build/0/package/bin. The long-term plan is to split off some components of lib25519 into their own packages, and distributors may already wish to package these components accordingly: * -lcpucycles will be its own package. * -lrandombytes_kernel will be its own package. * -lrandombytes will be an indirection layer providing randombytes.h and supporting an ecosystem of randombytes() implementations (via, e.g., Debian's /etc/alternatives), such as -lrandombytes_kernel, -lrandombytes_per_process_rng, etc. * -l25519 will be the main lib25519 package, using -lrandombytes and -lcpucycles. lib25519-test already uses -l25519 without -lrandombytes: it substitutes its own knownrandombytes() to generate test vectors. More options: You can run ./configure --host=amd64 to override ./configure's guess of the architecture that it should compile for. The architecture controls which implementations to try (see crypto_*/*/*/architectures) and which compilers to try (see compilers/*). Inside the build directory, 0 is symlinked to amd64 for --host=amd64. Running "make clean" removes build/amd64. Re-running ./configure automatically starts with "make clean". A subsequent ./configure --host=arm will create build/arm and symlink 0 -> arm, without touching an existing build/amd64. However, cross-compilers aren't yet selected automatically.