diff options
author | Rui Guo <guorui.xt@gmail.com> | 2016-09-23 17:36:38 +0300 |
---|---|---|
committer | Rui Guo <guorui.xt@gmail.com> | 2016-09-23 17:36:38 +0300 |
commit | 9ee8b3fea852ea49abe0cba3e49cee050862142e (patch) | |
tree | 07b367ed373b21f6fef45429ee07802d11555e4f | |
parent | 7cabb0091919af846de3d54a021973e6080a819c (diff) |
use internal pthread wrapper for windows
-rw-r--r-- | lib/THThread.c | 8 | ||||
-rw-r--r-- | lib/init.c | 2 | ||||
-rw-r--r-- | lib/thread-main.c | 2 | ||||
-rw-r--r-- | rocks/threads-scm-1.rockspec | 25 |
4 files changed, 27 insertions, 10 deletions
diff --git a/lib/THThread.c b/lib/THThread.c index 18fc81e..6951caf 100644 --- a/lib/THThread.c +++ b/lib/THThread.c @@ -18,6 +18,10 @@ typedef HANDLE pthread_t; typedef DWORD pthread_attr_t; typedef HANDLE pthread_mutex_t; typedef HANDLE pthread_cond_t; +typedef HANDLE pthread_mutexattr_t; +typedef HANDLE pthread_condattr_t; +typedef unsigned ( __stdcall *THREAD_FUNCTION )( void * ); +#define restrict __restrict static int pthread_create(pthread_t *restrict thread, const pthread_attr_t *restrict attr, void *(*start_routine)(void *), @@ -41,7 +45,7 @@ static int pthread_mutex_init(pthread_mutex_t *restrict mutex, static int pthread_mutex_lock(pthread_mutex_t *mutex) { - return WaitForSingleObject(*mutex, INFINITE) == 0; + return WaitForSingleObject(*mutex, INFINITE) != 0; } static int pthread_mutex_unlock(pthread_mutex_t *mutex) @@ -65,7 +69,7 @@ static int pthread_cond_wait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex) { SignalObjectAndWait(*mutex, *cond, INFINITE, FALSE); - return WaitForSingleObject(*mutex, INFINITE) == 0; + return WaitForSingleObject(*mutex, INFINITE) != 0; } static int pthread_cond_destroy(pthread_cond_t *cond) @@ -28,7 +28,7 @@ static void luaL_setfuncs(lua_State *L, const luaL_Reg *l, int nup) #include "queue.c" #if defined(_WIN32) -__declspec(dllexport) int luaopen_libthreads(lua_State *L) +__declspec(dllexport) int _cdecl luaopen_libthreads(lua_State *L) #else int luaopen_libthreads(lua_State *L) #endif diff --git a/lib/thread-main.c b/lib/thread-main.c index 5008a07..ee54748 100644 --- a/lib/thread-main.c +++ b/lib/thread-main.c @@ -35,7 +35,7 @@ static int runthread(void *code_) } #if defined(_WIN32) -__declspec(dllexport) void* THThread_main(void *arg) +__declspec(dllexport) void* _cdecl THThread_main(void *arg) #else void* THThread_main(void *arg) #endif diff --git a/rocks/threads-scm-1.rockspec b/rocks/threads-scm-1.rockspec index c9f01f0..9765d4a 100644 --- a/rocks/threads-scm-1.rockspec +++ b/rocks/threads-scm-1.rockspec @@ -21,10 +21,23 @@ dependencies = { } build = { - type = "cmake", - variables = { - CMAKE_BUILD_TYPE="Release", - CMAKE_PREFIX_PATH="$(LUA_BINDIR)/..", - CMAKE_INSTALL_PREFIX="$(PREFIX)" - } + type = "command", + build_command = [[ +cmake -E make_directory build && cd build && cmake .. -DLUALIB=$(LUALIB) -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$(LUA_BINDIR)/.." -DCMAKE_INSTALL_PREFIX="$(PREFIX)" && $(MAKE) + ]], + platforms = { + windows = { + -- example with dlfcn-win + -- luarocks make rocks\threads-scm-1.rockspec WIN_DLFCN_INCDIR="D:\Libraries\include" WIN_DLFCN_LIBDIR="D:\Libraries\lib" + build_command = [[ +cmake -E make_directory build && cd build && cmake .. -G "NMake Makefiles" -DWIN_DLFCN_INCDIR="$(WIN_DLFCN_INCDIR)" -DWIN_DLFCN_LIBDIR="$(WIN_DLFCN_LIBDIR)" -DLUALIB=$(LUALIB) -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$(LUA_BINDIR)/.." -DCMAKE_INSTALL_PREFIX="$(PREFIX)" && $(MAKE) +]] + -- example with dlfcn-win and pthread-win + -- luarocks make rocks\threads-scm-1.rockspec WIN_DLFCN_INCDIR="D:\Libraries\include" WIN_DLFCN_LIBDIR="D:\Libraries\lib" CMAKE_HAVE_PTHREAD_H="D:\Libraries\include" CMAKE_HAVE_LIBC_CREATE="D:\Libraries\lib\pthreadVC2.lib" PTHREAD_LIB_NAME="pthreadVC2" + -- build_command = [[ +-- cmake -E make_directory build && cd build && cmake .. -G "NMake Makefiles" -DWIN_DLFCN_INCDIR="$(WIN_DLFCN_INCDIR)" -DWIN_DLFCN_LIBDIR="$(WIN_DLFCN_LIBDIR)" -DUSE_PTHREAD_THREADS=1 -DCMAKE_HAVE_PTHREAD_H="$(CMAKE_HAVE_PTHREAD_H" -DCMAKE_HAVE_LIBC_CREATE="$(CMAKE_HAVE_LIBC_CREATE)" -DPTHREAD_LIB_NAME="$(PTHREAD_LIB_NAME)" -DLUALIB=$(LUALIB) -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$(LUA_BINDIR)/.." -DCMAKE_INSTALL_PREFIX="$(PREFIX)" && $(MAKE) +-- ]] + } + }, + install_command = "cd build && $(MAKE) install" } |