More work on router docker image

- Multi-stage docker build (final image only 15MB!)
- Build in release mode
    - Fix bug with release mode
    - Fix compiler being dumb AF
    - Disable FORTIFY for now
- Enable LTO when making a staticly linked release
- Fix some gcc specific warnings
- Refactor cmake stuff into multiple files
pull/568/head
Michael 5 years ago
parent 81bf00f9bc
commit 0b4d787042
No known key found for this signature in database
GPG Key ID: 2D51757B47E2434C

@ -40,29 +40,7 @@ else()
enable_language(ASM)
endif(MSVC_VERSION)
if(${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
# check if we have the (saner) emulation of epoll here
# it's basically linux epoll but with a sane method of
# dealing with closed file handles that still exist in the
# epoll set
#
# Note that the zombie of Oracle Solaris 2.11.x will NOT have
# this, the header check is the only method we have to distinguish
# them. -rick the svr4 guy
set(SOLARIS ON)
option(USE_POLL "Revert to using poll(2) event loop (useful if targeting Oracle Solaris)" OFF)
set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} -lsocket -lnsl")
add_definitions(-D_POSIX_PTHREAD_SEMANTICS)
INCLUDE(CheckIncludeFiles)
CHECK_INCLUDE_FILES(sys/epoll.h SOLARIS_HAVE_EPOLL)
if (SOLARIS_HAVE_EPOLL AND NOT USE_POLL)
message(STATUS "Using fast emulation of Linux epoll(5) on Solaris.")
add_definitions(-DSOLARIS_HAVE_EPOLL)
else()
set(SOLARIS_HAVE_EPOLL OFF)
message(STATUS "Falling back to poll(2)-based event loop.")
endif()
endif()
include(cmake/solaris.cmake)
if(WIN32)
set(CMAKE_CXX_STANDARD 17)
@ -112,15 +90,7 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-Wthread-safety)
endif()
if (WITH_COVERAGE)
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options( -fprofile-instr-generate -fcoverage-mapping )
link_libraries( -fprofile-instr-generate )
else()
add_compile_options( --coverage -g0 )
link_libraries( --coverage )
endif()
endif()
include(cmake/coverage.cmake)
# these vars are set by the cmake toolchain spec
if (WOW64_CROSS_COMPILE OR WIN64_CROSS_COMPILE)
@ -173,16 +143,21 @@ find_package(Threads REQUIRED)
# not supported on Solaris - system libraries are not available as archives
if(STATIC_LINK_RUNTIME)
if (NOT SOLARIS)
add_compile_options(-static)
add_compile_options(-static -flto)
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static -static-libstdc++ -pthread" )
link_libraries( -static -static-libstdc++ -pthread -flto )
else()
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libstdc++ -static-libgcc -static -Wl,--whole-archive -lpthread -Wl,--no-whole-archive" )
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
# this is messing with release builds
add_compile_options(-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0)
set(CMAKE_AR "gcc-ar")
set(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> qcs <TARGET> <LINK_FLAGS> <OBJECTS>")
set(CMAKE_C_ARCHIVE_FINISH "true")
set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> qcs <TARGET> <LINK_FLAGS> <OBJECTS>")
set(CMAKE_CXX_ARCHIVE_FINISH "true")
link_libraries( -flto -static-libstdc++ -static-libgcc -static -Wl,--whole-archive -lpthread -Wl,--no-whole-archive )
endif()
else()
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libstdc++ -static-libgcc" )
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
link_libraries( -static-libstdc++ -static-libgcc )
endif()
endif(STATIC_LINK_RUNTIME)
@ -207,26 +182,14 @@ if(ASAN)
endif(ASAN)
if(SHADOW)
set(WITH_STATIC OFF)
set(WITH_SHARED ON)
if("${SHADOW_ROOT}" STREQUAL "")
set(SHADOW_ROOT "$ENV{HOME}/.shadow")
endif("${SHADOW_ROOT}" STREQUAL "")
if(EXISTS "${SHADOW_ROOT}")
message(STATUS "SHADOW_ROOT = ${SHADOW_ROOT}")
else()
message(FATAL_ERROR "SHADOW_ROOT path does not exist: '${SHADOW_ROOT}'")
endif(EXISTS "${SHADOW_ROOT}")
set(CMAKE_MODULE_PATH "${SHADOW_ROOT}/share/cmake/Modules")
include_directories(${CMAKE_MODULE_PATH})
include(ShadowTools)
add_compile_options(-fno-inline -fno-strict-aliasing )
add_definitions(-DTESTNET=1)
add_definitions(-DSHADOW_TESTNET)
include_directories(${SHADOW_ROOT}/include)
include(cmake/shadow.cmake)
endif(SHADOW)
# if(CMAKE_BUILD_TYPE MATCHES Release AND CMAKE_CXX_COMPILER_ID MATCHES "Clang|GCC")
# set(OPTIMIZE_FLAGS -UNDEBUG)
# endif()
if(CMAKE_BUILD_TYPE MATCHES "[Dd][Ee][Bb][Uu][Gg]")
set(OPTIMIZE_FLAGS "")
add_definitions(-DLOKINET_DEBUG=1)
@ -300,36 +263,7 @@ function(add_import_library libname)
endfunction()
if(UNIX)
add_definitions(-DUNIX)
add_definitions(-DPOSIX)
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
get_filename_component(LIBTUNTAP_IMPL ${TT_ROOT}/tuntap-unix-linux.c ABSOLUTE)
get_filename_component(EV_SRC "llarp/ev/ev_epoll.cpp" ABSOLUTE)
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Android")
get_filename_component(LIBTUNTAP_IMPL ${TT_ROOT}/tuntap-unix-linux.c ABSOLUTE)
get_filename_component(EV_SRC "llarp/ev/ev_epoll.cpp" ABSOLUTE)
elseif (${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD")
set(LIBTUNTAP_IMPL ${TT_ROOT}/tuntap-unix-openbsd.c ${TT_ROOT}/tuntap-unix-bsd.c)
get_filename_component(EV_SRC "llarp/ev/ev_kqueue.cpp" ABSOLUTE)
elseif (${CMAKE_SYSTEM_NAME} MATCHES "NetBSD")
set(LIBTUNTAP_IMPL ${TT_ROOT}/tuntap-unix-netbsd.c ${TT_ROOT}/tuntap-unix-bsd.c)
get_filename_component(EV_SRC "llarp/ev/ev_kqueue.cpp" ABSOLUTE)
elseif (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD" OR ${CMAKE_SYSTEM_NAME} MATCHES "DragonFly")
set(LIBTUNTAP_IMPL ${TT_ROOT}/tuntap-unix-freebsd.c ${TT_ROOT}/tuntap-unix-bsd.c)
get_filename_component(EV_SRC "llarp/ev/ev_kqueue.cpp" ABSOLUTE)
elseif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
set(LIBTUNTAP_IMPL ${TT_ROOT}/tuntap-unix-darwin.c ${TT_ROOT}/tuntap-unix-bsd.c)
get_filename_component(EV_SRC "llarp/ev/ev_kqueue.cpp" ABSOLUTE)
elseif (${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
set(LIBTUNTAP_IMPL ${TT_ROOT}/tuntap-unix-sunos.c)
if (SOLARIS_HAVE_EPOLL)
get_filename_component(EV_SRC "llarp/ev/ev_epoll.cpp" ABSOLUTE)
else()
get_filename_component(EV_SRC "llarp/ev/ev_sun.cpp" ABSOLUTE)
endif()
else()
message(FATAL_ERROR "Your operating system is not supported yet")
endif()
include(cmake/unix.cmake)
elseif(WIN32)
get_filename_component(LIBTUNTAP_IMPL ${TT_ROOT}/tuntap-windows.c ABSOLUTE)
get_filename_component(EV_SRC "llarp/ev/ev_win32.cpp" ABSOLUTE)

@ -9,6 +9,8 @@ prefix = $(DESTDIR)/usr/local
CC ?= cc
CXX ?= c++
BUILD_TYPE ?= Debug
PYTHON ?= python3
SETCAP ?= which setcap && setcap cap_net_admin,cap_net_bind_service=+eip
@ -51,8 +53,6 @@ ANDROID_LOCAL_PROPS=$(ANDROID_DIR)/local.properties
GRADLE ?= gradle
JAVA_HOME ?= /usr/lib/jvm/default-java
# jsonrpc server
JSONRPC ?= ON
# native avx2 code
AVX2 ?= OFF
# non x86 target
@ -86,17 +86,17 @@ SCAN_BUILD ?= scan-build
UNAME = $(shell which uname)
ifeq ($(shell $(UNAME)),SunOS)
CONFIG_CMD = $(shell gecho -n "cd '$(BUILD_ROOT)' && " ; gecho -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) -DCMAKE_EXPORT_COMPILE_COMMANDS=ON '$(REPO)'")
CONFIG_CMD = $(shell gecho -n "cd '$(BUILD_ROOT)' && " ; gecho -n "cmake -G'$(CMAKE_GEN)' -DCMAKE_CROSSCOMPILING=$(CROSS) -DSTATIC_LINK_RUNTIME=$(STATIC_LINK) -DUSE_NETNS=$(NETNS) -DUSE_AVX2=$(AVX2) -DNON_PC_TARGET=$(NON_PC_TARGET) -DWITH_SHARED=$(SHARED_LIB) -DCMAKE_EXPORT_COMPILE_COMMANDS=ON '$(REPO)'")
ANALYZE_CONFIG_CMD = $(shell gecho -n "cd '$(BUILD_ROOT)' && " ; gecho -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) -DCMAKE_EXPORT_COMPILE_COMMANDS=ON '$(REPO)'")
ANALYZE_CONFIG_CMD = $(shell gecho -n "cd '$(BUILD_ROOT)' && " ; gecho -n "$(SCAN_BUILD) cmake -G'$(CMAKE_GEN)' -DCMAKE_CROSSCOMPILING=$(CROSS) -DSTATIC_LINK_RUNTIME=$(STATIC_LINK) -DUSE_NETNS=$(NETNS) -DUSE_AVX2=$(AVX2) -DNON_PC_TARGET=$(NON_PC_TARGET) -DWITH_SHARED=$(SHARED_LIB) -DCMAKE_EXPORT_COMPILE_COMMANDS=ON '$(REPO)'")
COVERAGE_CONFIG_CMD = $(shell gecho -n "cd '$(BUILD_ROOT)' && " ; gecho -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 -DCMAKE_EXPORT_COMPILE_COMMANDS=ON '$(REPO)'")
COVERAGE_CONFIG_CMD = $(shell gecho -n "cd '$(BUILD_ROOT)' && " ; gecho -n "cmake -G'$(CMAKE_GEN)' -DCMAKE_CROSSCOMPILING=$(CROSS) -DSTATIC_LINK_RUNTIME=$(STATIC_LINK) -DUSE_NETNS=$(NETNS) -DUSE_AVX2=$(AVX2) -DNON_PC_TARGET=$(NON_PC_TARGET) -DWITH_SHARED=$(SHARED_LIB) -DWITH_COVERAGE=yes -DCMAKE_EXPORT_COMPILE_COMMANDS=ON '$(REPO)'")
else
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) -DCMAKE_EXPORT_COMPILE_COMMANDS=ON '$(REPO)'")
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) -DNON_PC_TARGET=$(NON_PC_TARGET) -DWITH_SHARED=$(SHARED_LIB) -DCMAKE_EXPORT_COMPILE_COMMANDS=ON '$(REPO)'")
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) -DCMAKE_EXPORT_COMPILE_COMMANDS=ON '$(REPO)'")
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) -DNON_PC_TARGET=$(NON_PC_TARGET) -DWITH_SHARED=$(SHARED_LIB) -DCMAKE_EXPORT_COMPILE_COMMANDS=ON '$(REPO)'")
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 -DCMAKE_EXPORT_COMPILE_COMMANDS=ON '$(REPO)'")
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) -DNON_PC_TARGET=$(NON_PC_TARGET) -DWITH_SHARED=$(SHARED_LIB) -DWITH_COVERAGE=yes -DCMAKE_EXPORT_COMPILE_COMMANDS=ON '$(REPO)'")
endif
TARGETS = $(REPO)/lokinet
@ -118,11 +118,11 @@ clean:
debug-configure:
mkdir -p '$(BUILD_ROOT)'
$(CONFIG_CMD) -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_FLAGS='$(CFLAGS)' -DCMAKE_CXX_FLAGS='$(CXXFLAGS)'
$(CONFIG_CMD) -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) -DCMAKE_C_FLAGS='$(CFLAGS)' -DCMAKE_CXX_FLAGS='$(CXXFLAGS)'
release-configure: clean
mkdir -p '$(BUILD_ROOT)'
$(CONFIG_CMD) -DSTATIC_LINK_RUNTIME=ON -DCMAKE_BUILD_TYPE=Debug -DRELEASE_MOTTO="$(shell cat motto.txt)" -DCMAKE_C_FLAGS='$(CFLAGS)' -DCMAKE_CXX_FLAGS='$(CXXFLAGS)'
$(CONFIG_CMD) -DSTATIC_LINK_RUNTIME=ON -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) -DRELEASE_MOTTO="$(shell cat motto.txt)" -DCMAKE_C_FLAGS='$(CFLAGS)' -DCMAKE_CXX_FLAGS='$(CXXFLAGS)'
debug: debug-configure
$(MAKE) -C $(BUILD_ROOT)
@ -143,7 +143,7 @@ release: $(SIGS)
shadow-configure: clean
mkdir -p $(BUILD_ROOT)
$(CONFIG_CMD) -DCMAKE_BUILD_TYPE=Debug -DSHADOW=ON
$(CONFIG_CMD) -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) -DSHADOW=ON
shadow-build: shadow-configure
$(MAKE) -C $(BUILD_ROOT)
@ -163,7 +163,7 @@ testnet-clean: clean
testnet-configure: testnet-clean
mkdir -p $(BUILD_ROOT)
$(CONFIG_CMD) -DCMAKE_BUILD_TYPE=Debug -DTESTNET=1
$(CONFIG_CMD) -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) -DTESTNET=1
testnet-build: testnet-configure
$(MAKE) -C $(BUILD_ROOT)
@ -198,7 +198,7 @@ android: android-gradle
windows-debug-configure: clean
mkdir -p '$(BUILD_ROOT)'
$(CONFIG_CMD) -DCMAKE_TOOLCHAIN_FILE='$(REPO)/contrib/cross/mingw.cmake' -DCMAKE_BUILD_TYPE=Debug -DCMAKE_ASM_FLAGS='$(ASFLAGS)' -DCMAKE_C_FLAGS='$(CFLAGS)' -DCMAKE_CXX_FLAGS='$(CXXFLAGS)'
$(CONFIG_CMD) -DCMAKE_TOOLCHAIN_FILE='$(REPO)/contrib/cross/mingw.cmake' -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) -DCMAKE_ASM_FLAGS='$(ASFLAGS)' -DCMAKE_C_FLAGS='$(CFLAGS)' -DCMAKE_CXX_FLAGS='$(CXXFLAGS)'
windows-debug: windows-debug-configure
$(MAKE) -C '$(BUILD_ROOT)'
@ -206,7 +206,7 @@ windows-debug: windows-debug-configure
windows-release-configure: clean
mkdir -p '$(BUILD_ROOT)'
$(CONFIG_CMD) -DCMAKE_TOOLCHAIN_FILE='$(REPO)/contrib/cross/mingw.cmake' -DCMAKE_BUILD_TYPE=Release -DCMAKE_ASM_FLAGS='$(ASFLAGS)' -DCMAKE_C_FLAGS='$(CFLAGS)' -DCMAKE_CXX_FLAGS='$(CXXFLAGS)'
$(CONFIG_CMD) -DCMAKE_TOOLCHAIN_FILE='$(REPO)/contrib/cross/mingw.cmake' -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) -DCMAKE_ASM_FLAGS='$(ASFLAGS)' -DCMAKE_C_FLAGS='$(CFLAGS)' -DCMAKE_CXX_FLAGS='$(CXXFLAGS)'
windows-release: windows-release-configure
$(MAKE) -C '$(BUILD_ROOT)'

@ -0,0 +1,9 @@
if (WITH_COVERAGE)
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options( -fprofile-instr-generate -fcoverage-mapping )
link_libraries( -fprofile-instr-generate )
else()
add_compile_options( --coverage -g0 )
link_libraries( --coverage )
endif()
endif()

@ -0,0 +1,18 @@
set(WITH_STATIC OFF)
set(WITH_SHARED ON)
if("${SHADOW_ROOT}" STREQUAL "")
set(SHADOW_ROOT "$ENV{HOME}/.shadow")
endif("${SHADOW_ROOT}" STREQUAL "")
if(EXISTS "${SHADOW_ROOT}")
message(STATUS "SHADOW_ROOT = ${SHADOW_ROOT}")
else()
message(FATAL_ERROR "SHADOW_ROOT path does not exist: '${SHADOW_ROOT}'")
endif(EXISTS "${SHADOW_ROOT}")
set(CMAKE_MODULE_PATH "${SHADOW_ROOT}/share/cmake/Modules")
include_directories(${CMAKE_MODULE_PATH})
include(ShadowTools)
add_compile_options(-fno-inline -fno-strict-aliasing )
add_definitions(-DTESTNET=1)
add_definitions(-DSHADOW_TESTNET)
include_directories(${SHADOW_ROOT}/include)

@ -0,0 +1,23 @@
if(${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
# check if we have the (saner) emulation of epoll here
# it's basically linux epoll but with a sane method of
# dealing with closed file handles that still exist in the
# epoll set
#
# Note that the zombie of Oracle Solaris 2.11.x will NOT have
# this, the header check is the only method we have to distinguish
# them. -rick the svr4 guy
set(SOLARIS ON)
option(USE_POLL "Revert to using poll(2) event loop (useful if targeting Oracle Solaris)" OFF)
set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} -lsocket -lnsl")
add_definitions(-D_POSIX_PTHREAD_SEMANTICS)
INCLUDE(CheckIncludeFiles)
CHECK_INCLUDE_FILES(sys/epoll.h SOLARIS_HAVE_EPOLL)
if (SOLARIS_HAVE_EPOLL AND NOT USE_POLL)
message(STATUS "Using fast emulation of Linux epoll(5) on Solaris.")
add_definitions(-DSOLARIS_HAVE_EPOLL)
else()
set(SOLARIS_HAVE_EPOLL OFF)
message(STATUS "Falling back to poll(2)-based event loop.")
endif()
endif()

@ -0,0 +1,30 @@
add_definitions(-DUNIX)
add_definitions(-DPOSIX)
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
get_filename_component(LIBTUNTAP_IMPL ${TT_ROOT}/tuntap-unix-linux.c ABSOLUTE)
get_filename_component(EV_SRC "llarp/ev/ev_epoll.cpp" ABSOLUTE)
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Android")
get_filename_component(LIBTUNTAP_IMPL ${TT_ROOT}/tuntap-unix-linux.c ABSOLUTE)
get_filename_component(EV_SRC "llarp/ev/ev_epoll.cpp" ABSOLUTE)
elseif (${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD")
set(LIBTUNTAP_IMPL ${TT_ROOT}/tuntap-unix-openbsd.c ${TT_ROOT}/tuntap-unix-bsd.c)
get_filename_component(EV_SRC "llarp/ev/ev_kqueue.cpp" ABSOLUTE)
elseif (${CMAKE_SYSTEM_NAME} MATCHES "NetBSD")
set(LIBTUNTAP_IMPL ${TT_ROOT}/tuntap-unix-netbsd.c ${TT_ROOT}/tuntap-unix-bsd.c)
get_filename_component(EV_SRC "llarp/ev/ev_kqueue.cpp" ABSOLUTE)
elseif (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD" OR ${CMAKE_SYSTEM_NAME} MATCHES "DragonFly")
set(LIBTUNTAP_IMPL ${TT_ROOT}/tuntap-unix-freebsd.c ${TT_ROOT}/tuntap-unix-bsd.c)
get_filename_component(EV_SRC "llarp/ev/ev_kqueue.cpp" ABSOLUTE)
elseif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
set(LIBTUNTAP_IMPL ${TT_ROOT}/tuntap-unix-darwin.c ${TT_ROOT}/tuntap-unix-bsd.c)
get_filename_component(EV_SRC "llarp/ev/ev_kqueue.cpp" ABSOLUTE)
elseif (${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
set(LIBTUNTAP_IMPL ${TT_ROOT}/tuntap-unix-sunos.c)
if (SOLARIS_HAVE_EPOLL)
get_filename_component(EV_SRC "llarp/ev/ev_epoll.cpp" ABSOLUTE)
else()
get_filename_component(EV_SRC "llarp/ev/ev_sun.cpp" ABSOLUTE)
endif()
else()
message(FATAL_ERROR "Your operating system is not supported yet")
endif()

@ -239,7 +239,7 @@ crypto_hash_sha512_update(crypto_hash_sha512_state *state,
state->count[0] += bitlen[0];
if(inlen < 128 - r)
{
for(i = 0; i < inlen; i++)
for(i = 0; i < inlen || i < 128; i++)
{
state->buf[r + i] = in[i];
}

@ -1,15 +1,19 @@
FROM ubuntu:latest
FROM alpine:latest as builder
RUN apt update && \
apt install -y build-essential cmake git libcap-dev curl ninja-build
RUN apk update && \
apk add build-base cmake git libcap-dev curl ninja bash binutils-gold
WORKDIR /src/
COPY . /src/
RUN make NINJA=ninja
#RUN ./lokinet -r -f
COPY lokinet-docker.ini /root/.lokinet/lokinet.ini
RUN make NINJA=ninja STATIC_LINK=ON BUILD_TYPE=Release
RUN ./lokinet-bootstrap
FROM alpine:latest
COPY lokinet-docker.ini /root/.lokinet/lokinet.ini
COPY --from=builder /src/build/lokinet .
COPY --from=builder /root/.lokinet/bootstrap.signed /root/.lokinet/
CMD ["./lokinet"]
EXPOSE 1090/udp 1190/tcp

@ -366,13 +366,13 @@ namespace llarp
// we are the farthest hop
llarp::LogDebug("We are the farthest hop for ", info);
// send a LRAM down the path
self->context->Logic()->queue_job({self, &SendPathConfirm});
self->context->logic()->queue_job({self, &SendPathConfirm});
}
else
{
// forward upstream
// we are still in the worker thread so post job to logic
self->context->Logic()->queue_job({self, &SendLRCM});
self->context->logic()->queue_job({self, &SendLRCM});
}
}
};

@ -64,7 +64,7 @@ namespace llarp
}
Logic*
PathContext::Logic()
PathContext::logic()
{
return m_Router->logic();
}

@ -675,7 +675,7 @@ namespace llarp
Crypto();
Logic*
Logic();
logic();
AbstractRouter*
Router();

@ -897,14 +897,14 @@ namespace llarp
if(!GetSenderFor(frame.T, si))
return false;
// verify source
if(!frame.Verify(Crypto(), si))
if(!frame.Verify(crypto(), si))
return false;
// remove convotag it doesn't exist
LogWarn("remove convotag T=", frame.T);
RemoveConvoTag(frame.T);
return true;
}
if(!frame.AsyncDecryptAndVerify(EndpointLogic(), Crypto(), p, Worker(),
if(!frame.AsyncDecryptAndVerify(EndpointLogic(), crypto(), p, Worker(),
m_Identity, m_DataHandler))
{
// send discard
@ -912,7 +912,7 @@ namespace llarp
f.R = 1;
f.T = frame.T;
f.F = p->intro.pathID;
if(!f.Sign(Crypto(), m_Identity))
if(!f.Sign(crypto(), m_Identity))
return false;
const routing::PathTransferMessage d(f, frame.F);
return p->SendRoutingMessage(d, router);
@ -1197,7 +1197,7 @@ namespace llarp
}
Crypto*
Endpoint::Crypto()
Endpoint::crypto()
{
return m_Router->crypto();
}

@ -82,7 +82,7 @@ namespace llarp
EndpointNetLoop();
Crypto*
Crypto();
crypto();
llarp_threadpool*
Worker();

@ -195,7 +195,7 @@ namespace llarp
}
currentConvoTag.Randomize();
AsyncKeyExchange* ex = new AsyncKeyExchange(
m_Endpoint->RouterLogic(), m_Endpoint->Crypto(), remoteIdent,
m_Endpoint->RouterLogic(), m_Endpoint->crypto(), remoteIdent,
m_Endpoint->GetIdentity(), currentIntroSet.K, remoteIntro,
m_DataHandler, currentConvoTag);

@ -603,8 +603,9 @@ namespace llarp
OurCrypto()->shorthash(rxKey, llarp_buffer_t(rid));
remoteRC.Clear();
ABSL_ATTRIBUTE_UNUSED void* res = utp_set_userdata(sock, this);
assert(res == this);
assert(s == sock);
assert(utp_set_userdata(sock, this) == this);
GotLIM = std::bind(&InboundSession::InboundLIM, this, _1);
}
@ -693,7 +694,8 @@ namespace llarp
rid = p->GetOurRC().pubkey;
OurCrypto()->shorthash(rxKey, llarp_buffer_t(rid));
assert(utp_set_userdata(sock, this) == this);
ABSL_ATTRIBUTE_UNUSED void* res = utp_set_userdata(sock, this);
assert(res == this);
assert(s == sock);
GotLIM = std::bind(&OutboundSession::OutboundLIM, this, _1);

@ -26,7 +26,7 @@ tmp=/tmp/bootstrap.tmp
# MacOS does not have wget without homebrew but does have curl
# Rick also had indicated most BSDs have curl too
curl "$url" > "$tmp" && \
curl -o "$tmp" "$url" && \
(mv "$tmp" "$HOME/.lokinet/bootstrap.signed" && echo -e "${GREEN}lokinet successfully bootstrapped${NC}" ) \
|| echo -e "${RED}failed to download bootstrap from $url${NC}"
rm -f "$tmp"

Loading…
Cancel
Save