1
1
Fork 0
mirror of https://github.com/oxen-io/lokinet synced 2023-12-14 06:53:00 +01:00
lokinet/Makefile

260 lines
7.9 KiB
Makefile
Raw Normal View History

all: test
2018-05-16 18:41:20 +02:00
SIGN = gpg --sign --detach
REPO := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
2018-11-13 16:16:14 +01:00
prefix = $(DESTDIR)/usr/local
2018-11-03 14:19:18 +01:00
CC ?= cc
2018-06-28 17:10:25 +02:00
CXX ?= c++
2019-01-21 17:57:12 +01:00
PYTHON ?= python3
2018-12-04 17:16:43 +01:00
SETCAP ?= which setcap && setcap cap_net_admin,cap_net_bind_service=+eip
2018-10-28 15:28:13 +01:00
2018-06-06 19:02:57 +02:00
SHADOW_ROOT ?= $(HOME)/.shadow
SHADOW_BIN=$(SHADOW_ROOT)/bin/shadow
2018-06-07 19:36:17 +02:00
SHADOW_CONFIG=$(REPO)/shadow.config.xml
SHADOW_PLUGIN=$(REPO)/libshadow-plugin-llarp.so
SHADOW_LOG=$(REPO)/shadow.log.txt
2018-06-06 19:02:57 +02:00
2018-08-12 19:22:29 +02:00
SHADOW_SRC ?= $(HOME)/local/shadow
2018-07-20 06:50:28 +02:00
SHADOW_PARSE ?= python $(SHADOW_SRC)/src/tools/parse-shadow.py - -m 0 --packet-data
SHADOW_PLOT ?= python $(SHADOW_SRC)/src/tools/plot-shadow.py -d $(REPO) LokiNET -c $(SHADOW_CONFIG) -r 10000 -e '.*'
TESTNET_ROOT=/tmp/lokinet_testnet_tmp
TESTNET_CONF=$(TESTNET_ROOT)/supervisor.conf
TESTNET_LOG=$(TESTNET_ROOT)/testnet.log
2018-08-12 19:22:29 +02:00
TESTNET_EXE=$(REPO)/lokinet-testnet
TESTNET_CLIENTS ?= 50
TESTNET_SERVERS ?= 50
TESTNET_DEBUG ?= 0
TESTNET_IFNAME ?= lo
TESTNET_BASEPORT ?= 1900
TESTNET_IP ?= 127.0.0.1
TESTNET_NETID ?= loopback
2018-11-06 14:03:10 +01:00
ANDROID_NDK ?= $(HOME)/Android/Ndk
ANDROID_SDK ?= $(HOME)/Android/Sdk
2018-11-06 14:14:14 +01:00
ANDROID_ABI ?= armeabi-v7a
2018-11-06 15:06:09 +01:00
ANDROID_API_LEVEL ?= 18
2018-11-06 14:03:10 +01:00
2018-11-06 15:27:25 +01:00
ANDROID_DIR=$(REPO)/android
JNI_DIR=$(ANDROID_DIR)/jni
ANDROID_MK=$(JNI_DIR)/Android.mk
ANDROID_PROPS=$(ANDROID_DIR)/gradle.properties
ANDROID_LOCAL_PROPS=$(ANDROID_DIR)/local.properties
GRADLE ?= gradle
JAVA_HOME ?= /usr/lib/jvm/default-java
# jsonrpc server
JSONRPC ?= OFF
# native avx2 code
2018-11-26 14:54:53 +01:00
AVX2 ?= OFF
# non x86 target
NON_PC_TARGET ?= OFF
# statically link
2018-11-08 13:31:50 +01:00
STATIC_LINK ?= OFF
# enable network namespace isolation
NETNS ?= OFF
# cross compile?
2018-11-21 22:52:35 +01:00
CROSS ?= OFF
# build liblokinet-shared.so
SHARED_LIB ?= ON
2019-01-12 02:19:24 +01:00
# enable generating coverage
2019-01-13 02:41:25 +01:00
COVERAGE ?= OFF
COVERAGE_OUTDIR ?= "$(TMPDIR)/lokinet-coverage"
# cmake generator type
CMAKE_GEN ?= Unix Makefiles
ifdef NINJA
BUILD_CMD = $(NINJA) -C
CMAKE_GEN = Ninja
else
BUILD_CMD = $(MAKE) -C
endif
2018-10-23 13:29:37 +02:00
BUILD_ROOT = $(REPO)/build
2018-10-27 20:26:08 +02:00
SCAN_BUILD ?= scan-build
2019-02-07 03:02:00 +01:00
CONFIG_CMD = $(shell /bin/echo -n "cd '$(BUILD_ROOT)' && " ; /bin/echo -n "cmake -G'$(CMAKE_GEN)' -DCMAKE_CROSSCOMPILING=$(CROSS) -DSTATIC_LINK_RUNTIME=$(STATIC_LINK) -DUSE_NETNS=$(NETNS) -DUSE_AVX2=$(AVX2) -DUSE_LIBABYSS=$(JSONRPC) -DNON_PC_TARGET=$(NON_PC_TARGET) -DWITH_SHARED=$(SHARED_LIB) '$(REPO)'")
2019-02-07 03:02:00 +01:00
ANALYZE_CONFIG_CMD = $(shell /bin/echo -n "cd '$(BUILD_ROOT)' && " ; /bin/echo -n "$(SCAN_BUILD) cmake -G'$(CMAKE_GEN)' -DCMAKE_CROSSCOMPILING=$(CROSS) -DSTATIC_LINK_RUNTIME=$(STATIC_LINK) -DUSE_NETNS=$(NETNS) -DUSE_AVX2=$(AVX2) -DUSE_LIBABYSS=$(JSONRPC) -DNON_PC_TARGET=$(NON_PC_TARGET) -DWITH_SHARED=$(SHARED_LIB) '$(REPO)'")
2018-10-27 20:26:08 +02:00
2019-02-07 03:02:00 +01:00
COVERAGE_CONFIG_CMD = $(shell /bin/echo -n "cd '$(BUILD_ROOT)' && " ; /bin/echo -n "cmake -G'$(CMAKE_GEN)' -DCMAKE_CROSSCOMPILING=$(CROSS) -DSTATIC_LINK_RUNTIME=$(STATIC_LINK) -DUSE_NETNS=$(NETNS) -DUSE_AVX2=$(AVX2) -DUSE_LIBABYSS=$(JSONRPC) -DNON_PC_TARGET=$(NON_PC_TARGET) -DWITH_SHARED=$(SHARED_LIB) -DWITH_COVERAGE=yes '$(REPO)'")
2019-01-13 02:41:25 +01:00
2018-10-23 13:29:37 +02:00
TARGETS = $(REPO)/lokinet
SIGS = $(TARGETS:=.sig)
EXE = $(BUILD_ROOT)/lokinet
TEST_EXE = $(BUILD_ROOT)/testAll
ABYSS_EXE = $(BUILD_ROOT)/abyss-main
2018-10-23 13:29:37 +02:00
LINT_FILES = $(wildcard llarp/*.cpp)
LINT_CHECK = $(LINT_FILES:.cpp=.cpp-check)
clean:
2018-11-13 14:37:35 +01:00
rm -f $(TARGETS)
2018-10-23 13:29:37 +02:00
rm -rf $(BUILD_ROOT)
2018-06-06 19:02:57 +02:00
rm -f $(SHADOW_PLUGIN) $(SHADOW_CONFIG)
rm -f *.sig
rm -f *.a *.so
2018-05-16 17:59:24 +02:00
2018-10-23 13:29:37 +02:00
debug-configure:
mkdir -p '$(BUILD_ROOT)'
2018-11-18 23:40:35 +01:00
$(CONFIG_CMD) -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=$(CC) -DCMAKE_CXX_COMPILER=$(CXX) -DCMAKE_ASM_FLAGS='$(ASFLAGS)' -DCMAKE_C_FLAGS='$(CFLAGS)' -DCMAKE_CXX_FLAGS='$(CXXFLAGS)'
2018-05-16 17:59:24 +02:00
release-configure: clean
2018-11-03 14:19:18 +01:00
mkdir -p '$(BUILD_ROOT)'
2019-02-07 03:02:00 +01:00
$(CONFIG_CMD) -DSTATIC_LINK_RUNTIME=ON -DCMAKE_BUILD_TYPE=Release -DRELEASE_MOTTO="$(shell cat motto.txt)" -DCMAKE_C_COMPILER=$(CC) -DCMAKE_CXX_COMPILER=$(CXX) -DCMAKE_ASM_FLAGS='$(ASFLAGS)' -DCMAKE_C_FLAGS='$(CFLAGS)' -DCMAKE_CXX_FLAGS='$(CXXFLAGS)'
debug: debug-configure
$(BUILD_CMD) $(BUILD_ROOT)
cp $(EXE) $(REPO)/lokinet
2018-05-21 16:28:15 +02:00
release-compile: release-configure
$(BUILD_CMD) $(BUILD_ROOT)
cp $(EXE) $(REPO)/lokinet
strip $(TARGETS)
$(TARGETS): release-compile
%.sig: $(TARGETS)
$(SIGN) $*
release: $(SIGS)
2018-06-06 15:17:03 +02:00
shadow-configure: clean
2018-11-08 16:15:02 +01:00
mkdir -p $(BUILD_ROOT)
2018-10-23 13:29:37 +02:00
$(CONFIG_CMD) -DCMAKE_BUILD_TYPE=Debug -DSHADOW=ON -DCMAKE_C_COMPILER=$(CC) -DCMAKE_CXX_COMPILER=$(CXX)
2018-06-06 15:17:03 +02:00
2018-06-06 19:02:57 +02:00
shadow-build: shadow-configure
$(BUILD_CMD) $(BUILD_ROOT) clean
$(BUILD_CMD) $(BUILD_ROOT)
2018-06-06 15:17:03 +02:00
2018-07-20 06:50:28 +02:00
shadow-run: shadow-build
$(PYTHON) $(REPO)/contrib/shadow/genconf.py $(SHADOW_CONFIG)
2018-07-20 06:50:28 +02:00
bash -c "$(SHADOW_BIN) -w $$(cat /proc/cpuinfo | grep processor | wc -l) $(SHADOW_CONFIG) | $(SHADOW_PARSE)"
shadow-plot: shadow-run
$(SHADOW_PLOT)
shadow: shadow-plot
testnet-clean: clean
rm -rf $(TESTNET_ROOT)
testnet-configure: testnet-clean
2018-11-08 16:15:02 +01:00
mkdir -p $(BUILD_ROOT)
2018-10-23 13:29:37 +02:00
$(CONFIG_CMD) -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=$(CC) -DCMAKE_CXX_COMPILER=$(CXX) -DTESTNET=1
testnet-build: testnet-configure
$(BUILD_CMD) $(BUILD_ROOT)
2018-11-03 14:19:18 +01:00
testnet:
2018-08-12 19:22:29 +02:00
cp $(EXE) $(TESTNET_EXE)
mkdir -p $(TESTNET_ROOT)
$(PYTHON) $(REPO)/contrib/testnet/genconf.py --bin=$(TESTNET_EXE) --svc=$(TESTNET_SERVERS) --clients=$(TESTNET_CLIENTS) --dir=$(TESTNET_ROOT) --out $(TESTNET_CONF) --connect=4 --ifname=$(TESTNET_IFNAME) --baseport=$(TESTNET_BASEPORT) --ip=$(TESTNET_IP) --netid=$(TESTNET_NETID)
LLARP_DEBUG=$(TESTNET_DEBUG) supervisord -n -d $(TESTNET_ROOT) -l $(TESTNET_LOG) -c $(TESTNET_CONF)
2018-06-06 15:17:03 +02:00
2018-11-13 14:37:35 +01:00
$(TEST_EXE): debug
test: $(TEST_EXE)
$(TEST_EXE)
2018-06-14 16:04:42 +02:00
2018-11-06 15:27:25 +01:00
android-gradle-prepare:
rm -f $(ANDROID_PROPS)
rm -f $(ANDROID_LOCAL_PROPS)
echo "#auto generated don't modify kthnx" >> $(ANDROID_PROPS)
echo "lokinetCMake=$(REPO)/CMakeLists.txt" >> $(ANDROID_PROPS)
echo "org.gradle.parallel=true" >> $(ANDROID_PROPS)
echo "#auto generated don't modify kthnx" >> $(ANDROID_LOCAL_PROPS)
echo "sdk.dir=$(ANDROID_SDK)" >> $(ANDROID_LOCAL_PROPS)
echo "ndk.dir=$(ANDROID_NDK)" >> $(ANDROID_LOCAL_PROPS)
android-gradle: android-gradle-prepare
cd $(ANDROID_DIR) && JAVA_HOME=$(JAVA_HOME) $(GRADLE) clean assemble
2018-11-18 23:40:35 +01:00
2018-11-06 15:27:25 +01:00
android: android-gradle
cp -f $(ANDROID_DIR)/build/outputs/apk/*.apk $(REPO)
2018-11-06 15:06:09 +01:00
2018-11-09 13:49:29 +01:00
windows-configure: clean
mkdir -p '$(BUILD_ROOT)'
2018-11-18 23:40:35 +01:00
$(CONFIG_CMD) -DCMAKE_CROSSCOMPILING=ON -DCMAKE_TOOLCHAIN_FILE='$(REPO)/contrib/cross/mingw.cmake' -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=i686-w64-mingw32-gcc-win32 -DCMAKE_CXX_COMPILER=i686-w64-mingw32-g++-win32 -DCMAKE_ASM_FLAGS='$(ASFLAGS)' -DCMAKE_C_FLAGS='$(CFLAGS)' -DCMAKE_CXX_FLAGS='$(CXXFLAGS)'
2018-11-09 13:49:29 +01:00
windows: windows-configure
$(BUILD_CMD) '$(BUILD_ROOT)'
2018-11-09 13:49:29 +01:00
cp '$(BUILD_ROOT)/lokinet.exe' '$(REPO)/lokinet.exe'
abyss: debug
$(ABYSS_EXE)
2018-05-21 16:28:15 +02:00
format:
clang-format -i $$(find daemon llarp include libabyss | grep -E '\.[h,c](pp)?$$')
analyze-config: clean
2018-10-27 21:03:23 +02:00
mkdir -p '$(BUILD_ROOT)'
$(ANALYZE_CONFIG_CMD)
analyze: analyze-config
$(SCAN_BUILD) $(BUILD_CMD) $(BUILD_ROOT)
2018-10-27 20:26:08 +02:00
2019-01-13 02:41:25 +01:00
coverage-config: clean
mkdir -p '$(BUILD_ROOT)'
$(COVERAGE_CONFIG_CMD)
coverage: coverage-config
$(BUILD_CMD) $(BUILD_ROOT)
2019-01-13 02:41:25 +01:00
$(TEST_EXE) || true # continue even if tests fail
mkdir -p "$(COVERAGE_OUTDIR)"
ifeq ($(CLANG),OFF)
gcovr -r . --branches --html --html-details -o "$(COVERAGE_OUTDIR)/lokinet.html"
else
llvm-profdata merge default.profraw -output $(BUILD_ROOT)/profdata
llvm-cov show -format=html -output-dir="$(COVERAGE_OUTDIR)" -instr-profile "$(BUILD_ROOT)/profdata" "$(BUILD_ROOT)/testAll" $(shell find ./llarp -type f)
endif
lint: $(LINT_CHECK)
%.cpp-check: %.cpp
clang-tidy $^ -- -I$(REPO)/include -I$(REPO)/crypto/include -I$(REPO)/llarp -I$(REPO)/vendor/cppbackport-master/lib
2019-01-21 17:57:12 +01:00
docker-kubernetes:
docker build -f docker/loki-svc-kubernetes.Dockerfile .
install-pylokinet:
cd $(REPO)/contrib/py/pylokinet && $(PYTHON) setup.py install
kubernetes-install: install install-pylokinet
docker-debian:
docker build -f docker/debian.Dockerfile .
docker-fedora:
docker build -f docker/fedora.Dockerfile .
2018-11-13 14:37:35 +01:00
debian-configure:
mkdir -p '$(BUILD_ROOT)'
$(CONFIG_CMD) -DDEBIAN=ON -DRELEASE_MOTTO="$(shell cat $(REPO)/motto.txt)" -DCMAKE_BUILD_TYPE=Release
debian: debian-configure
$(BUILD_CMD) '$(BUILD_ROOT)'
2019-01-12 02:19:24 +01:00
cp $(EXE) lokinet
2018-11-13 14:37:35 +01:00
cp $(BUILD_ROOT)/rcutil lokinet-rcutil
2018-11-13 16:16:14 +01:00
debian-test:
$(TEST_EXE)
2019-01-12 02:19:24 +01:00
install:
$(BUILD_CMD) '$(BUILD_ROOT)' install
2018-11-13 16:16:14 +01:00
.PHONY: debian-install