From c7b9156bf6e748272834137a7ef2ddb0186fd738 Mon Sep 17 00:00:00 2001
From: Dmitriy Gerasimov <naeper@demlabs.net>
Date: Mon, 31 May 2021 13:10:53 +0700
Subject: [PATCH] [-] WolfSSL switched off by default [*] Build fixes for M1
 [+] Autodetect of M1/Intel variants for MacOS

---
 3rdparty/monero_crypto/CMakeLists.txt |  2 ++
 3rdparty/wolfssl/cyassl/options.h     | 18 ------------------
 3rdparty/wolfssl/wolfssl/options.h    | 18 ------------------
 CMakeLists.txt                        |  5 +++--
 cmake/OS_Detection.cmake              |  9 ++++++++-
 dap-sdk/CMakeLists.txt                | 10 +++++++++-
 dap-sdk/core/libdap.pri               |  4 +++-
 dap-sdk/crypto/CMakeLists.txt         |  6 +++++-
 dap-sdk/net/client/CMakeLists.txt     |  6 +++++-
 dap-sdk/net/core/CMakeLists.txt       |  6 +++---
 10 files changed, 38 insertions(+), 46 deletions(-)

diff --git a/3rdparty/monero_crypto/CMakeLists.txt b/3rdparty/monero_crypto/CMakeLists.txt
index 958edbd283..34af01cb61 100755
--- a/3rdparty/monero_crypto/CMakeLists.txt
+++ b/3rdparty/monero_crypto/CMakeLists.txt
@@ -109,6 +109,8 @@ else()
     message(STATUS "[*] Building on ${CMAKE_SYSTEM_PROCESSOR} for ${ARCH}")
     if(ARCH STREQUAL "default")
       set(ARCH_FLAG "")
+    elseif(ARCH STREQUAL "native")
+      set(ARCH_FLAG "")
     elseif(PPC64LE)
       set(ARCH_FLAG "-mcpu=${ARCH}")
     elseif(IOS AND ARCH STREQUAL "arm64")
diff --git a/3rdparty/wolfssl/cyassl/options.h b/3rdparty/wolfssl/cyassl/options.h
index e2e364e7b0..5ba0ed638c 100644
--- a/3rdparty/wolfssl/cyassl/options.h
+++ b/3rdparty/wolfssl/cyassl/options.h
@@ -113,9 +113,6 @@ extern "C" {
 #undef  WC_RSA_PSS
 #define WC_RSA_PSS
 
-#undef  WOLFSSL_BASE64_ENCODE
-#define WOLFSSL_BASE64_ENCODE
-
 #undef  NO_RC4
 #define NO_RC4
 
@@ -125,15 +122,6 @@ extern "C" {
 #undef  NO_RABBIT
 #define NO_RABBIT
 
-#undef  WOLFSSL_SHA224
-#define WOLFSSL_SHA224
-
-#undef  WOLFSSL_SHA3
-#define WOLFSSL_SHA3
-
-#undef  WOLFSSL_SHAKE256
-#define WOLFSSL_SHAKE256
-
 #undef  HAVE_POLY1305
 #define HAVE_POLY1305
 
@@ -173,12 +161,6 @@ extern "C" {
 #undef  NO_MD4
 #define NO_MD4
 
-#undef  USE_FAST_MATH
-#define USE_FAST_MATH
-
-#undef  WOLFSSL_X86_64_BUILD
-#define WOLFSSL_X86_64_BUILD
-
 #undef  WC_NO_ASYNC_THREADING
 #define WC_NO_ASYNC_THREADING
 
diff --git a/3rdparty/wolfssl/wolfssl/options.h b/3rdparty/wolfssl/wolfssl/options.h
index d6f39494f9..aa54bade2d 100644
--- a/3rdparty/wolfssl/wolfssl/options.h
+++ b/3rdparty/wolfssl/wolfssl/options.h
@@ -110,9 +110,6 @@ extern "C" {
 #undef  WC_RSA_PSS
 #define WC_RSA_PSS
 
-#undef  WOLFSSL_BASE64_ENCODE
-#define WOLFSSL_BASE64_ENCODE
-
 #undef  NO_RC4
 #define NO_RC4
 
@@ -122,15 +119,6 @@ extern "C" {
 #undef  NO_RABBIT
 #define NO_RABBIT
 
-#undef  WOLFSSL_SHA224
-#define WOLFSSL_SHA224
-
-#undef  WOLFSSL_SHA3
-#define WOLFSSL_SHA3
-
-#undef  WOLFSSL_SHAKE256
-#define WOLFSSL_SHAKE256
-
 #undef  HAVE_POLY1305
 #define HAVE_POLY1305
 
@@ -170,12 +158,6 @@ extern "C" {
 #undef  NO_MD4
 #define NO_MD4
 
-#undef  USE_FAST_MATH
-#define USE_FAST_MATH
-
-#undef  WOLFSSL_X86_64_BUILD
-#define WOLFSSL_X86_64_BUILD
-
 #undef  WC_NO_ASYNC_THREADING
 #define WC_NO_ASYNC_THREADING
 
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3eda61f1a8..4fde6a8301 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -53,8 +53,9 @@ endif()
 add_subdirectory(dap-sdk)
 add_subdirectory(3rdparty/monero_crypto)
 add_subdirectory(3rdparty/cuttdb)
-add_subdirectory(3rdparty/wolfssl)
-
+if(DAPSDK_MODULES MATCHES "ssl-support")
+    add_subdirectory(3rdparty/wolfssl)
+endif()
 
 add_subdirectory(modules/)
 
diff --git a/cmake/OS_Detection.cmake b/cmake/OS_Detection.cmake
index daa8d412dd..161a5b8fa6 100644
--- a/cmake/OS_Detection.cmake
+++ b/cmake/OS_Detection.cmake
@@ -53,7 +53,14 @@ if(UNIX)
         set(BSD ON)
         if (${_CMAKE_OSX_SYSROOT_PATH} MATCHES "MacOS")
             set(MACOS ON)
-            add_definitions("-DDAP_OS_MAC")
+	    # on macOS "uname -m" returns the architecture (x86_64 or arm64)
+	    execute_process(
+		COMMAND uname -m
+		RESULT_VARIABLE result
+		OUTPUT_VARIABLE MACOS_ARCH
+		OUTPUT_STRIP_TRAILING_WHITESPACE
+	    )
+            add_definitions("-DDAP_OS_MAC -DDAP_OS_MAC_ARCH=${MACOS_ARCH}")
         endif()
         if (${_CMAKE_OSX_SYSROOT_PATH} MATCHES "iOS")
             set(IOS ON)
diff --git a/dap-sdk/CMakeLists.txt b/dap-sdk/CMakeLists.txt
index d327eb51f2..9a6f3fa639 100644
--- a/dap-sdk/CMakeLists.txt
+++ b/dap-sdk/CMakeLists.txt
@@ -1,4 +1,12 @@
-set(DAP_SDK_NATIVE_VERSION "2.2-1")
+set(DAP_SDK_NATIVE_VERSION "2.2-2")
+
+# We switch off SSL until its not switched on back
+if(DAPSDK_MODULES MATCHES "ssl-support")
+    add_definitions("-DDAP_NET_CLIENT_SSL")
+else()
+    add_definitions("-DDAP_NET_CLIENT_NO_SSL")
+endif()
+
 # Core, add it always
 add_subdirectory(core)
 if (DAPSDK_MODULES MATCHES "crypto")
diff --git a/dap-sdk/core/libdap.pri b/dap-sdk/core/libdap.pri
index 0842a446f9..e7b623806b 100755
--- a/dap-sdk/core/libdap.pri
+++ b/dap-sdk/core/libdap.pri
@@ -47,7 +47,9 @@ win32 {
 HEADERS += $$PWD/../../3rdparty/uthash/src/utlist.h \
            $$PWD/../../3rdparty/uthash/src/uthash.h
 
-#include($$PWD/../../3rdparty/wolfssl/wolfssl.pri)
+if(DAPSDK_MODULES MATCHES "ssl-support")
+    include($$PWD/../../3rdparty/wolfssl/wolfssl.pri)
+endif()
 
 # Sources itself
 HEADERS += $$PWD/include/dap_common.h \
diff --git a/dap-sdk/crypto/CMakeLists.txt b/dap-sdk/crypto/CMakeLists.txt
index 0aa772704d..3badd00468 100755
--- a/dap-sdk/crypto/CMakeLists.txt
+++ b/dap-sdk/crypto/CMakeLists.txt
@@ -74,7 +74,11 @@ if(UNIX)
 	endif()
     elseif(APPLE)
 	if(BUILD_64)
-	    file( GLOB XKCP_SRCS2 src/XKCP/lib/low/KeccakP-1600/OptimizedAsmX86-64/KeccakP-1600-x86-64-gas_Apple.s )
+	    if((MACOS) AND(MACOS_ARCH STREQUAL "x86_64") )
+		file( GLOB XKCP_SRCS2 src/XKCP/lib/low/KeccakP-1600/OptimizedAsmX86-64/KeccakP-1600-x86-64-gas_Apple.s )
+	    else()
+		file( GLOB XKCP_SRCS2 src/XKCP/lib/low/KeccakP-1600/Compact64/KeccakP-1600-compact64.c )
+	    endif()
 	else()
 	    file( GLOB XKCP_SRCS2 src/XKCP/lib/low/KeccakP-1600/Inplace32BI/KeccakP-1600-inplace32BI.c )
 	endif()
diff --git a/dap-sdk/net/client/CMakeLists.txt b/dap-sdk/net/client/CMakeLists.txt
index 1b51802e4b..39185cc300 100644
--- a/dap-sdk/net/client/CMakeLists.txt
+++ b/dap-sdk/net/client/CMakeLists.txt
@@ -7,8 +7,12 @@ file(GLOB DAP_CLIENT_HEADERS FILES include/*.h)
 
 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 wolfssl)
 
+if(DAPSDK_MODULES MATCHES "ssl-support")
+    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 wolfssl)
+else()
+    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)
+endif()
 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 f3b6a5e2c9..5ed51a7bfb 100644
--- a/dap-sdk/net/core/CMakeLists.txt
+++ b/dap-sdk/net/core/CMakeLists.txt
@@ -19,13 +19,13 @@ endif()
 
 add_library(${PROJECT_NAME} STATIC ${DAP_SERVER_CORE_HEADERS} ${DAP_SERVER_CORE_SOURCES})
 
-if(WIN32)
+if(DAPSDK_MODULES MATCHES "ssl-support")
   target_link_libraries(${PROJECT_NAME} dap_core dap_crypto wolfssl)
+else()
+  target_link_libraries(${PROJECT_NAME} dap_core dap_crypto)
 endif()
 
 if(UNIX)
-  target_link_libraries(${PROJECT_NAME} dap_core dap_crypto wolfssl)
-
   if(NOT ANDROID)
       target_link_libraries(${PROJECT_NAME} pthread)
   endif()
-- 
GitLab