diff --git a/3rdparty/cuttdb/src/cdb_core.c b/3rdparty/cuttdb/src/cdb_core.c index 177def87f77f848488b5f7d4838bff0efcd0accb..62c35371b3d26b07d6a275e6f1bb87706b2b6153 100644 --- a/3rdparty/cuttdb/src/cdb_core.c +++ b/3rdparty/cuttdb/src/cdb_core.c @@ -296,13 +296,13 @@ CDB *cdb_new() db = (CDB *)malloc(sizeof(CDB)); /* I assume all operation in this layer is 'fast', so no mutex used here */ for(int i = 0; i < MLOCKNUM; i++) - db->mlock[i] = cdb_lock_new(CDB_LOCKSPIN); - db->dpclock = cdb_lock_new(CDB_LOCKSPIN); - db->pclock = cdb_lock_new(CDB_LOCKSPIN); - db->rclock = cdb_lock_new(CDB_LOCKSPIN); - db->stlock = cdb_lock_new(CDB_LOCKSPIN); - db->oidlock = cdb_lock_new(CDB_LOCKSPIN); - db->bflock = cdb_lock_new(CDB_LOCKSPIN); + db->mlock[i] = cdb_lock_new(CDB_LOCKMUTEX); + db->dpclock = cdb_lock_new(CDB_LOCKMUTEX); + db->pclock = cdb_lock_new(CDB_LOCKMUTEX); + db->rclock = cdb_lock_new(CDB_LOCKMUTEX); + db->stlock = cdb_lock_new(CDB_LOCKMUTEX); + db->oidlock = cdb_lock_new(CDB_LOCKMUTEX); + db->bflock = cdb_lock_new(CDB_LOCKMUTEX); db->bgtask = cdb_bgtask_new(); /* every thread should has its own errno */ db->errkey = (pthread_key_t *)malloc(sizeof(pthread_key_t)); diff --git a/3rdparty/cuttdb/src/cdb_lock.c b/3rdparty/cuttdb/src/cdb_lock.c index d30b46a87ea55d49d6330207686a6b9fbc6552c6..92aab58be4ec916aaa1037e48b62f641176ee9c6 100644 --- a/3rdparty/cuttdb/src/cdb_lock.c +++ b/3rdparty/cuttdb/src/cdb_lock.c @@ -22,10 +22,13 @@ CDBLOCK *cdb_lock_new(int ltype) { CDBLOCK *lock = NULL; +#ifndef DAP_OS_DARWIN if (ltype == CDB_LOCKSPIN) { lock = (CDBLOCK *)malloc(sizeof(CDBLOCK) + sizeof(pthread_spinlock_t)); pthread_spin_init((pthread_spinlock_t*)&lock->lock, PTHREAD_PROCESS_PRIVATE); - } else if (ltype == CDB_LOCKMUTEX) { + } else +#endif + if (ltype == CDB_LOCKMUTEX) { lock = (CDBLOCK *)malloc(sizeof(CDBLOCK) + sizeof(pthread_mutex_t)); pthread_mutex_init((pthread_mutex_t*)&lock->lock, NULL); } @@ -38,28 +41,37 @@ CDBLOCK *cdb_lock_new(int ltype) void cdb_lock_lock(CDBLOCK *lock) { +#ifndef DAP_OS_DARWIN if (lock->ltype == CDB_LOCKSPIN) pthread_spin_lock((pthread_spinlock_t*)&lock->lock); - else if (lock->ltype == CDB_LOCKMUTEX) - pthread_mutex_lock((pthread_mutex_t*)&lock->lock); + else +#endif + if (lock->ltype == CDB_LOCKMUTEX) + pthread_mutex_lock((pthread_mutex_t*)&lock->lock); } void cdb_lock_unlock(CDBLOCK *lock) { +#ifndef DAP_OS_DARWIN if (lock->ltype == CDB_LOCKSPIN) pthread_spin_unlock((pthread_spinlock_t*)&lock->lock); - else if (lock->ltype == CDB_LOCKMUTEX) + else +#endif + if (lock->ltype == CDB_LOCKMUTEX) pthread_mutex_unlock((pthread_mutex_t*)&lock->lock); } void cdb_lock_destory(CDBLOCK *lock) { +#ifndef DAP_OS_DARWIN if (lock->ltype == CDB_LOCKSPIN) pthread_spin_destroy((pthread_spinlock_t*)&lock->lock); - else if (lock->ltype == CDB_LOCKMUTEX) - pthread_mutex_destroy((pthread_mutex_t*)&lock->lock); + else +#endif + if (lock->ltype == CDB_LOCKMUTEX) + pthread_mutex_destroy((pthread_mutex_t*)&lock->lock); free(lock); } @@ -67,10 +79,13 @@ void cdb_lock_destory(CDBLOCK *lock) int cdb_lock_trylock(CDBLOCK *lock) { +#ifndef DAP_OS_DARWIN if (lock->ltype == CDB_LOCKSPIN) return pthread_spin_trylock((pthread_spinlock_t*)&lock->lock); - else if (lock->ltype == CDB_LOCKMUTEX) - return pthread_mutex_trylock((pthread_mutex_t*)&lock->lock); + else +#endif + if (lock->ltype == CDB_LOCKMUTEX) + return pthread_mutex_trylock((pthread_mutex_t*)&lock->lock); return 0; } diff --git a/3rdparty/cuttdb/src/cdb_lock.h b/3rdparty/cuttdb/src/cdb_lock.h index 587fcdb18b40722da27f0eebff9fdb0e05934ce3..bbd13098603bc0e0048d9e752b646ea7fea7d53a 100644 --- a/3rdparty/cuttdb/src/cdb_lock.h +++ b/3rdparty/cuttdb/src/cdb_lock.h @@ -19,7 +19,9 @@ enum { /* spinlock */ +#ifndef DAP_OS_DARWIN CDB_LOCKSPIN, +#endif /* mutex, which may cause OS context switch, mainly used in where Disk IO happens */ CDB_LOCKMUTEX, }; diff --git a/CMakeLists.txt b/CMakeLists.txt index 161246a8f440a76b8ce1be4db918e6a463b30a98..e9f56d54e6e539a648ee304481e47615b252be0b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,9 +2,10 @@ project(cellframe-sdk C) cmake_minimum_required(VERSION 3.0) set(CMAKE_C_STANDARD 11) -set(CELLFRAME_SDK_NATIVE_VERSION "2.8-23") +set(CELLFRAME_SDK_NATIVE_VERSION "2.8-24") add_definitions ("-DCELLFRAME_SDK_VERSION=\"${CELLFRAME_SDK_NATIVE_VERSION}\"") set(DAPSDK_MODULES "") +message("Cellframe modules: ${CELLFRAME_MODULES}") if (CELLFRAME_MODULES MATCHES "core") SET(DAPSDK_MODULES "${DAPSDK_MODULES} core crypto") @@ -47,7 +48,7 @@ set(CELLFRAME_LIBS "") # Core libs from dap-sdk if (CELLFRAME_MODULES MATCHES "core") message("[+] Module 'core'") - set(CELLFRAME_LIBS ${CELLFRAME_LIBS} dap_core dap_crypto m pthread) + set(CELLFRAME_LIBS ${CELLFRAME_LIBS} dap_core dap_app_cli dap_crypto m pthread) endif() # General chain libs diff --git a/cmake/OS_Detection.cmake b/cmake/OS_Detection.cmake index 4176d19195fab3c37991b1661630b2a66ba4269f..761dc527d54789df7e2032ee1ff7c303460908e3 100644 --- a/cmake/OS_Detection.cmake +++ b/cmake/OS_Detection.cmake @@ -47,6 +47,7 @@ if(UNIX) if (APPLE) add_definitions ("-DDAP_OS_DARWIN -DDARWIN -DDAP_OS_BSD") set(DARWIN ON) + set(BSD ON) endif() if (${CMAKE_SYSTEM_NAME} MATCHES "BSD" ) @@ -66,8 +67,17 @@ if(UNIX) else() set(_CCOPT "-Wno-deprecated-declarations -Wno-unused-local-typedefs -Wno-unused-function -Wno-implicit-fallthrough -Wno-unused-variable -Wno-unused-parameter -Wno-unused-but-set-variable -O3 -fPIC -fno-strict-aliasing -fno-ident -ffast-math -ftree-vectorize -fno-asynchronous-unwind-tables -ffunction-sections -Wl,--gc-sections -Wl,--strip-all -std=gnu11") endif() - endif() - if (BSD) + elseif (DARWIN) + if(DAP_DEBUG) + set(_CCOPT "-L/usr/local/lib -I/usr/local/include -DDAP_DEBUG -Wall -Wno-unused-command-line-argument -Wno-deprecated-declarations -Wno-unused-local-typedefs -Wno-unused-function -Wno-implicit-fallthrough -Wno-unused-variable -Wno-unused-parameter -g3 -ggdb -fno-eliminate-unused-debug-symbols -fno-strict-aliasing") + set(_LOPT "-L/usr/local/lib ") + SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}") + else() + set(_CCOPT "-L /usr/local/lib -I/usr/local/include -Wno-deprecated-declarations -Wno-unused-command-line-argument -Wno-unused-local-typedefs -Wno-unused-function -Wno-implicit-fallthrough -Wno-unused-variable -Wno-unused-parameter -O3 -fPIC -fno-strict-aliasing -fno-ident -ffast-math -ftree-vectorize -fno-asynchronous-unwind-tables -ffunction-sections -std=gnu11") + set(_LOPT "-L /usr/local/lib ") + SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -L/usr/local/lib") + endif() + elseif(BSD) if(DAP_DEBUG) set(_CCOPT "-L/usr/local/lib -I/usr/local/include -DDAP_DEBUG -Wall -Wno-unused-command-line-argument -Wno-deprecated-declarations -Wno-unused-local-typedefs -Wno-unused-function -Wno-implicit-fallthrough -Wno-unused-variable -Wno-unused-parameter -pg -g3 -ggdb -fno-eliminate-unused-debug-symbols -fno-strict-aliasing") set(_LOPT "-pg -L/usr/local/lib ") diff --git a/dap-sdk/CMakeLists.txt b/dap-sdk/CMakeLists.txt index 1ebf8ea8c9411dcf736b6ec1218ee91a00d4a23a..b59160cb13fd9d12b6e77d6a5ad637d561cecab1 100644 --- a/dap-sdk/CMakeLists.txt +++ b/dap-sdk/CMakeLists.txt @@ -1,9 +1,6 @@ -set(DAP_SDK_NATIVE_VERSION "2.0-14") -# Core -if (DAPSDK_MODULES MATCHES "core") - # Core - add_subdirectory(core) -endif() +set(DAP_SDK_NATIVE_VERSION "2.1-0") +# Core, add it always +add_subdirectory(core) if (DAPSDK_MODULES MATCHES "crypto") # Cryptography add_subdirectory(crypto) diff --git a/dap-sdk/core/CMakeLists.txt b/dap-sdk/core/CMakeLists.txt index 5612789c0eb6174e47525739a085e6759e482b33..60cb7dc92bb74181db1175cbff2a015ee55576f3 100755 --- a/dap-sdk/core/CMakeLists.txt +++ b/dap-sdk/core/CMakeLists.txt @@ -43,7 +43,11 @@ endif() if(UNIX) add_subdirectory(src/unix) - target_link_libraries(${PROJECT_NAME} dap_core_unix rt) + if(DARWIN) + target_link_libraries(${PROJECT_NAME} dap_core_unix) + else() + target_link_libraries(${PROJECT_NAME} dap_core_unix rt) + endif() endif() if(DARWIN) diff --git a/dap-sdk/net/client/CMakeLists.txt b/dap-sdk/net/client/CMakeLists.txt index 4e88cd3c00f1a6e1f48d5a9a2a13c07dd930a87a..febe04a7335fd3e77dcc3d5ba758a172dc4502be 100644 --- a/dap-sdk/net/client/CMakeLists.txt +++ b/dap-sdk/net/client/CMakeLists.txt @@ -9,7 +9,7 @@ add_library(${PROJECT_NAME} STATIC ${DAP_CLIENT_HEADERS} ${DAP_CLIENT_SOURCES}) target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_server_core dap_http_server dap_enc_server dap_stream dap_session dap_stream_ch json-c) -if(UNIX AND NOT ANDROID) +if(UNIX AND NOT ANDROID AND NOT DARWIN) target_link_libraries(${PROJECT_NAME} rt) endif() diff --git a/dap-sdk/net/core/CMakeLists.txt b/dap-sdk/net/core/CMakeLists.txt index f8e4ce4246ee2f671b2fb4a84dd7d1149a4855ff..c1176524e4906c864b30309e698af4554e52893d 100644 --- a/dap-sdk/net/core/CMakeLists.txt +++ b/dap-sdk/net/core/CMakeLists.txt @@ -24,7 +24,7 @@ if(WIN32) endif() if(UNIX) - target_link_libraries(${PROJECT_NAME} dap_core dap_crypto rt) + target_link_libraries(${PROJECT_NAME} dap_core dap_crypto) if(NOT ANDROID) target_link_libraries(${PROJECT_NAME} pthread) diff --git a/dap-sdk/net/server/http_server/CMakeLists.txt b/dap-sdk/net/server/http_server/CMakeLists.txt index 05eaf454d8bac09a32b60942944a764979df4406..656f8e66cfd03d9b5b471a7847b230ee44bfb7e7 100644 --- a/dap-sdk/net/server/http_server/CMakeLists.txt +++ b/dap-sdk/net/server/http_server/CMakeLists.txt @@ -21,6 +21,10 @@ target_include_directories(${PROJECT_NAME} INTERFACE . http_client/include/) target_include_directories(${PROJECT_NAME} PUBLIC include) target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../../../3rdparty/uthash/src) +if(DARWIN) + target_include_directories(${PROJECT_NAME} PRIVATE /usr/local/include) +endif() + if(WIN32) target_link_libraries(dap_http_server dap_core dap_crypto dap_server_core magic regex tre intl iconv KERNEL32 diff --git a/dap-sdk/net/server/http_server/dap_http.c b/dap-sdk/net/server/http_server/dap_http.c index 6b27d5449f1b4c5f7647bb15a08a0725ac705df6..b931d229d80fee1d272d23c0396e55eaad071893 100644 --- a/dap-sdk/net/server/http_server/dap_http.c +++ b/dap-sdk/net/server/http_server/dap_http.c @@ -167,5 +167,6 @@ dap_http_url_proc_t * dap_http_add_proc(dap_http_t *a_http, const char *a_url_pa HASH_ADD_STR( a_http->url_proc, url, l_url_proc ); log_it( L_DEBUG, "Added URL processor for '%s' path", l_url_proc->url ); + return l_url_proc; } diff --git a/modules/net/CMakeLists.txt b/modules/net/CMakeLists.txt index 97ab46d7e9d559de36db6a1bb18e50d91e47fa4e..2df24764a7a786494f0d3e48b6cd1c6ae1012e01 100644 --- a/modules/net/CMakeLists.txt +++ b/modules/net/CMakeLists.txt @@ -37,16 +37,16 @@ endif() add_library(${PROJECT_NAME} STATIC ${DAP_CHAIN_NET_SRCS} ${DAP_CHAIN_NET_HEADERS} ${IPUTILS_SRCS} ${IPUTILS_HEADERS}) if(WIN32) - target_link_libraries(dap_chain_net dap_core dap_crypto dap_client dap_ dap_stream_ch_chain dap_stream_ch_chain_net dap_stream_ch_chain_net_srv dap_chain dap_chain_crypto dap_chain_wallet dap_chain_net_srv + target_link_libraries(dap_core dap_chain_net dap_crypto dap_client dap_server_core dap_stream_ch_chain dap_stream_ch_chain_net dap_stream_ch_chain_net_srv dap_chain dap_chain_crypto dap_chain_wallet dap_chain_net_srv dap_chain_mempool dap_chain_global_db dap_chain_net_srv_stake dap_chain_cs_none) endif() if(LINUX) - target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_notify_srv dap_client dap_stream_ch_chain dap_stream_ch_chain_net dap_stream_ch_chain_net_srv dap_chain + target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_server_core dap_notify_srv dap_client dap_stream_ch_chain dap_stream_ch_chain_net dap_stream_ch_chain_net_srv dap_chain dap_chain_wallet dap_chain_net_srv dap_chain_mempool dap_chain_global_db dap_chain_net_srv_stake dap_chain_cs_none resolv ) elseif(BSD) - target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_notify_srv dap_client dap_stream_ch_chain dap_stream_ch_chain_net dap_stream_ch_chain_net_srv dap_chain + target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_server_core dap_notify_srv dap_client dap_stream_ch_chain dap_stream_ch_chain_net dap_stream_ch_chain_net_srv dap_chain dap_chain_wallet dap_chain_net_srv dap_chain_mempool dap_chain_global_db dap_chain_net_srv_stake dap_chain_cs_none ) endif() diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c index c7f56e6332f6b42f0b371239cd08b3f789b20ce6..c8aa4d25e17ccc2860566b7d571c969df8006d14 100644 --- a/modules/net/dap_chain_net.c +++ b/modules/net/dap_chain_net.c @@ -988,7 +988,9 @@ static dap_chain_net_t *s_net_new(const char * a_id, const char * a_name , #ifndef _WIN32 pthread_condattr_t l_attr; pthread_condattr_init( &l_attr ); +#ifndef DAP_OS_DARWIN pthread_condattr_setclock( &l_attr, CLOCK_MONOTONIC ); +#endif pthread_cond_init( &PVT(ret)->state_proc_cond, &l_attr ); #else PVT(ret)->state_proc_cond = CreateEventA( NULL, FALSE, FALSE, NULL ); diff --git a/modules/net/dap_chain_node_client.c b/modules/net/dap_chain_node_client.c index 0aef4479770b0ed353d7a0d09e5c71dde8c2d1bf..c7154e822196f830532c5d72625327352f1ed13a 100644 --- a/modules/net/dap_chain_node_client.c +++ b/modules/net/dap_chain_node_client.c @@ -681,7 +681,9 @@ dap_chain_node_client_t* dap_chain_node_client_create_n_connect(dap_chain_net_t #ifndef _WIN32 pthread_condattr_t attr; pthread_condattr_init(&attr); +#ifndef DAP_OS_DARWIN pthread_condattr_setclock(&attr, CLOCK_MONOTONIC); +#endif pthread_cond_init(&l_node_client->wait_cond, &attr); #else l_node_client->wait_cond = CreateEventA( NULL, FALSE, FALSE, NULL ); diff --git a/modules/net/dap_chain_node_ping.c b/modules/net/dap_chain_node_ping.c index 353bf48fe476ce73cd43c8d7a77d6cca992037a0..bfd102f425675c3be456c92d206172969f2ebe1c 100644 --- a/modules/net/dap_chain_node_ping.c +++ b/modules/net/dap_chain_node_ping.c @@ -170,7 +170,7 @@ int wait_node_ping(pthread_t l_thread, int timeout_ms) timeout_ms *= 1000; l_wait_time.tv_sec += timeout_ms / DAP_USEC_PER_SEC; l_wait_time.tv_nsec += 1000 * (timeout_ms % DAP_USEC_PER_SEC); -#if !defined(_WIN32) && !defined(__ANDROID__) +#if !defined(_WIN32) && !defined(__ANDROID__) && !defined (DAP_OS_DARWIN) int res = pthread_timedjoin_np(l_thread, (void **) &l_ping_time, &l_wait_time); #else int res = pthread_join(l_thread, (void **) &l_ping_time);