|
|
|
@ -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)
|
|
|
|
@ -96,12 +74,6 @@ if (NOT WIN32)
|
|
|
|
|
add_compile_options(-fPIC)
|
|
|
|
|
endif(NOT WIN32)
|
|
|
|
|
|
|
|
|
|
# turns off those annoying warnings for
|
|
|
|
|
# target-specific crypto code paths not
|
|
|
|
|
# applicable to the host's FPU -rick
|
|
|
|
|
if (WARNINGS_AS_ERRORS)
|
|
|
|
|
add_compile_options(-Werror)
|
|
|
|
|
endif()
|
|
|
|
|
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
|
|
|
|
add_compile_options(-Wno-unknown-warning-option)
|
|
|
|
|
endif()
|
|
|
|
@ -118,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)
|
|
|
|
@ -179,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)
|
|
|
|
|
|
|
|
|
@ -213,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)
|
|
|
|
@ -306,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)
|
|
|
|
|