Fix problem exposing platform w/o implementation
This commit is contained in:
parent
f8a4d4fe4b
commit
924aa84e7d
58
dqn.h
58
dqn.h
@ -4,7 +4,11 @@
|
|||||||
/*
|
/*
|
||||||
#define DQN_IMPLEMENTATION // Enable the implementation
|
#define DQN_IMPLEMENTATION // Enable the implementation
|
||||||
|
|
||||||
|
// Define this wherever you want access to DQN code that uses the platform.
|
||||||
|
#define DQN_PLATFORM_HEADER // Enable function prototypes for xplatform/platform code
|
||||||
|
|
||||||
// NOTE: For platform code, it's one or the other or you will get compilation problems.
|
// NOTE: For platform code, it's one or the other or you will get compilation problems.
|
||||||
|
// Define this in ONE and only ONE file to enable the implementation of platform code.
|
||||||
#define DQN_WIN32_IMPLEMENTATION // Enable Win32 Code, but only if _WIN32 or _WIN64 is already defined. Also requires DQN_IMPLEMENTATION.
|
#define DQN_WIN32_IMPLEMENTATION // Enable Win32 Code, but only if _WIN32 or _WIN64 is already defined. Also requires DQN_IMPLEMENTATION.
|
||||||
#define DQN_UNIX_IMPLEMENTATION // Enable Unix Code, but only if __linux__ is already defined. Also requires DQN_IMPLEMENTATION.
|
#define DQN_UNIX_IMPLEMENTATION // Enable Unix Code, but only if __linux__ is already defined. Also requires DQN_IMPLEMENTATION.
|
||||||
|
|
||||||
@ -77,16 +81,22 @@
|
|||||||
// This needs to be above the portable layer so that, if the user requests
|
// This needs to be above the portable layer so that, if the user requests
|
||||||
// a platform implementation, platform specific implementations in the portable
|
// a platform implementation, platform specific implementations in the portable
|
||||||
// layer will get activated.
|
// layer will get activated.
|
||||||
#if (defined(_WIN32) || defined(_WIN64)) && defined(DQN_WIN32_IMPLEMENTATION)
|
#if (defined(_WIN32) || defined(_WIN64))
|
||||||
#define DQN_XPLATFORM_LAYER
|
#define DQN_IS_WIN32 1
|
||||||
#define DQN_WIN32_PLATFORM
|
#elif defined(__linux__)
|
||||||
#elif defined(__linux__) && defined(DQN_UNIX_IMPLEMENTATION)
|
#define DQN_IS_UNIX 1
|
||||||
#define DQN_XPLATFORM_LAYER
|
#endif
|
||||||
#define DQN_UNIX_PLATFORM
|
|
||||||
|
#if defined(DQN_IS_WIN32) && defined(DQN_WIN32_IMPLEMENTATION)
|
||||||
|
#define DQN_XPLATFORM_LAYER 1
|
||||||
|
#define DQN_WIN32_PLATFORM 1
|
||||||
|
#elif defined(DQN_IS_UNIX) && defined(DQN_UNIX_IMPLEMENTATION)
|
||||||
|
#define DQN_XPLATFORM_LAYER 1
|
||||||
|
#define DQN_UNIX_PLATFORM 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__cplusplus)
|
#if defined(__cplusplus)
|
||||||
#define DQN_CPP_MODE
|
#define DQN_CPP_MODE 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -1070,13 +1080,20 @@ DQN_FILE_SCOPE void Dqn_QuickSort(T *const array, const u32 size,
|
|||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// Functions in the Cross Platform are guaranteed to be supported in both Unix
|
// Functions in the Cross Platform are guaranteed to be supported in both Unix
|
||||||
// and Win32
|
// and Win32
|
||||||
#ifdef DQN_XPLATFORM_LAYER
|
|
||||||
|
|
||||||
#if defined(DQN_WIN32_PLATFORM)
|
// NOTE(doyle): DQN_PLATFORM_HEADER is enabled by the user to have the function prototypes be
|
||||||
#define WIN32_LEAN_AND_MEAN
|
// visible. DQN_PLATFORM_H is like a normal header guard that ensures singular declaration of
|
||||||
|
// functions.
|
||||||
|
#ifdef DQN_PLATFORM_HEADER
|
||||||
|
|
||||||
|
#ifndef DQN_PLATFORM_H
|
||||||
|
#define DQN_PLATFORM_H
|
||||||
|
|
||||||
|
#if defined(DQN_IS_WIN32)
|
||||||
|
#define WIN32_LEAN_AND_MEAN 1
|
||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
|
|
||||||
#elif defined(DQN_UNIX_PLATFORM)
|
#elif defined(DQN_IS_UNIX)
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <semaphore.h>
|
#include <semaphore.h>
|
||||||
|
|
||||||
@ -1186,12 +1203,15 @@ DQN_FILE_SCOPE f64 DqnTimer_NowInS ();
|
|||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
typedef struct DqnLock
|
typedef struct DqnLock
|
||||||
{
|
{
|
||||||
#if defined(DQN_WIN32_PLATFORM)
|
#if defined(DQN_IS_WIN32)
|
||||||
CRITICAL_SECTION win32Handle;
|
CRITICAL_SECTION win32Handle;
|
||||||
|
|
||||||
#elif defined(DQN_UNIX_PLATFORM)
|
#elif defined(DQN_IS_UNIX)
|
||||||
pthread_mutex_t unixHandle;
|
pthread_mutex_t unixHandle;
|
||||||
|
|
||||||
|
#else
|
||||||
|
#error Unknown platform
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Win32 only, when trying to acquire a locked lock, it is the number of spins permitted
|
// Win32 only, when trying to acquire a locked lock, it is the number of spins permitted
|
||||||
@ -1269,10 +1289,10 @@ typedef struct DqnJobQueue
|
|||||||
i32 volatile jobToExecuteIndex;
|
i32 volatile jobToExecuteIndex;
|
||||||
i32 volatile numJobsToComplete;
|
i32 volatile numJobsToComplete;
|
||||||
|
|
||||||
#if defined(DQN_WIN32_PLATFORM)
|
#if defined(DQN_IS_WIN32)
|
||||||
void *semaphore;
|
void *semaphore;
|
||||||
|
|
||||||
#elif defined(DQN_UNIX_PLATFORM)
|
#elif defined(DQN_IS_UNIX)
|
||||||
sem_t semaphore;
|
sem_t semaphore;
|
||||||
|
|
||||||
#else
|
#else
|
||||||
@ -1342,8 +1362,6 @@ DQN_FILE_SCOPE i32 DqnAtomic_Add32(i32 volatile *const src, const i32 value);
|
|||||||
// numCores: numThreadsPerCore: Can be NULL, the function will just skip it.
|
// numCores: numThreadsPerCore: Can be NULL, the function will just skip it.
|
||||||
DQN_FILE_SCOPE void DqnPlatform_GetNumThreadsAndCores(u32 *const numCores, u32 *const numThreadsPerCore);
|
DQN_FILE_SCOPE void DqnPlatform_GetNumThreadsAndCores(u32 *const numCores, u32 *const numThreadsPerCore);
|
||||||
|
|
||||||
#endif // DQN_XPLATFORM_LAYER
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// #Platform Public API
|
// #Platform Public API
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -1353,7 +1371,7 @@ DQN_FILE_SCOPE void DqnPlatform_GetNumThreadsAndCores(u32 *const numCores, u32 *
|
|||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// #Win32Platform Public API
|
// #Win32Platform Public API
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
#ifdef DQN_WIN32_PLATFORM
|
#if defined(DQN_IS_WIN32)
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// Platform > #DqnWin32 Public API - Common Win32 API Helpers
|
// Platform > #DqnWin32 Public API - Common Win32 API Helpers
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -1385,8 +1403,10 @@ DQN_FILE_SCOPE void DqnWin32_OutputDebugString(const char *const formatStr, ...)
|
|||||||
// buf: Filled with the path to the executable file.
|
// buf: Filled with the path to the executable file.
|
||||||
// return: The offset to the last backslash. -1 if bufLen was not large enough or buf is null.
|
// return: The offset to the last backslash. -1 if bufLen was not large enough or buf is null.
|
||||||
DQN_FILE_SCOPE i32 DqnWin32_GetEXEDirectory(char *const buf, const u32 bufLen);
|
DQN_FILE_SCOPE i32 DqnWin32_GetEXEDirectory(char *const buf, const u32 bufLen);
|
||||||
|
#endif // DQN_IS_WIN32
|
||||||
|
#endif // DQN_PLATFORM_H
|
||||||
|
#endif // DQN_PLATFORM_HEADER
|
||||||
|
|
||||||
#endif // DQN_WIN32_PLATFORM
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// #External Code
|
// #External Code
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
#pragma GCC diagnostic ignored "-Wfree-nonheap-object"
|
#pragma GCC diagnostic ignored "-Wfree-nonheap-object"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define DQN_PLATFORM_HEADER
|
||||||
#define DQN_IMPLEMENTATION
|
#define DQN_IMPLEMENTATION
|
||||||
#include "dqn.h"
|
#include "dqn.h"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user