From 2ab0a3c26dedb2f298d0ce8282f43f109cd01070 Mon Sep 17 00:00:00 2001 From: Dmytro Bogovych Date: Sun, 14 Nov 2021 15:43:50 +0000 Subject: [PATCH] - changes for MUSL builds --- src/CMakeLists.txt | 7 ++ src/libs/ice/CMakeLists.txt | 4 ++ src/libs/ice/ICEAddress.cpp | 19 +++--- src/libs/ice/ICENetworkHelper.cpp | 68 +++++++++---------- src/libs/resiprocate/rutil/RecursiveMutex.cxx | 4 ++ 5 files changed, 59 insertions(+), 43 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 89af891e..229bcf51 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -62,6 +62,7 @@ set (USE_EVS_CODEC OFF CACHE BOOL "Use EVS codec." ) set (USE_OPUS_CODEC OFF CACHE BOOL "Use Opus codec." ) set (USE_PVQA_LIB OFF CACHE BOOL "Build with Sevana PVQA library" ) set (USE_AQUA_LIB OFF CACHE BOOL "Build with Sevana AQuA library" ) +set (USE_MUSL OFF CACHE BOOL "Build with MUSL library" ) # PIC code by default set (CMAKE_POSITION_INDEPENDENT_CODE ON) @@ -82,10 +83,16 @@ if (CMAKE_SYSTEM MATCHES "Linux*") add_definitions (-DTARGET_LINUX) endif() + if (CMAKE_SYSTEM MATCHES "Darwin*") add_definitions (-DTARGET_OSX) endif() +if (USE_MUSL) + add_definitions(-DTARGET_MUSL) +endif() + + if (USE_AQUA_LIB) message("Use AQuA library") add_definitions( -DUSE_AQUA_LIBRARY ) diff --git a/src/libs/ice/CMakeLists.txt b/src/libs/ice/CMakeLists.txt index ee81d3e2..a450c9dc 100644 --- a/src/libs/ice/CMakeLists.txt +++ b/src/libs/ice/CMakeLists.txt @@ -34,6 +34,10 @@ set (ICE_STACK_SOURCES ICEAddress.cpp ICETime.cpp ICETransactionList.cpp) +if (TARGET_MUSL) + add_definitions(-DTARGET_MUSL) +endif() + add_definitions(-DUSE_NATIVE_SMARTPTR -D_WINSOCK_DEPRECATED_NO_WARNINGS) add_library(ice_stack ${ICE_STACK_SOURCES}) diff --git a/src/libs/ice/ICEAddress.cpp b/src/libs/ice/ICEAddress.cpp index 01c6ff39..f8633f69 100644 --- a/src/libs/ice/ICEAddress.cpp +++ b/src/libs/ice/ICEAddress.cpp @@ -24,6 +24,7 @@ # include #else # include + # if /*defined(TARGET_LINUX) || */ defined(TARGET_ANDROID) # include # endif @@ -464,15 +465,15 @@ unsigned char* NetworkAddress::ipBytes() const #endif case AF_INET6: #ifdef TARGET_WIN - return (unsigned char*)mAddr6.sin6_addr.u.Byte; -#elif defined(TARGET_OSX) || defined(TARGET_IOS) - return (unsigned char*)&mAddr6.sin6_addr.__u6_addr.__u6_addr8; -#elif defined(TARGET_OPENWRT) - return (unsigned char*)&mAddr6.sin6_addr.__in6_union.__s6_addr; -#elif defined(TARGET_LINUX) - return (unsigned char*)&mAddr6.sin6_addr.__in6_u.__u6_addr8; -#elif defined(TARGET_ANDROID) - return (unsigned char*)&mAddr6.sin6_addr.in6_u.u6_addr8; + return (unsigned char*)mAddr6.sin6_addr.u.Byte; +#elif defined(TARGET_OSX) || defined(TARGET_IOS) + return (unsigned char*)&mAddr6.sin6_addr.__u6_addr.__u6_addr8; +#elif defined(TARGET_OPENWRT) || defined(TARGET_MUSL) + return (unsigned char*)&mAddr6.sin6_addr.__in6_union.__s6_addr; +#elif defined(TARGET_LINUX) + return (unsigned char*)&mAddr6.sin6_addr.__in6_u.__u6_addr8; +#elif defined(TARGET_ANDROID) + return (unsigned char*)&mAddr6.sin6_addr.in6_u.u6_addr8; #endif } assert(0); diff --git a/src/libs/ice/ICENetworkHelper.cpp b/src/libs/ice/ICENetworkHelper.cpp index 6674ba3a..398ab365 100644 --- a/src/libs/ice/ICENetworkHelper.cpp +++ b/src/libs/ice/ICENetworkHelper.cpp @@ -434,40 +434,40 @@ bool NetworkHelper::hasIPv6() const if (item.family() == AF_INET6 && (item.isLAN() || item.isPublic())) return true; return false; -} - -void NetworkHelper::NetworkToHost(const in6_addr& addr6, uint32_t* output) -{ - for (int i=0; i<4; i++) -#if defined(TARGET_WIN) - output[i] = ntohl(((uint32_t*)addr6.u.Byte[0])[i]); -#elif defined(TARGET_IOS) || defined(TARGET_OSX) - output[i] = ntohl(addr6.__u6_addr.__u6_addr32[i]); -#elif defined(TARGET_OPENWRT) - output[i] = ntohl(addr6.__in6_union.__s6_addr32[i]); -#elif defined(TARGET_LINUX) - output[i] = ntohl(addr6.__in6_u.__u6_addr32[i]); -#elif defined(TARGET_ANDROID) - output[i] = ntohl(addr6.in6_u.u6_addr32[i]); -#endif -} - -void NetworkHelper::HostToNetwork(const uint32_t* input, in6_addr& output) -{ - for (int i=0; i<4; i++) -#if defined(TARGET_WIN) - ((uint32_t*)&output.u.Byte[0])[i] = htonl(input[i]); -#elif defined(TARGET_OSX) || defined(TARGET_IOS) - output.__u6_addr.__u6_addr32[i] = htonl(input[i]); -#elif defined(TARGET_OPENWRT) - output.__in6_union.__s6_addr32[i] = htonl(input[i]); -#elif defined(TARGET_LINUX) - output.__in6_u.__u6_addr32[i] = htonl(input[i]); -#elif defined(TARGET_ANDROID) - output.in6_u.u6_addr32[i] = htonl(input[i]); -#endif -} - +} + +void NetworkHelper::NetworkToHost(const in6_addr& addr6, uint32_t* output) +{ + for (int i=0; i<4; i++) +#if defined(TARGET_WIN) + output[i] = ntohl(((uint32_t*)addr6.u.Byte[0])[i]); +#elif defined(TARGET_IOS) || defined(TARGET_OSX) + output[i] = ntohl(addr6.__u6_addr.__u6_addr32[i]); +#elif defined(TARGET_OPENWRT) || defined(TARGET_MUSL) + output[i] = ntohl(addr6.__in6_union.__s6_addr32[i]); +#elif defined(TARGET_LINUX) + output[i] = ntohl(addr6.__in6_u.__u6_addr32[i]); +#elif defined(TARGET_ANDROID) + output[i] = ntohl(addr6.in6_u.u6_addr32[i]); +#endif +} + +void NetworkHelper::HostToNetwork(const uint32_t* input, in6_addr& output) +{ + for (int i=0; i<4; i++) +#if defined(TARGET_WIN) + ((uint32_t*)&output.u.Byte[0])[i] = htonl(input[i]); +#elif defined(TARGET_OSX) || defined(TARGET_IOS) + output.__u6_addr.__u6_addr32[i] = htonl(input[i]); +#elif defined(TARGET_OPENWRT) || defined(TARGET_MUSL) + output.__in6_union.__s6_addr32[i] = htonl(input[i]); +#elif defined(TARGET_LINUX) + output.__in6_u.__u6_addr32[i] = htonl(input[i]); +#elif defined(TARGET_ANDROID) + output.in6_u.u6_addr32[i] = htonl(input[i]); +#endif +} + NetworkHelper* NetworkHelper::mInstance = NULL; Mutex NetworkHelper::mGuard; diff --git a/src/libs/resiprocate/rutil/RecursiveMutex.cxx b/src/libs/resiprocate/rutil/RecursiveMutex.cxx index 9906f452..2fa0a06b 100644 --- a/src/libs/resiprocate/rutil/RecursiveMutex.cxx +++ b/src/libs/resiprocate/rutil/RecursiveMutex.cxx @@ -70,7 +70,11 @@ RecursiveMutex::RecursiveMutex() #ifndef WIN32 int rc = pthread_mutexattr_init(&mMutexAttr); #if defined(__linux__) + #if defined(PTHREAD_MUTEX_RECURSIVE_NP) pthread_mutexattr_settype(&mMutexAttr, PTHREAD_MUTEX_RECURSIVE_NP); + #else + pthread_mutexattr_settype(&mMutexAttr, PTHREAD_MUTEX_RECURSIVE); + #endif #else pthread_mutexattr_settype(&mMutexAttr, PTHREAD_MUTEX_RECURSIVE); #endif