提交 0ab33224 编写于 作者: G gangliao 提交者: Yu Yang

Support MAC OS Sierra (#169)

上级 db380434
...@@ -71,6 +71,11 @@ foreach(flag ${COMMON_FLAGS}) ...@@ -71,6 +71,11 @@ foreach(flag ${COMMON_FLAGS})
safe_set_cxxflag(CMAKE_CXX_FLAGS ${flag}) safe_set_cxxflag(CMAKE_CXX_FLAGS ${flag})
endforeach() endforeach()
# On Mac OS X build fat binaries with x86_64 architectures by default.
if (APPLE)
set (CMAKE_OSX_ARCHITECTURES "x86_64" CACHE STRING "Build architectures for OSX" FORCE)
endif ()
# Release/Debug flags set by cmake. Such as -O3 -g -DNDEBUG etc. # Release/Debug flags set by cmake. Such as -O3 -g -DNDEBUG etc.
# So, don't set these flags here. # So, don't set these flags here.
......
...@@ -211,7 +211,11 @@ bool hl_start_flag = false; ...@@ -211,7 +211,11 @@ bool hl_start_flag = false;
inline pid_t gettid() { inline pid_t gettid() {
#if defined(__APPLE__) || defined(__OSX__) #if defined(__APPLE__) || defined(__OSX__)
pid_t tid = syscall(SYS_thread_selfid); // syscall is deprecated: first deprecated in macOS 10.12.
// syscall is unsupported;
// syscall pid_t tid = syscall(SYS_thread_selfid);
uint64_t tid;
pthread_threadid_np(NULL, &tid);
#else #else
#ifndef __NR_gettid #ifndef __NR_gettid
#define __NR_gettid 224 #define __NR_gettid 224
......
...@@ -157,7 +157,8 @@ void SocketChannel::writeMessage(const std::vector<struct iovec>& userIovs) { ...@@ -157,7 +157,8 @@ void SocketChannel::writeMessage(const std::vector<struct iovec>& userIovs) {
std::vector<iovec> iovs; std::vector<iovec> iovs;
iovs.reserve(userIovs.size() + 2); iovs.reserve(userIovs.size() + 2);
iovs.push_back({&header, sizeof(header)}); iovs.push_back({&header, sizeof(header)});
iovs.push_back({&iovLengths[0], sizeof(iovLengths[0]) * header.numIovs}); iovs.push_back({&iovLengths[0], static_cast<size_t>(
sizeof(iovLengths[0]) * header.numIovs)});
iovs.insert(iovs.end(), userIovs.begin(), userIovs.end()); iovs.insert(iovs.end(), userIovs.begin(), userIovs.end());
header.totalLength = 0; header.totalLength = 0;
......
...@@ -18,6 +18,7 @@ from setuptools import setup, Extension ...@@ -18,6 +18,7 @@ from setuptools import setup, Extension
import numpy as np import numpy as np
import api.paddle_ld_flags import api.paddle_ld_flags
import platform import platform
import os
system = platform.system().lower() system = platform.system().lower()
...@@ -45,6 +46,7 @@ except: ...@@ -45,6 +46,7 @@ except:
if is_lin == True: if is_lin == True:
extra_links = ["-Xlinker", '-start-group'] + extra_links + ["-Xlinker", "-end-group"] extra_links = ["-Xlinker", '-start-group'] + extra_links + ["-Xlinker", "-end-group"]
elif is_osx == True: elif is_osx == True:
os.environ["ARCHFLAGS"] = "-arch x86_64"
extra_links = ["-Wl,-all_load"] + extra_links extra_links = ["-Wl,-all_load"] + extra_links
include_dirs = [np.get_include(), "../"] # include numpy and paddle. include_dirs = [np.get_include(), "../"] # include numpy and paddle.
......
...@@ -22,6 +22,7 @@ limitations under the License. */ ...@@ -22,6 +22,7 @@ limitations under the License. */
#include <map> #include <map>
#include <mutex> #include <mutex>
#include <random> #include <random>
#include "Util.h"
#include "Logging.h" #include "Logging.h"
namespace paddle { namespace paddle {
...@@ -156,14 +157,7 @@ private: ...@@ -156,14 +157,7 @@ private:
static void dataDestructor(void* p) { delete (T*)p; } static void dataDestructor(void* p) { delete (T*)p; }
void updateMap(T* p) { void updateMap(T* p) {
#if defined(__APPLE__) || defined(__OSX__) pid_t tid = getTID();
pid_t tid = syscall(SYS_thread_selfid);
#else
#ifndef __NR_gettid
#define __NR_gettid 224
#endif
pid_t tid = syscall(__NR_gettid);
#endif
CHECK_NE(tid, -1); CHECK_NE(tid, -1);
std::lock_guard<std::mutex> guard(mutex_); std::lock_guard<std::mutex> guard(mutex_);
auto ret = threadMap_.insert(std::make_pair(tid, p)); auto ret = threadMap_.insert(std::make_pair(tid, p));
......
...@@ -95,7 +95,11 @@ namespace paddle { ...@@ -95,7 +95,11 @@ namespace paddle {
pid_t getTID() { pid_t getTID() {
#if defined(__APPLE__) || defined(__OSX__) #if defined(__APPLE__) || defined(__OSX__)
pid_t tid = syscall(SYS_thread_selfid); // syscall is deprecated: first deprecated in macOS 10.12.
// syscall is unsupported;
// syscall pid_t tid = syscall(SYS_thread_selfid);
uint64_t tid;
pthread_threadid_np(NULL, &tid);
#else #else
#ifndef __NR_gettid #ifndef __NR_gettid
#define __NR_gettid 224 #define __NR_gettid 224
......
...@@ -16,6 +16,11 @@ limitations under the License. */ ...@@ -16,6 +16,11 @@ limitations under the License. */
#include "paddle/utils/Logging.h" #include "paddle/utils/Logging.h"
#include <dispatch/dispatch.h> #include <dispatch/dispatch.h>
#include <libkern/OSAtomic.h> #include <libkern/OSAtomic.h>
#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12
#include <os/lock.h>
#endif
namespace paddle { namespace paddle {
class SemaphorePrivate { class SemaphorePrivate {
...@@ -50,21 +55,32 @@ void Semaphore::post() { ...@@ -50,21 +55,32 @@ void Semaphore::post() {
class SpinLockPrivate { class SpinLockPrivate {
public: public:
#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12
os_unfair_lock lock_;
#else
SpinLockPrivate(): lock_(OS_SPINLOCK_INIT) {} SpinLockPrivate(): lock_(OS_SPINLOCK_INIT) {}
OSSpinLock lock_; OSSpinLock lock_;
char padding_[64 - sizeof(OSSpinLock)]; // Padding to cache line size #endif
char padding_[64 - sizeof(lock_)]; // Padding to cache line size
}; };
SpinLock::SpinLock(): m(new SpinLockPrivate()) {} SpinLock::SpinLock(): m(new SpinLockPrivate()) {}
SpinLock::~SpinLock() { delete m; } SpinLock::~SpinLock() { delete m; }
void SpinLock::lock() { void SpinLock::lock() {
#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12
os_unfair_lock_lock(&m->lock_);
#else
OSSpinLockLock(&m->lock_); OSSpinLockLock(&m->lock_);
#endif
} }
void SpinLock::unlock() { void SpinLock::unlock() {
#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12
os_unfair_lock_unlock(&m->lock_);
#else
OSSpinLockUnlock(&m->lock_); OSSpinLockUnlock(&m->lock_);
#endif
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册