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