c5faa86926
Refactors many things in cmake to improve and simplify: - don't use variable indirection for target names; target names are *already* a variable of sorts. (e.g. ${UTIL_LIB} is now just lokinet-util). cmake/basic_definitions.cmake is now gone. - fix LTO enabling to use the standard cmake (3.9+) LTO mechanism rather than shoving a bunch of flag hacks through link_libraries and add_compile_options. This also now enables LTO when building a shared library (because previously the -flto hacks were only turned on in the static code for some reason). - build liblokinet as *either* shared library or static library, but not both. Building both makes things more complicated because they had different names (lokinet-shared or lokinet-static) and seems pointless: you generally want one or the other. Now there is just the liblokinet target, which will be shared or static depending on the value of BUILD_SHARED_LIBS. - Simplify lokinet-cryptography AVX2 code: just build *one* library, and add in the additional AVX2 files when possible, rather than building two and needing to merge them. - Compress STATIC_LINK and STATIC_LINK_RUNTIME into just STATIC_LINK. It makes no sense to use one of these (_RUNTIME) on Windows and the other on non-Windows when they appear to try to do the same thing. - remove a bunch of annotations from `endif(FOO)` -> `endif()`. - move all the tuntap compilation code (including OS-specific source file selection) into vendor/CMakeLists.txt and build tuntap as an intermediate OBJECT library rather than keeping a global variable in 5 different files. - move release motto define to root cmake; it made no sense being duplicated in both unix.cmake and win32.cmake - fix add_log_tag to not stomp on any existing source compile flags with its definition. Also use proper compile definition property instead of cramming it into compile flags. - make optimization/linker flags less hacky. There's no reason for us to force particular optimization flags because the cmake build type already does that (e.g. -DCMAKE_BUILD_TYPE=Release does -O3). Not doing that also silences a bunch of cmake warnings because it thinks "-O0 -g3" etc. are link libraries (which is reasonable: that's what the code was telling cmake they are). - sets the default build type to RelWithDebInfo which gives us `-O2 -g` if you don't specify a build type. - Move PIC up (so that the things loaded in unix.cmake, notably libuv, have it set). - Add a custom `curl` interface library that carries the correct link target and include paths for curl (system or bundled). |
4 years ago | |
---|---|---|
.github | 5 years ago | |
android | 5 years ago | |
cmake | 4 years ago | |
contrib | 4 years ago | |
crypto | 4 years ago | |
daemon | 4 years ago | |
debian | 5 years ago | |
docker | 4 years ago | |
docs | 4 years ago | |
external | 4 years ago | |
include | 4 years ago | |
jni | 4 years ago | |
libabyss | 4 years ago | |
llarp | 4 years ago | |
pybind | 4 years ago | |
test | 4 years ago | |
vendor | 4 years ago | |
win32-setup | 4 years ago | |
.clang-format | 4 years ago | |
.clang-tidy | 5 years ago | |
.dir-locals.el | 6 years ago | |
.dockerignore | 5 years ago | |
.gitattributes | 4 years ago | |
.gitignore | 4 years ago | |
.gitlab-ci.yml | 4 years ago | |
.gitmodules | 4 years ago | |
.travis.yml | 4 years ago | |
CMakeLists.txt | 4 years ago | |
CMakeSettings.json | 5 years ago | |
CONTRIBUTING.md | 5 years ago | |
CONTRIBUTING_es.md | 5 years ago | |
CROSSCOMPILE.md | 5 years ago | |
LICENSE.txt | 4 years ago | |
Makefile | 4 years ago | |
lokinet-bootstrap | 4 years ago | |
lokinet-bootstrap.ps1 | 4 years ago | |
lokinet-docker.ini | 5 years ago | |
module.modulemap | 5 years ago | |
readme.md | 4 years ago | |
readme_es.md | 4 years ago | |
release.md | 5 years ago | |
release_es.md | 5 years ago | |
run-lokinet.bat | 5 years ago | |
testnet_readme.md | 5 years ago |
readme.md
Lokinet
Lokinet is the reference implementation of LLARP (low latency anonymous routing protocol), a layer 3 onion routing protocol.
You can learn more about the high level design of LLARP here
And you can read the LLARP protocol specification here
You can view documentation on how to get started here .
Usage
See the documentation on how to get started.
Also read the Public Testing Guide for installation and other helpful information.
Running on Linux
DO NOT RUN AS ROOT, run as normal user. This requires the binary to have the proper setcaps set by make install
on the binary.
to run as client:
$ lokinet -g
$ lokinet-bootstrap
$ lokinet
to run as relay:
$ lokinet -r -g
$ lokinet-bootstrap
$ lokinet
Running on MacOS/UNIX/BSD
YOU HAVE TO RUN AS ROOT, run using sudo. Elevated privileges are needed to create the virtual tunnel interface.
The MacOS installer places the normal binaries (lokinet
and lokinet-bootstrap
) in /usr/local/bin
which should be in your path, so you can easily use the binaries from your terminal. The installer also nukes your previous config and keys and sets up a fresh config and downloads the latest bootstrap seed.
to run as client:
$ lokinet -g
$ lokinet-bootstrap
$ sudo lokinet
to run as relay:
$ lokinet -r -g
$ lokinet-bootstrap
$ sudo lokinet
Running on Windows
DO NOT RUN AS ELEVATED USER, run as normal user.
to run as client, run the run-lokinet.bat
batch file as your normal user.
Building
Build requirements:
- GNU Make
- CMake
- C++ 14 capable C++ compiler
- gcovr (if generating test coverage with gcc)
- libuv >= 1.27.0
- libsodium >= 1.0.18
- libcurl
Linux
build:
$ sudo apt install build-essential cmake git libcap-dev curl libuv1-dev libsodium-dev libcurl4-openssl-dev pkg-config
$ git clone https://github.com/loki-project/loki-network
$ cd loki-network
$ make
install:
$ sudo make install
alternatively make a debian package with:
$ debuild -uc -us -b
this puts the built packages in ../
Static Linux
static native optimized:
$ make static STATIC_LINK=ON
cross compile fully static armhf (rpi 2 and up)
$ make static STATIC_LINK=ON DOWNLOAD_SODIUM=ON TOOLCHAIN=contrib/cross/armhf.toolchain.cmake
MacOS
build: make sure you have cmake, libuv and xcode command line tools installed
$ git clone https://github.com/loki-project/loki-network
$ cd loki-network
$ make -j8
install:
$ sudo make install
Windows
windows builds are cross compiled from ubuntu linux
build requirements:
- GNU Make
- CMake
- C++ 14 capable C++ compiler
- gcovr (if generating test coverage with gcc)
- libuv >= 1.27.0
- libsodium >= 1.0.17
- libcurl
- nsis
- cpack
setup:
$ sudo apt install build-essential cmake git pkg-config mingw-w64 nsis
building:
$ make windows-release DOWNLOAD_SODIUM=ON STATIC_LINK=ON
Solaris 2.10+
NOTE: Oracle Solaris users need to download/compile the TAP driver from http://www.whiteboard.ne.jp/~admin2/tuntap/
The generated binaries may work on Solaris 2.10 or earlier, you're on your own. (Recommended: -static-libstdc++ -static-libgcc
, and the TAP driver if not already installed on the target system.)
Building on a v2.10 or earlier system is unsupported, and may not even work; recent GCC releases have progressively dropped support for older system releases.
build:
$ sudo pkg install build-essential gcc8 wget tuntap cmake (optional: ninja ccache - from omnios extra) (OmniOS CE)
$ sudo pkg install base-developer-utilities developer-gnu developer-studio-utilities gcc-7 wget cmake (Oracle Solaris, see note)
$ sudo pkg install build-essential wget gcc-8 documentation/tuntap header-tun tun (optional: ninja ccache) (all other SunOS)
$ git clone https://github.com/loki-project/loki-network
$ cd loki-network
$ gmake -j8
install:
$ sudo make install
NetBSD (and other platforms where pkgsrc is the native package mgr)
TODO: add pkgsrc instructions
OpenBSD (uses legacy netbsd pkg manager)
build:
# pkg_add curl cmake git (optional: ninja ccache)
$ git clone https://github.com/loki-project/loki-network
$ cd loki-network
$ gmake -j8
install (root):
# gmake install
FreeBSD
build:
$ pkg install cmake git curl libuv libsodium pkgconf
$ git clone https://github.com/loki-project/loki-network
$ cd loki-network
$ mkdir build
$ cmake -DCMAKE_BUILD_TYPE=Release ..
$ make
install (root):
# make install