diff --git a/deps/labjack/ljacklm/build.zig b/deps/labjack/ljacklm/build.zig index 78ec2c9..7cb124f 100644 --- a/deps/labjack/ljacklm/build.zig +++ b/deps/labjack/ljacklm/build.zig @@ -17,6 +17,10 @@ pub fn build(b: *std.Build) !void { .link_libc = true, }); + if (target.result.os.tag == .windows) { + libljacklm.defineCMacro("LJACKLM_USE_WINDOWS_MUTEX_SHIM", "1"); + } + libljacklm.addCSourceFile(.{ .file = b.path("libljacklm/ljacklm.c") }); libljacklm.installHeader(b.path("libljacklm/ljacklm.h"), "ljacklm.h"); diff --git a/deps/labjack/ljacklm/libljacklm/ljacklm.c b/deps/labjack/ljacklm/libljacklm/ljacklm.c index 0febd8c..eddb20c 100644 --- a/deps/labjack/ljacklm/libljacklm/ljacklm.c +++ b/deps/labjack/ljacklm/libljacklm/ljacklm.c @@ -23,7 +23,14 @@ #include #include #include -#include + +#if defined(LJACKLM_USE_WINDOWS_MUTEX_SHIM) + #include + #include "windows_mutex_shim.h" +#else + #include +#endif // LJACKLM_USE_WINDOWS_MUTEX_SHIM + #include "labjackusb.h" @@ -286,7 +293,9 @@ long GetU12Information( HANDLE hDevice, long *fcddMaxSize, long *hvcMaxSize); +#if !defined(LJACKLM_USE_WINDOWS_MUTEX_SHIM) unsigned long GetTickCount( void); +#endif __attribute__((constructor)) @@ -7266,6 +7275,7 @@ long GetU12Information( HANDLE hDevice, } +#if !defined(LJACKLM_USE_WINDOWS_MUTEX_SHIM) //====================================================================== //GetTickCount: Implementation of GetTickCount() for Unix. Returns the // current time, expressed as millisconds since the Epoch @@ -7276,3 +7286,4 @@ unsigned long GetTickCount( void) gettimeofday(&tv, NULL); return (tv.tv_sec * 1000) + (tv.tv_usec / 1000); } +#endif diff --git a/deps/labjack/ljacklm/libljacklm/windows_mutex_shim.h b/deps/labjack/ljacklm/libljacklm/windows_mutex_shim.h new file mode 100644 index 0000000..6ba645a --- /dev/null +++ b/deps/labjack/ljacklm/libljacklm/windows_mutex_shim.h @@ -0,0 +1,28 @@ +#ifndef LJACKLM_WIN_MUTEX +#define LJACKLM_WIN_MUTEX + +typedef CRITICAL_SECTION pthread_mutex_t; + +static inline int pthread_mutex_init(pthread_mutex_t *mutex, void *attr) { + InitializeCriticalSection(mutex); + return 0; +} + +static inline void pthread_mutex_lock(pthread_mutex_t *mutex) { + EnterCriticalSection(mutex); +} + +static inline int pthread_mutex_unlock(pthread_mutex_t *mutex) { + LeaveCriticalSection(mutex); + return 0; +} + +static inline int pthread_mutex_trylock(pthread_mutex_t *mutex) { + return TryEnterCriticalSection(mutex) == 0; +} + +static inline void pthread_mutex_destroy(pthread_mutex_t *mutex) { + DeleteCriticalSection(mutex); +} + +#endif // LJACKLM_WIN_MUTEX