mirror of https://github.com/oxen-io/lokinet
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 filespull/568/head
parent
81bf00f9bc
commit
0b4d787042
@ -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()
|
@ -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
|
||||
|
Loading…
Reference in New Issue