RX/TX improvements, build process improvements
This commit is contained in:
112
CMakeLists.txt
112
CMakeLists.txt
@@ -1,8 +1,6 @@
|
||||
cmake_minimum_required (VERSION 3.0)
|
||||
project (zt)
|
||||
|
||||
set (CMAKE_VERBOSE_MAKEFILE OFF)
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# | PLATFORM/FEATURE AND IDE DETECTION |
|
||||
# -----------------------------------------------------------------------------
|
||||
@@ -45,10 +43,12 @@ endif ()
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
if (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "debug")
|
||||
set (CMAKE_VERBOSE_MAKEFILE ON)
|
||||
set (CMAKE_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/bin)
|
||||
set (LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/lib)
|
||||
endif()
|
||||
if (CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "release")
|
||||
set (CMAKE_VERBOSE_MAKEFILE OFF)
|
||||
set (CMAKE_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/bin)
|
||||
set (LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/lib)
|
||||
endif()
|
||||
@@ -81,34 +81,57 @@ endif ()
|
||||
# | FLAGS |
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
set (SILENCE "-Wno-unused-parameter \
|
||||
-Wno-format \
|
||||
-Wno-tautological-constant-out-of-range-compare \
|
||||
-Wno-macro-redefined -Wno-parentheses-equality \
|
||||
-Wno-sign-compare \
|
||||
-Wno-unused-parameter \
|
||||
-Wno-unused-variable \
|
||||
-Wno-missing-field-initializers")
|
||||
set (SILENCE "${SILENCE} -Wno-unused-parameter")
|
||||
set (SILENCE "${SILENCE} -Wno-format")
|
||||
set (SILENCE "${SILENCE} -Wno-tautological-constant-out-of-range-compare ")
|
||||
set (SILENCE "${SILENCE} -Wno-macro-redefined")
|
||||
set (SILENCE "${SILENCE} -Wno-parentheses-equality")
|
||||
set (SILENCE "${SILENCE} -Wno-sign-compare")
|
||||
set (SILENCE "${SILENCE} -Wno-unused-variable")
|
||||
set (SILENCE "${SILENCE} -Wno-missing-field-initializers")
|
||||
set (SILENCE "${SILENCE} -Wno-unused-parameter")
|
||||
|
||||
set (LIBZT_FLAGS "-D_USING_LWIP_DEFINITIONS_=1 -DZT_SDK")
|
||||
set (ZTCORE_FLAGS "-DZT_USE_MINIUPNPC=1 -DZT_SOFTWARE_UPDATE_DEFAULT=0")
|
||||
set (ZT_FLAGS "${ZT_FLAGS} -DZT_USE_MINIUPNPC=1")
|
||||
set (ZT_FLAGS "${ZT_FLAGS} -DZT_SOFTWARE_UPDATE_DEFAULT=0")
|
||||
set (ZT_FLAGS "${ZT_FLAGS} -D_USING_LWIP_DEFINITIONS_=0")
|
||||
set (ZT_FLAGS "${ZT_FLAGS} -DZT_SDK=1")
|
||||
|
||||
set (DEBUG_OPTIMIZATION "-O3")
|
||||
set (RELEASE_OPTIMIZATION "-O3")
|
||||
|
||||
if (BUILDING_WIN)
|
||||
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
|
||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc -DNOMINMAX")
|
||||
else ()
|
||||
set (CMAKE_C_FLAGS
|
||||
"${SILENCE} ${CMAKE_C_FLAGS} ${LIBZT_FLAGS} -fstack-protector -O3")
|
||||
"${CMAKE_C_FLAGS} \
|
||||
${ZT_FLAGS} \
|
||||
-fstack-protector")
|
||||
|
||||
set (CMAKE_C_FLAGS_DEBUG
|
||||
"${CMAKE_C_FLAGS_DEBUG} ${LIBZT_FLAGS} -DLWIP_DEBUG=1 -DLIBZT_DEBUG=1")
|
||||
"${CMAKE_C_FLAGS_DEBUG} \
|
||||
${DEBUG_OPTIMIZATION} \
|
||||
-DLWIP_DEBUG=1 -DLIBZT_DEBUG=1")
|
||||
|
||||
set (CMAKE_C_FLAGS_RELEASE
|
||||
"${SILENCE} ${CMAKE_C_FLAGS_RELEASE} ${LIBZT_FLAGS} -fstack-protector -O3")
|
||||
"${SILENCE} \
|
||||
${CMAKE_C_FLAGS_RELEASE} \
|
||||
${RELEASE_OPTIMIZATION} \
|
||||
-fstack-protector")
|
||||
|
||||
set (CMAKE_CXX_FLAGS
|
||||
"${CMAKE_CXX_FLAGS} ${SILENCE} ${LIBZT_FLAGS} -Wall -Wextra -std=c++11 -O3")
|
||||
"${CMAKE_CXX_FLAGS} \
|
||||
${ZT_FLAGS} -Wall -Wextra -std=c++11")
|
||||
|
||||
set (CMAKE_CXX_FLAGS_DEBUG
|
||||
"${CMAKE_CXX_FLAGS_DEBUG} ${LIBZT_FLAGS} -std=c++11 -DLWIP_DEBUG=1 -DLIBZT_DEBUG=1")
|
||||
"${CMAKE_CXX_FLAGS_DEBUG} \
|
||||
${DEBUG_OPTIMIZATION} \
|
||||
-DLWIP_DEBUG=1 -DLIBZT_DEBUG=1")
|
||||
|
||||
set (CMAKE_CXX_FLAGS_RELEASE
|
||||
"${CMAKE_CXX_FLAGS_RELEASE} ${SILENCE} ${LIBZT_FLAGS} -std=c++11 -O3")
|
||||
"${CMAKE_CXX_FLAGS_RELEASE} \
|
||||
${SILENCE} \
|
||||
${RELEASE_OPTIMIZATION}")
|
||||
endif ()
|
||||
|
||||
if (BUILDING_LINUX AND NOT BUILDING_ANDROID)
|
||||
@@ -119,7 +142,7 @@ endif ()
|
||||
# | JNI |
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
if (SDK_JNI)
|
||||
if (SDK_JNI OR BUILDING_ANDROID)
|
||||
MESSAGE (STATUS "Looking for JNI")
|
||||
|
||||
if (BUILDING_WIN)
|
||||
@@ -155,7 +178,7 @@ if (SDK_JNI)
|
||||
message (STATUS "JNI not found")
|
||||
endif ()
|
||||
|
||||
if ((BUILDING_ANDROID OR JNI) AND JNI_FOUND)
|
||||
if (JNI_FOUND)
|
||||
add_definitions (-DSDK_JNI=1)
|
||||
endif ()
|
||||
endif () # SDK_JNI
|
||||
@@ -268,7 +291,7 @@ endif ()
|
||||
# zto_obj
|
||||
add_library (zto_obj OBJECT ${zerotiercoreSrcGlob})
|
||||
set_target_properties (zto_obj PROPERTIES
|
||||
COMPILE_FLAGS "${SILENCE} -std=c++11 -DZT_USE_MINIUPNPC=1 -DZT_SOFTWARE_UPDATE_DEFAULT=0")
|
||||
COMPILE_FLAGS "${ZT_FLAGS}")
|
||||
if (BUILDING_WIN)
|
||||
target_link_libraries (zto_obj ws2_32)
|
||||
target_link_libraries (zto_obj ${shlwapi_LIBRARY_PATH})
|
||||
@@ -282,11 +305,14 @@ set_target_properties (libnatpmp_obj PROPERTIES COMPILE_FLAGS "")
|
||||
# miniupnpc_obj
|
||||
add_library (miniupnpc_obj OBJECT ${libminiupnpcSrcGlob})
|
||||
target_compile_definitions(miniupnpc_obj
|
||||
PRIVATE MACOSX ZT_USE_MINIUPNPC MINIUPNP_STATICLIB _DARWIN_C_SOURCE
|
||||
PRIVATE ZT_USE_MINIUPNPC MINIUPNP_STATICLIB _DARWIN_C_SOURCE
|
||||
MINIUPNPC_SET_SOCKET_TIMEOUT MINIUPNPC_GET_SRC_ADDR _BSD_SOURCE
|
||||
_DEFAULT_SOURCE MINIUPNPC_VERSION_STRING=\"2.0\"
|
||||
UPNP_VERSION_STRING=\"UPnP/1.1\" ENABLE_STRNATPMPERR
|
||||
OS_STRING=\"Darwin/15.0.0\")
|
||||
if (BUILDING_DARWIN AND NOT IOS_FRAMEWORK)
|
||||
target_compile_definitions(miniupnpc_obj PRIVATE MACOSX)
|
||||
endif ()
|
||||
|
||||
# lwip_obj
|
||||
add_library (lwip_obj OBJECT ${lwipSrcGlob})
|
||||
@@ -294,13 +320,41 @@ set_target_properties (lwip_obj PROPERTIES COMPILE_FLAGS "")
|
||||
|
||||
# libzt_obj
|
||||
add_library (libzt_obj OBJECT ${libztSrcGlob})
|
||||
set_target_properties (libzt_obj PROPERTIES COMPILE_FLAGS "-std=c++11")
|
||||
set_target_properties (libzt_obj PROPERTIES COMPILE_FLAGS "${ZT_FLAGS}")
|
||||
|
||||
# PIC
|
||||
|
||||
# zto_pic
|
||||
add_library (zto_pic ${zerotiercoreSrcGlob})
|
||||
set_target_properties (zto_pic PROPERTIES
|
||||
COMPILE_FLAGS "${ZT_FLAGS}"
|
||||
POSITION_INDEPENDENT_CODE ON)
|
||||
|
||||
# libnatpmp_pic
|
||||
add_library (natpmp_pic ${libnatpmpSrcGlob})
|
||||
set_target_properties (natpmp_pic PROPERTIES
|
||||
POSITION_INDEPENDENT_CODE ON)
|
||||
|
||||
# miniupnpc_pic
|
||||
add_library (miniupnpc_pic ${libminiupnpcSrcGlob})
|
||||
target_compile_definitions(miniupnpc_pic
|
||||
PRIVATE MACOSX ZT_USE_MINIUPNPC MINIUPNP_STATICLIB _DARWIN_C_SOURCE
|
||||
MINIUPNPC_SET_SOCKET_TIMEOUT MINIUPNPC_GET_SRC_ADDR _BSD_SOURCE
|
||||
_DEFAULT_SOURCE MINIUPNPC_VERSION_STRING=\"2.0\"
|
||||
UPNP_VERSION_STRING=\"UPnP/1.1\" ENABLE_STRNATPMPERR
|
||||
OS_STRING=\"Darwin/15.0.0\")
|
||||
set_target_properties (miniupnpc_pic PROPERTIES
|
||||
POSITION_INDEPENDENT_CODE ON)
|
||||
|
||||
# lwip_pic
|
||||
add_library (lwip_pic ${lwipSrcGlob})
|
||||
set_target_properties (lwip_pic PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
||||
add_library (zto_pic ${zerotiercoreSrcGlob})
|
||||
set_target_properties (zto_pic PROPERTIES COMPILE_FLAGS "${SILENCE} -std=c++11")
|
||||
set_target_properties (zto_pic PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
||||
|
||||
# libzt_pic
|
||||
add_library (zt_pic ${libztSrcGlob})
|
||||
set_target_properties (zt_pic PROPERTIES
|
||||
COMPILE_FLAGS "${ZT_FLAGS}"
|
||||
POSITION_INDEPENDENT_CODE ON)
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# | BUILD TARGETS (FINAL PRODUCT) |
|
||||
@@ -339,12 +393,12 @@ $<TARGET_OBJECTS:lwip_obj> ${libztSrcGlob})
|
||||
set_target_properties (${STATIC_LIB_NAME} PROPERTIES
|
||||
OUTPUT_NAME zt
|
||||
LIBRARY_OUTPUT_DIRECTORY ${INTERMEDIATE_LIBRARY_OUTPUT_PATH})
|
||||
set_target_properties (${STATIC_LIB_NAME} PROPERTIES COMPILE_FLAGS "${ZT_FLAGS}")
|
||||
|
||||
# libzt.so/dylib/dll
|
||||
add_library (${DYNAMIC_LIB_NAME} SHARED ${libztSrcGlob})
|
||||
message (STATUS ${libztSrcGlob})
|
||||
target_link_libraries (${DYNAMIC_LIB_NAME} lwip_pic zto_pic)
|
||||
set_target_properties (${DYNAMIC_LIB_NAME} PROPERTIES COMPILE_FLAGS "${SILENCE} -std=c++11 -DZT_SDK")
|
||||
target_link_libraries (${DYNAMIC_LIB_NAME} zt_pic lwip_pic zto_pic natpmp_pic miniupnpc_pic)
|
||||
set_target_properties (${DYNAMIC_LIB_NAME} PROPERTIES COMPILE_FLAGS "${ZT_FLAGS}")
|
||||
set_target_properties (${DYNAMIC_LIB_NAME} PROPERTIES OUTPUT_NAME ${DYNAMIC_LIB_OUTPUT_NAME}
|
||||
WINDOWS_EXPORT_ALL_SYMBOLS true)
|
||||
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
|
||||
|
||||
1
Makefile
1
Makefile
@@ -19,6 +19,7 @@ patch:
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
-rm -rf ports/android/app/build
|
||||
-rm -rf tmp lib bin products
|
||||
-find ports -name ".externalNativeBuild" -exec rm -r "{}" \;
|
||||
-rm -f *.o *.s *.exp *.lib *.core core
|
||||
|
||||
@@ -121,7 +121,7 @@ host_jar()
|
||||
# Build dynamic library
|
||||
BUILD_DIR=$(pwd)/tmp/${NORMALIZED_OSNAME}-$(uname -m)-jni-$1
|
||||
UPPERCASE_CONFIG="$(tr '[:lower:]' '[:upper:]' <<< ${1:0:1})${1:1}"
|
||||
cmake -H. -B$BUILD_DIR -DCMAKE_BUILD_TYPE=$UPPERCASE_CONFIG "-DJNI=1"
|
||||
cmake -H. -B$BUILD_DIR -DCMAKE_BUILD_TYPE=$UPPERCASE_CONFIG -DSDK_JNI=ON "-DSDK_JNI=1"
|
||||
cmake --build $BUILD_DIR $BUILD_CONCURRENCY
|
||||
# Copy dynamic library from previous build step
|
||||
# And, remove any lib that may exist prior. We don't want accidental successes
|
||||
@@ -186,7 +186,7 @@ android()
|
||||
mkdir -p $LIB_OUTPUT_DIR
|
||||
# Build
|
||||
UPPERCASE_CONFIG="$(tr '[:lower:]' '[:upper:]' <<< ${1:0:1})${1:1}"
|
||||
CMAKE_FLAGS=$CMAKE_FLAGS" -DSDK_JNI=1"
|
||||
CMAKE_FLAGS="-DSDK_JNI=1 -DSDK_JNI=ON"
|
||||
cd $ANDROID_PROJ_DIR
|
||||
./gradlew assemble$UPPERCASE_CONFIG # assembleRelease / assembleDebug
|
||||
mv $ANDROID_PROJ_DIR/app/build/outputs/aar/app-$1.aar \
|
||||
@@ -200,8 +200,11 @@ cleanup()
|
||||
find $(pwd)/lib -type f -name 'liblwip_pic.a' -exec rm {} +
|
||||
find $(pwd)/lib -type f -name 'liblwip.a' -exec rm {} +
|
||||
find $(pwd)/lib -type f -name 'libminiupnpc.a' -exec rm {} +
|
||||
find $(pwd)/lib -type f -name 'libminiupnpc_pic.a' -exec rm {} +
|
||||
find $(pwd)/lib -type f -name 'libnatpmp.a' -exec rm {} +
|
||||
find $(pwd)/lib -type f -name 'libnatpmp_pic.a' -exec rm {} +
|
||||
find $(pwd)/lib -type f -name 'libzto_pic.a' -exec rm {} +
|
||||
find $(pwd)/lib -type f -name 'libzt_pic.a' -exec rm {} +
|
||||
find $(pwd)/lib -type f -name 'libzerotiercore.a' -exec rm {} +
|
||||
}
|
||||
|
||||
|
||||
@@ -327,6 +327,7 @@ void *_zts_run_callbacks(void *thread_id)
|
||||
jint rs = jvm->DetachCurrentThread();
|
||||
pthread_exit(0);
|
||||
#endif
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -275,6 +275,8 @@ public:
|
||||
/* Packet input concurrency is disabled intentially since it
|
||||
would force the user-space network stack to constantly re-order
|
||||
frames, resulting in lower RX performance */
|
||||
|
||||
/*
|
||||
_incomingPacketConcurrency = 1;
|
||||
// std::max((unsigned long)1,std::min((unsigned long)16,(unsigned long)std::thread::hardware_concurrency()));
|
||||
char *envPool = std::getenv("INCOMING_PACKET_CONCURRENCY");
|
||||
@@ -311,7 +313,7 @@ public:
|
||||
}
|
||||
}
|
||||
}));
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
virtual ~OneServiceImpl()
|
||||
@@ -713,27 +715,24 @@ public:
|
||||
|
||||
inline void phyOnDatagram(PhySocket *sock,void **uptr,const struct sockaddr *localAddr,const struct sockaddr *from,void *data,unsigned long len)
|
||||
{
|
||||
const uint64_t now = OSUtils::now();
|
||||
if ((len >= 16)&&(reinterpret_cast<const InetAddress *>(from)->ipScope() == InetAddress::IP_SCOPE_GLOBAL))
|
||||
_lastDirectReceiveFromGlobal = now;
|
||||
|
||||
OneServiceIncomingPacket *pkt;
|
||||
_incomingPacketMemoryPoolLock.lock();
|
||||
if (_incomingPacketMemoryPool.empty()) {
|
||||
pkt = new OneServiceIncomingPacket;
|
||||
} else {
|
||||
pkt = _incomingPacketMemoryPool.back();
|
||||
_incomingPacketMemoryPool.pop_back();
|
||||
_lastDirectReceiveFromGlobal = OSUtils::now();
|
||||
const ZT_ResultCode rc = _node->processWirePacket(
|
||||
(void *)0,
|
||||
OSUtils::now(),
|
||||
reinterpret_cast<int64_t>(sock),
|
||||
reinterpret_cast<const struct sockaddr_storage *>(from), // Phy<> uses sockaddr_storage, so it'll always be that big
|
||||
data,
|
||||
len,
|
||||
&_nextBackgroundTaskDeadline);
|
||||
if (ZT_ResultCode_isFatal(rc)) {
|
||||
char tmp[256];
|
||||
OSUtils::ztsnprintf(tmp,sizeof(tmp),"fatal error code from processWirePacket: %d",(int)rc);
|
||||
Mutex::Lock _l(_termReason_m);
|
||||
_termReason = ONE_UNRECOVERABLE_ERROR;
|
||||
_fatalErrorMessage = tmp;
|
||||
this->terminate();
|
||||
}
|
||||
_incomingPacketMemoryPoolLock.unlock();
|
||||
|
||||
pkt->now = now;
|
||||
pkt->sock = reinterpret_cast<int64_t>(sock);
|
||||
ZT_FAST_MEMCPY(&(pkt->from),from,sizeof(struct sockaddr_storage));
|
||||
pkt->size = (unsigned int)len;
|
||||
ZT_FAST_MEMCPY(pkt->data,data,len);
|
||||
|
||||
_incomingPacketQueue.postLimit(pkt,16 * _incomingPacketConcurrency);
|
||||
}
|
||||
|
||||
inline void phyOnTcpConnect(PhySocket *sock,void **uptr,bool success) {}
|
||||
|
||||
@@ -152,7 +152,7 @@ JNIEXPORT jint JNICALL Java_com_zerotier_libzt_ZeroTier_accept(
|
||||
{
|
||||
struct sockaddr_storage ss;
|
||||
socklen_t addrlen = sizeof(struct sockaddr_storage);
|
||||
int retval =zts_accept(fd, (struct sockaddr *)&ss, &addrlen);
|
||||
int retval = zts_accept(fd, (struct sockaddr *)&ss, &addrlen);
|
||||
ss2zta(env, &ss, addr);
|
||||
return retval > -1 ? retval : -(zts_errno);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user