#include #define _POSIX_C_SOURCE 200809L #include #include #include #include #include #include #include #include "all.h" global pthread_barrier_t linux_thread_barrier; fn Barrier osBarrierAlloc(u64 count) { pthread_barrier_init(&linux_thread_barrier, NULL, count); Barrier result = {(u64)&linux_thread_barrier}; return result; } fn void osBarrierRelease(Barrier barrier) { pthread_barrier_t* addr = (pthread_barrier_t*)barrier.a[0]; pthread_barrier_destroy(addr); } fn void osBarrierWait(Barrier barrier) { pthread_barrier_t* addr = (pthread_barrier_t*)barrier.a[0]; pthread_barrier_wait(addr); } // Time fn void osSleepMicroseconds(u32 t) { struct timespec ts = { t / MICROSECONDS_PER_SECOND, (t % MICROSECONDS_PER_SECOND)*NANOSECONDS_PER_MICROSECOND }; nanosleep(&ts, NULL); } // Files /* fn bool osFileCreate(String filename) { M_Scratch scratch = scratch_get(); string nt = str_copy(&scratch.arena, filename); bool result = true; size_t handle = open((const char*) nt.str, O_RDWR | O_CREAT, S_IRUSR | S_IRGRP | S_IROTH); if (handle == -1) { result = false; } scratch_return(&scratch); close(handle); return true; bool result = true; size_t handle = open((str)filename.bytes, O_RDWR | O_CREAT, S_IRUSR | S_IRGRP | S_IROTH); if (handle == -1) { result = false; } if (close(handle) == -1) { result = false; } return result; } */ // Misc fn void osDebugPrint(bool debug_mode, const char * format, ... ) { if (debug_mode) { va_list args; va_start(args, format); vprintf(format, args); va_end(args); } }