1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-07 19:18:19 +02:00
Beef/BeefySysLib/platform/win/BFPlatform.h
Brian Fiete a367b8165f Win32 debugging fixes, more work on custom compile commands
Fixed working dir for 'launch'
Fixed attaching to process - stack trace wasn't updating properly
Fixed more custom compile stuff, and BeefySysLib bin destination
Fixed linking issues related to Bfp* and Bp* exports in both BeefRT and BeefySysLib
Fixed a crash with conditional breakpoints
Fixed release mode IDE issues (related to hot swap breakpoints)
Fixed hotswapping type data with LLVM builds
Fixed 'Pause' state processing Running_ToTempBreakpoint for ScriptManager
Fixed Win32 step out when there's an ESP adjustment at the return site
Made step-out skip over "unimportant" instructions at return site
2019-08-29 14:19:07 -07:00

204 lines
No EOL
4.6 KiB
C

#pragma once
#ifndef NOMINMAX
#define NOMINMAX
#endif
#if (defined __MINGW32__) && (!defined BF_MINGW)
#define BF_MINGW
#endif
#define WIN32_LEAN_AND_MEAN
#define BF_PLATFORM_WINDOWS
#define BF_PLATFORM_NAME "BF_PLATFORM_WINDOWS"
#ifdef BF_MINGW
#pragma clang diagnostic ignored "-Wunused-variable"
#pragma clang diagnostic ignored "-Wunknown-pragmas"
#pragma clang diagnostic ignored "-Wunused-function"
#pragma clang diagnostic ignored "-Wunknown-attributes"
#pragma clang diagnostic ignored "-Wunused-member-function"
#pragma clang diagnostic ignored "-Wunused-conversion-function"
#pragma clang diagnostic ignored "-Wunused-private-field"
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
#else
#define BF_VC
#endif
#include <windows.h>
#include <assert.h>
#include <stdint.h>
#include <assert.h>
#include <wtypes.h>
#define DIR_SEP_CHAR '\\'
#define DIR_SEP_CHAR_ALT '/'
#ifndef BF_NO_FFI
extern "C"
{
#define FFI_BUILDING
#include "libffi/i686-pc-cygwin/include/ffi.h"
}
#endif
//#define BF_FORCE_SDL
#ifdef SDL_FORCE_OPENGL_ES2
#define BF_PLATFORM_OPENGL_ES2
#endif
#if (_MSC_VER == 1800) && (!defined BFSYSLIB_STATIC)
#define BF_WWISE_ENABLED
#endif
#define CPP11
#ifdef _DEBUG
#define BF_DEBUG
//#define DEBUG
#endif
#ifdef BF_MINGW
#define NOP asm volatile("nop");
extern "C" _CRTIMP int __cdecl __MINGW_NOTHROW _stricmp (const char*, const char*);
#elif defined _WIN64
#define BF64
#define NOP GetTickCount()
#else
#define BF32
#define NOP __asm nop;
#endif
#define BF_HAS_TLS_DECLSPEC
#ifdef BF_MINGW
#define BF_TLS_DECLSPEC __thread
#else
#define BF_TLS_DECLSPEC __declspec(thread)
#endif
#if defined _DEBUG || defined BF_DEBUG_ASSERTS
#define BF_ASSERT(_Expression) (void)( (!!(_Expression)) || (Beefy::BFFatalError(#_Expression, __FILE__, __LINE__), 0) )
#else
#define BF_ASSERT(_Expression) (void)(0)
#endif
#define BF_ASSERT_REL(_Expression) (void)( (!!(_Expression)) || (Beefy::BFFatalError(#_Expression, __FILE__, __LINE__), 0) )
#define BF_FATAL(msg) (void) ((Beefy::BFFatalError(msg, __FILE__, __LINE__), 0) )
#if defined _DEBUG || defined BF_DEBUG_ASSERTS
#define BF_DBG_FATAL(msg) (void) ((Beefy::BFFatalError(msg, __FILE__, __LINE__), 0) )
#else
#define BF_DBG_FATAL(msg)
#endif
#define BFSTDCALL __stdcall
#define BF_IMPORT extern "C" __declspec(dllimport)
#ifdef BFSYSLIB_DYNAMIC
#define BF_EXPORT extern "C" __declspec(dllexport)
#define BF_CALLTYPE __stdcall
#ifdef BFP_NOEXPORT
#define BFP_EXPORT extern "C"
#define BFP_CALLTYPE __stdcall
#endif
#else
#define BF_EXPORT extern "C"
#define BF_CALLTYPE __stdcall
#endif
#define BF_NOINLINE __declspec(noinline)
#define BF_NAKED __declspec(naked)
#define BF_PACKED(x) __pragma(pack(push, 1)) x __pragma(pack(pop))
#define BF_ALIGNED(x) __declspec(align(x))
#ifndef BF_MINGW
#define strtoull _strtoui64
#endif
//#define snprintf _snprintf
#define __func__ __FUNCTION__
typedef uint64_t uint64;
typedef uint32_t uint32;
typedef uint16_t uint16;
typedef uint8_t uint8;
typedef int64_t int64;
typedef int32_t int32;
typedef int16_t int16;
typedef int8_t int8;
typedef unsigned int uint;
typedef intptr_t intptr;
typedef uintptr_t uintptr;
typedef DWORD BF_THREADID;
typedef HANDLE BF_THREADHANDLE;
#ifdef BF_MINGW
#define BF_COMPILER_FENCE() __asm__ __volatile__("mfence" : : : "memory");
#define BF_FULL_MEMORY_FENCE() __asm__ __volatile__("mfence" : : : "memory");
#define BF_SPINWAIT_NOP() __asm__ __volatile__( "pause;" )
#define BF_DEBUG_BREAK() __asm__ __volatile__( "int $0x03;" )
#else
#define BF_COMPILER_FENCE() _ReadWriteBarrier()
//#define BF_FULL_MEMORY_FENCE() __asm { lock add dword ptr [esp],0 }
#ifdef BF32
#define BF_FULL_MEMORY_FENCE() ::MemoryBarrier()
#else
#define BF_FULL_MEMORY_FENCE() _mm_mfence()
#endif
//#define BF_SPINWAIT_NOP() _asm { pause }
#define BF_SPINWAIT_NOP() _mm_pause()
#define BF_DEBUG_BREAK() DebugBreak()
#endif
typedef DWORD BfTLSKey;
#define BfTLSGetValue ::TlsGetValue
#define BfTLSSetValue ::TlsSetValue
#define BfTLSAlloc ::TlsAlloc
#define BfTLSFree ::TlsFree
#define BF_THREAD_YIELD() ::SwitchToThread()
#define BF_UNUSED
#define BF_EXPLICIT explicit
#define BF_ENDIAN_LITTLE
#define WaitForSingleObject_Thread WaitForSingleObject
#define CloseHandle_File CloseHandle
#define CloseHandle_Event CloseHandle
#define CloseHandle_Thread CloseHandle
#define CloseHandle_Process CloseHandle
#ifdef BF32
#define BF_REGISTER_COUNT 7
#else
#define BF_REGISTER_COUNT 15
#endif
#ifndef BF_MINGW
#define __thread __declspec(thread)
#endif
#ifdef BF_MINGW
//
#else
#define strcasecmp stricmp
#endif
struct BfpEvent
{
CRITICAL_SECTION mCritSect;
CONDITION_VARIABLE mCondVariable;
bool mSet;
bool mManualReset;
};
#include "../PlatformInterface.h"