This library compiles Tor and a few dependencies (zlib, libevent and openssl) into a single Rust library that can be imported like any other Rust crate into existing projects. This provides a way to use Tor without having to ship/download extra binaries - on platforms that allows running them - while for some other platforms like iOS and newer Android versions this is the only way to run Tor since the OS straight up doesn't allow exec'ing binaries.
Keep in mind that the interface exposed here is very very "low-level" (literally just what's in tor_api.h
). Another crate wrapping all of these parts with a nice Rust interface will
be released separately.
By default this library only compiles with the minimal set of libraries needed to run Tor, namely OpenSSL, Libevent and Zlib. The with-lzma
and with-zstd
features can be used to enable the
respective compression algorithms, and the vendored-lzma
and vendored-zstd
features can be used to compile and like those libraries statically instead of using the one provided by your system.
The currently supported platforms are:
- Linux (tested on Fedora 30 and Ubuntu Xenial)
- Android through the NDK
- MacOS
- iOS
- Windows cross-compiled from Linux with
mingw
Coming Soon ™️:
- Windows (natively built)
Command examples to cross-compile for multiple platforms are available in CROSS_COMPILING.md
.
Building on a UNIX-like os shouldn't be too hard, a cargo build
should normally work. Keep in mind that you will need all the "usual" build tools, like a compiler, automake, autoconf, make, in your PATH. On macOS
you can install those tools using brew
.
If you get an aclocal-1.15 not found
or something similar, try to cd into libevent-src
and run autoreconf --force --install
. Repeat in tor-src
if you get the
same issue there, and then re-cargo build
.
Cross-compiling for Android is fairly straightforward, just make sure that you have the NDK toolchain in your PATH
. If you do so, cargo build
will use the right compiler targeting the minimum supported
sdk version of the NDK you are using (generally 16 for armv7
and 21 for everything else).
Cross-compiling for iOS on a Mac that has the Xcode Command Line Tools
installed should work out of the box.
Cross-compiling for Windows using MingW should also work out of the box, as long as you have the right compiler and the required libraries installed. To link the library into binaries it's generally required to also
install the static version of libwinpthreads
.