From f9a26b5aec6cfb32deac895d68ebbe9b8ec969d1 Mon Sep 17 00:00:00 2001 From: Stefan Arentz Date: Mon, 13 Mar 2017 11:09:49 -0400 Subject: [PATCH] Fixes #143 Implement a clock_gettime replacement --- src/Makefile | 6 +++--- src/cpu_bench.c | 1 + src/cpu_test.c | 1 + src/mem_bench.c | 1 + src/utl.c | 28 ++++++++++++++++++++++++++++ src/utl.h | 11 +++++++++++ 6 files changed, 45 insertions(+), 3 deletions(-) diff --git a/src/Makefile b/src/Makefile index 7effe59..2513e87 100644 --- a/src/Makefile +++ b/src/Makefile @@ -30,7 +30,7 @@ EWM_OBJECTS=$(EWM_SOURCES:.c=.o) EWM_LIBS=-lSDL2 CPU_TEST_EXECUTABLE=cpu_test -CPU_TEST_SOURCES=cpu.c ins.c mem.c fmt.c cpu_test.c +CPU_TEST_SOURCES=cpu.c ins.c mem.c fmt.c utl.c cpu_test.c CPU_TEST_OBJECTS=$(CPU_TEST_SOURCES:.c=.o) CPU_TEST_LIBS= @@ -40,12 +40,12 @@ SCR_TEST_OBJECTS=$(SCR_TEST_SOURCES:.c=.o) SCR_TEST_LIBS=-lSDL2 CPU_BENCH=cpu_bench -CPU_BENCH_SOURCES=cpu.c ins.c mem.c fmt.c cpu_bench.c +CPU_BENCH_SOURCES=cpu.c ins.c mem.c fmt.c utl.c cpu_bench.c CPU_BENCH_OBJECTS=$(CPU_BENCH_SOURCES:.c=.o) CPU_BENCH_LIBS= MEM_BENCH=mem_bench -MEM_BENCH_SOURCES=cpu.c ins.c mem.c fmt.c mem_bench.c +MEM_BENCH_SOURCES=cpu.c ins.c mem.c fmt.c utl.c mem_bench.c MEM_BENCH_OBJECTS=$(MEM_BENCH_SOURCES:.c=.o) MEM_BENCH_LIBS= diff --git a/src/cpu_bench.c b/src/cpu_bench.c index 81c5813..216512f 100644 --- a/src/cpu_bench.c +++ b/src/cpu_bench.c @@ -27,6 +27,7 @@ #include "cpu.h" #include "ins.h" #include "mem.h" +#include "utl.h" #define CPU_BENCH_ITERATIONS (100 * 1000 * 1000) diff --git a/src/cpu_test.c b/src/cpu_test.c index 1b012b1..d5d0d7f 100644 --- a/src/cpu_test.c +++ b/src/cpu_test.c @@ -29,6 +29,7 @@ #include "cpu.h" #include "mem.h" +#include "utl.h" int test(int model, uint16_t start_addr, uint16_t success_addr, char *rom_path) { struct cpu_t *cpu = cpu_create(model); diff --git a/src/mem_bench.c b/src/mem_bench.c index b4f0740..97ab5a4 100644 --- a/src/mem_bench.c +++ b/src/mem_bench.c @@ -26,6 +26,7 @@ #include "cpu.h" #include "mem.h" +#include "utl.h" #define MEM_BENCH_ITERATIONS (100 * 1000 * 1000) diff --git a/src/utl.c b/src/utl.c index b5202cb..f66beef 100644 --- a/src/utl.c +++ b/src/utl.c @@ -23,6 +23,12 @@ #include #include +#if __APPLE__ && __MACH__ +#include +#include +#include +#endif + #include "utl.h" bool ewm_utl_endswith(char *s, char *suffix) { @@ -33,3 +39,25 @@ bool ewm_utl_endswith(char *s, char *suffix) { } return false; } + +#if (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101200) +int clock_gettime(clockid_t clk_id, struct timespec *tp) { + if (clk_id != CLOCK_REALTIME) { + return -1; + } + + kern_return_t result = KERN_SUCCESS; + + clock_serv_t cclock; + mach_timespec_t mts; + + host_get_clock_service(mach_host_self(), clk_id, &cclock); + result = clock_get_time(cclock, &mts); + mach_port_deallocate(mach_task_self(), cclock); + + tp->tv_sec = mts.tv_sec; + tp->tv_nsec = mts.tv_nsec; + + return result; +} +#endif diff --git a/src/utl.h b/src/utl.h index 57d2324..5834b1e 100644 --- a/src/utl.h +++ b/src/utl.h @@ -25,6 +25,17 @@ #include +#if __APPLE__ && __MACH__ +#include +#include +#endif + bool ewm_utl_endswith(char *s, char *suffix); +#if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101200 +#define CLOCK_REALTIME CALENDAR_CLOCK +typedef int clockid_t; +int clock_gettime(clockid_t clk_id, struct timespec *tp); +#endif + #endif // EWM_UTL_H