diff --git a/include/types.h b/include/types.h index 1cc61ef43..d6fbd14ef 100644 --- a/include/types.h +++ b/include/types.h @@ -47,6 +47,8 @@ typedef uint64_t u64; #if defined (_WIN) typedef LARGE_INTEGER hc_timer_t; +#elif defined(__APPLE__) && defined(MISSING_CLOCK_GETTIME) +typedef struct timeval hc_timer_t; #else typedef struct timespec hc_timer_t; #endif diff --git a/src/Makefile b/src/Makefile index 5a2ff193c..ae491b6f5 100644 --- a/src/Makefile +++ b/src/Makefile @@ -92,6 +92,7 @@ ifeq ($(UNAME),Darwin) CC := clang # the sed -i option of macOS requires a parameter for the backup file (we just use "") SED_IN_PLACE := -i "" +PROD_VERS := $(shell sw_vers -productVersion | cut -d. -f2) endif ifeq ($(UNAME),FreeBSD) @@ -215,6 +216,11 @@ endif # FreeBSD ifeq ($(UNAME),Darwin) export MACOSX_DEPLOYMENT_TARGET=10.9 CFLAGS_NATIVE := $(CFLAGS) + +ifeq ($(shell test $(PROD_VERS) -le 11; echo $$?), 0) +CFLAGS_NATIVE += -DMISSING_CLOCK_GETTIME +endif + LFLAGS_NATIVE := $(LFLAGS) LFLAGS_NATIVE += -framework OpenCL LFLAGS_NATIVE += -lpthread diff --git a/src/timer.c b/src/timer.c index 01aa86e10..415514456 100644 --- a/src/timer.c +++ b/src/timer.c @@ -33,7 +33,11 @@ inline double hc_timer_get (hc_timer_t a) inline void hc_timer_set (hc_timer_t* a) { + #if defined(__APPLE__) && defined(MISSING_CLOCK_GETTIME) + gettimeofday (a, NULL); + #else clock_gettime (CLOCK_MONOTONIC, a); + #endif } inline double hc_timer_get (hc_timer_t a) @@ -42,6 +46,9 @@ inline double hc_timer_get (hc_timer_t a) hc_timer_set (&hr_tmp); + #if defined(__APPLE__) && defined(MISSING_CLOCK_GETTIME) + return (double) (((hr_tmp.tv_sec - (a).tv_sec) * 1000) + ((double) (hr_tmp.tv_usec - (a).tv_usec) / 1000)); + #else hc_timer_t s; s.tv_sec = hr_tmp.tv_sec - a.tv_sec; @@ -56,6 +63,7 @@ inline double hc_timer_get (hc_timer_t a) double r = ((double) s.tv_sec * 1000) + ((double) s.tv_nsec / 1000000); return r; + #endif } #endif