diff options
-rw-r--r-- | CMakeLists.txt | 1 | ||||
-rw-r--r-- | minethd.cpp | 18 | ||||
-rw-r--r-- | msgstruct.h | 1 | ||||
-rw-r--r-- | socks.h | 5 |
4 files changed, 25 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 2e19674..85249c4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,6 +14,7 @@ if("${MHTD}" STREQUAL "MHTD-NOTFOUND") endif() find_package(OpenSSL REQUIRED) +include_directories(${OPENSSL_INCLUDE_DIR}) #set(CMAKE_VERBOSE_MAKEFILE ON) set(CMAKE_CONFIGURATION_TYPES "RELEASE;STATIC") diff --git a/minethd.cpp b/minethd.cpp index 5951035..6036582 100644 --- a/minethd.cpp +++ b/minethd.cpp @@ -37,12 +37,25 @@ void thd_setaffinity(std::thread::native_handle_type h, uint64_t cpu_id) #else #include <pthread.h> +#if defined(__APPLE__) +#include <mach/thread_policy.h> +#include <mach/thread_act.h> +#define SYSCTL_CORE_COUNT "machdep.cpu.core_count" +#endif + void thd_setaffinity(std::thread::native_handle_type h, uint64_t cpu_id) { +#if defined(__APPLE__) + thread_port_t mach_thread; + thread_affinity_policy_data_t policy = { cpu_id }; + mach_thread = pthread_mach_thread_np(h); + thread_policy_set(mach_thread, THREAD_AFFINITY_POLICY, (thread_policy_t)&policy, 1); +#else cpu_set_t mn; CPU_ZERO(&mn); CPU_SET(cpu_id, &mn); pthread_setaffinity_np(h, sizeof(cpu_set_t), &mn); +#endif } #endif // _WIN32 @@ -297,7 +310,12 @@ std::vector<minethd*>* minethd::thread_starter(miner_work& pWork) minethd* thd = new minethd(pWork, i, cfg.bDoubleMode, cfg.bNoPrefetch); if(cfg.iCpuAff >= 0) + { +#if defined(__APPLE__) + printer::inst()->print_msg(L1, "WARNING on MacOS thread affinity is only advisory." +#endif thd_setaffinity(thd->oWorkThd.native_handle(), cfg.iCpuAff); + } pvThreads->push_back(thd); diff --git a/msgstruct.h b/msgstruct.h index 3452920..d3b1709 100644 --- a/msgstruct.h +++ b/msgstruct.h @@ -1,4 +1,5 @@ #pragma once +#include <string> #include <string.h> #include <assert.h> @@ -76,7 +76,12 @@ inline void sock_close(SOCKET s) inline const char* sock_strerror(char* buf, size_t len) { buf[0] = '\0'; +#if defined(__APPLE__) + strerror_r(errno, buf, len); + return buf; +#else return strerror_r(errno, buf, len); +#endif } inline const char* sock_gai_strerror(int err, char* buf, size_t len) |