From 43d66b9e4e2e20e09d3a3913db807fb22f205ab3 Mon Sep 17 00:00:00 2001 From: PC <papizh.konstantin@demlabs.net> Date: Fri, 8 May 2020 18:58:44 +0300 Subject: [PATCH] OSX build fixed --- dap-sdk/core/include/dap_common.h | 4 +++- dap-sdk/core/libdap.pri | 1 + dap-sdk/core/src/dap_common.c | 20 ++++++++++++++++++++ dap-sdk/crypto/src/GOST/block_cipher.c | 4 ++++ 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/dap-sdk/core/include/dap_common.h b/dap-sdk/core/include/dap_common.h index ee1b595c5b..39bca787cd 100755 --- a/dap-sdk/core/include/dap_common.h +++ b/dap-sdk/core/include/dap_common.h @@ -33,7 +33,9 @@ #include <stdlib.h> #include <stdio.h> #include <time.h> - +#ifdef __MACH__ +#include <dispatch/dispatch.h> +#endif #include "portable_endian.h" typedef uint8_t byte_t; diff --git a/dap-sdk/core/libdap.pri b/dap-sdk/core/libdap.pri index 3556d8828e..118eb93d34 100755 --- a/dap-sdk/core/libdap.pri +++ b/dap-sdk/core/libdap.pri @@ -6,6 +6,7 @@ unix { } darwin { include(src/darwin/darwin.pri) + LIBS -= -lrt } win32 { diff --git a/dap-sdk/core/src/dap_common.c b/dap-sdk/core/src/dap_common.c index 78b63ee843..c2c8cf55f7 100755 --- a/dap-sdk/core/src/dap_common.c +++ b/dap-sdk/core/src/dap_common.c @@ -829,6 +829,11 @@ static void CALLBACK s_win_callback(PVOID a_arg, BOOLEAN a_always_true) UNUSED(a_always_true); s_timers[(int)a_arg].callback(s_timers[(int)a_arg].param); } +#elif defined __MACH__ +static void s_bsd_callback(int a_arg) +{ + s_timers[a_arg].callback(s_timers[a_arg].param); +} #else static void s_posix_callback(union sigval a_arg) { @@ -856,6 +861,16 @@ void *dap_interval_timer_create(unsigned int a_msec, dap_timer_callback_t a_call return NULL; } EnterCriticalSection(&s_timers_lock); +#elif defined __MACH__ + if (s_timers_count == 0) { + pthread_mutex_init(&s_timers_lock, NULL); + } + dispatch_queue_t l_queue = dispatch_queue_create("tqueue", 0); + dispatch_source_t l_timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, l_queue); + dispatch_source_set_event_handler(l_timer, ^(void){s_bsd_callback(s_timers_count);}); + dispatch_time_t start = dispatch_time(DISPATCH_TIME_NOW, a_msec * 1000000); + dispatch_source_set_timer(l_timer, start, a_msec * 1000000, 0); + dispatch_resume(l_timer); #else if (s_timers_count == 0) { pthread_mutex_init(&s_timers_lock, NULL); @@ -919,6 +934,11 @@ int dap_interval_timer_delete(void *a_timer) if (s_timers_count == 0) { pthread_mutex_destroy(&s_timers_lock); } +#ifdef __MACH__ + dispatch_source_cancel(a_timer); + return 0; +#else return timer_delete((timer_t)a_timer); #endif +#endif } diff --git a/dap-sdk/crypto/src/GOST/block_cipher.c b/dap-sdk/crypto/src/GOST/block_cipher.c index 80ad6231dc..e6b9d16fd0 100644 --- a/dap-sdk/crypto/src/GOST/block_cipher.c +++ b/dap-sdk/crypto/src/GOST/block_cipher.c @@ -6,7 +6,11 @@ #include <stdio.h> #include <memory.h> +#ifdef __MACH__ +#include <sys/malloc.h> +#else #include <malloc.h> +#endif #include <stdlib.h> #include "28147_14.h" -- GitLab