BSD: Add support (#140)

* BSD: Add support

* BSD: other fixes

There is still a bug when vgui haven't got text, maybe because of resources.

Also there is bug where when trying to start new game caption names shows wrong.

* BSD: Debugging

* BSD: modify preprocessor and fix windows

* BSD: Remove debugging and fix labels in gameui

* BSD: Remove disabling some DX9 commands

* BSD: Remove -g flag
This commit is contained in:
Er2 2022-11-24 22:04:29 +03:00 committed by GitHub
parent 807eaae850
commit 53bd92f7a8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
49 changed files with 221 additions and 178 deletions

2
.gitignore vendored
View File

@ -37,3 +37,5 @@ waf3*/
.vscode/
.depproj/
source-engine.sln
hl2/

View File

@ -631,8 +631,8 @@ void GLMDisplayInfo::Dump( int which )
{
SDLAPP_FUNC;
GLMPRINTF(("\n #%d: GLMDisplayInfo @ %08x, pixwidth=%d pixheight=%d",
which, (int)this, m_info.m_displayPixelWidth, m_info.m_displayPixelHeight ));
GLMPRINTF(("\n #%d: GLMDisplayInfo @ %p, pixwidth=%d pixheight=%d",
which, this, m_info.m_displayPixelWidth, m_info.m_displayPixelHeight ));
FOR_EACH_VEC( *m_modes, i )
{

View File

@ -270,7 +270,7 @@ public:
// Get the next N events. The function returns the number of events that were filled into your array.
virtual int GetEvents( CCocoaEvent *pEvents, int nMaxEventsToReturn, bool debugEvents = false );
#ifdef LINUX
#if defined(LINUX) || defined(BSD)
virtual int PeekAndRemoveKeyboardEvents( bool *pbEsc, bool *pbReturn, bool *pbSpace, bool debugEvent = false );
#endif
@ -1004,7 +1004,7 @@ int CSDLMgr::GetEvents( CCocoaEvent *pEvents, int nMaxEventsToReturn, bool debug
return nToWrite;
}
#ifdef LINUX
#if defined(LINUX) || defined(BSD)
int CSDLMgr::PeekAndRemoveKeyboardEvents( bool *pbEsc, bool *pbReturn, bool *pbSpace, bool debugEvent )
{

View File

@ -3,7 +3,7 @@
#ifdef ANDROID
#include <sys/cdefs.h>
#elif defined(OSX)
#elif defined(OSX) || defined(BSD)
#include <stdint.h>
#else
#include <bits/wordsize.h>

View File

@ -17,7 +17,7 @@
#include "filesystem.h"
#include "vguifont.h"
#if defined(LINUX) || defined(OSX)
#ifdef POSIX
#include <ft2build.h>
#include FT_FREETYPE_H
typedef void *(*FontDataHelper)( const char *pchFontName, int &size, const char *fontFileName );
@ -71,7 +71,7 @@ public:
IFileSystem *FileSystem() { return m_pFileSystem; }
IMaterialSystem *MaterialSystem() { return m_pMaterialSystem; }
#if defined(LINUX) || defined(OSX)
#ifdef POSIX
FT_Library GetFontLibraryHandle() { return library; }
void SetFontDataHelper( FontDataHelper helper ) { m_pFontDataHelper = helper; }
#endif
@ -96,7 +96,7 @@ private:
CUtlVector<CFontAmalgam> m_FontAmalgams;
CUtlVector<font_t *> m_Win32Fonts;
#if defined(LINUX) || defined(OSX)
#ifdef POSIX
FT_Library library;
FontDataHelper m_pFontDataHelper;
#endif

View File

@ -23,7 +23,7 @@ struct newChar_t
#ifdef WIN32
#include "Win32Font.h"
typedef CWin32Font font_t;
#elif defined(LINUX) || defined(OSX)
#elif defined(POSIX)
#include "linuxfont.h"
typedef CLinuxFont font_t;
#else

View File

@ -20,6 +20,11 @@
#include <copyfile.h>
#import <mach/mach_host.h>
#import <sys/sysctl.h>
#elif defined(BSD)
# include <sys/sysctl.h>
# include <sys/types.h>
# include <fcntl.h>
# define HW_MEMSIZE HW_PHYSMEM
#elif defined(LINUX)
#include <sys/types.h>
#include <sys/stat.h>
@ -105,7 +110,7 @@
#define BUG_REPOSITORY_URL "\\\\fileserver\\bugs"
#elif defined(OSX)
#define BUG_REPOSITORY_URL "/Volumes/bugs"
#elif defined(LINUX)
#elif defined(LINUX) || defined(BSD)
#define BUG_REPOSITORY_URL "\\\\fileserver\\bugs"
#else
//#error
@ -139,7 +144,7 @@ unsigned long GetRam()
MEMORYSTATUS stat;
GlobalMemoryStatus( &stat );
return (stat.dwTotalPhys / (1024 * 1024));
#elif defined(OSX)
#elif defined(OSX) || defined(BSD)
int mib[2] = { CTL_HW, HW_MEMSIZE };
u_int namelen = sizeof(mib) / sizeof(mib[0]);
uint64_t memsize;
@ -340,6 +345,12 @@ void DisplaySystemVersion( char *osversion, int maxlen )
fclose( fpKernelVer );
}
#elif BSD
#ifdef __FreeBSD__
osversion = (char *)"FreeBSD";
#else
osversion = (char *)"*BSD";
#endif
#endif
}
@ -2246,7 +2257,7 @@ void NonFileSystem_CreatePath (const char *path)
}
}
#ifdef LINUX
#if defined(LINUX) || defined(BSD)
#define COPYFILE_ALL 0
#define BSIZE 65535
int copyfile( const char *local, const char *remote, void *ignored, int ignoredFlags )

View File

@ -3947,7 +3947,7 @@ bool DLL_LOCAL Host_IsValidSignature( const char *pFilename, bool bAllowUnknown
#if defined( SWDS ) || defined(_X360)
return true;
#else
if ( sv.IsDedicated() || IsOSX() || IsLinux() )
if ( sv.IsDedicated() || IsOSX() || IsLinux() || IsBSD() )
{
// dedicated servers and Mac and Linux binaries don't check signatures
return true;

View File

@ -2714,6 +2714,14 @@ bool CGameServer::SpawnServer( const char *szMapName, const char *szMapFile, con
event->SetString( "os", "LINUX" );
#elif defined ( OSX )
event->SetString( "os", "OSX" );
#elif defined(BSD)
event->SetString("os",
# ifdef __FreeBSD__
"FreeBSD"
# else
"BSD"
# endif
);
#else
#error
#endif

View File

@ -21,9 +21,10 @@
#include <sys/socket.h>
#include <netinet/in.h>
//$ #include <uuid/uuid.h>
typedef unsigned char uuid_t[16];
#ifdef OSX
#include <uuid/uuid.h>
#elif defined(BSD)
#include <uuid.h>
#else
typedef unsigned char uuid_t[16];
#endif
@ -397,6 +398,9 @@ public:
uuid_t newId;
#ifdef OSX
uuid_generate( newId );
#elif defined(BSD)
uint32_t status;
uuid_create( &newId, &status );
#endif
#else
#error

View File

@ -12,6 +12,10 @@
#elif defined(OSX)
#include <Carbon/Carbon.h>
#include <sys/sysctl.h>
#elif defined(BSD)
#include <sys/types.h>
#include <sys/sysctl.h>
#define HW_MEMSIZE HW_PHYSMEM
#endif
#if defined(LINUX)
#include <unistd.h>
@ -456,21 +460,14 @@ void Sys_Error_Internal( bool bMinidump, const char *error, va_list argsList )
// We always get here because the above filter evaluates to EXCEPTION_EXECUTE_HANDLER
}
#elif defined( OSX )
#elif defined(POSIX)
// Doing this doesn't quite work the way we want because there is no "crashing" thread
// and we see "No thread was identified as the cause of the crash; No signature could be created because we do not know which thread crashed" on the back end
//SteamAPI_WriteMiniDump( 0, NULL, build_number() );
printf("\n ##### Sys_Error: %s", text );
fflush(stdout );
int *p = 0;
*p = 0xdeadbeef;
#elif defined( LINUX )
// Doing this doesn't quite work the way we want because there is no "crashing" thread
// and we see "No thread was identified as the cause of the crash; No signature could be created because we do not know which thread crashed" on the back end
//SteamAPI_WriteMiniDump( 0, NULL, build_number() );
int *p = 0;
*p = 0xdeadbeef;
raise(SIGTRAP);
#else
#warning "need minidump impl on sys_error"
#endif
@ -671,7 +668,7 @@ void Sys_InitMemory( void )
#elif defined(POSIX)
uint64_t memsize = ONE_HUNDRED_TWENTY_EIGHT_MB;
#if defined(OSX)
#if defined(OSX) || defined(BSD)
int mib[2] = { CTL_HW, HW_MEMSIZE };
u_int namelen = sizeof(mib) / sizeof(mib[0]);
size_t len = sizeof(memsize);
@ -1589,7 +1586,9 @@ CON_COMMAND( star_memory, "Dump memory stats" )
struct mstats memstats = mstats( );
Msg( "Available %.2f MB, Used: %.2f MB, #mallocs = %lu\n",
memstats.bytes_free / ( 1024.0 * 1024.0), memstats.bytes_used / ( 1024.0 * 1024.0 ), memstats.chunks_used );
#else
#elif BSD
# warning TODO: Implement memory stats (peace of sheet of course)
#else // Win32
MEMORYSTATUS stat;
GlobalMemoryStatus( &stat );
Msg( "Available: %.2f MB, Used: %.2f MB, Free: %.2f MB\n",

View File

@ -15,7 +15,7 @@
#include <Psapi.h>
#endif
#if defined( OSX )
#if defined( OSX ) || defined(BSD)
#include <sys/sysctl.h>
#endif
@ -278,7 +278,7 @@ static void posix_signal_handler( int i )
#define DO_TRY if ( sigsetjmp( g_mark, 1 ) == 0 )
#define DO_CATCH else
#if defined( OSX )
#if defined( OSX ) || defined(BSD)
#define __sighandler_t sig_t
#endif
@ -537,7 +537,7 @@ public:
FreeLibrary( hInst );
}
#elif defined( OSX )
#elif defined( OSX ) || defined(BSD)
static const struct
{
@ -548,8 +548,13 @@ public:
#define _XTAG( _x ) { _x, #_x }
_XTAG( HW_PHYSMEM ),
_XTAG( HW_USERMEM ),
#ifdef BSD
_XTAG( HW_PHYSMEM ),
_XTAG( HW_NCPU ),
#else
_XTAG( HW_MEMSIZE ),
_XTAG( HW_AVAILCPU ),
#endif
#undef _XTAG
};

View File

@ -25,7 +25,7 @@
#elif defined(_X360)
// nothing to include for 360
#elif defined(OSX)
#elif defined(LINUX)
#elif defined(LINUX) || defined(BSD)
#include "tier0/dynfunction.h"
#elif defined(_WIN32)
#include "tier0/dynfunction.h"
@ -833,11 +833,7 @@ LRESULT CGame::WindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
// return 0 if handled message, 1 if not
return lRet;
}
#elif defined(OSX)
#elif defined(LINUX)
#elif defined(_WIN32)
#elif defined(OSX) || defined(LINUX) || defined(_WIN32) || defined(BSD)
#else
#error

View File

@ -2841,7 +2841,7 @@ time_t CBaseFileSystem::FastFileTime( const CSearchPath *path, const char *pFile
{
return buf.st_mtime;
}
#ifdef LINUX
#if defined(LINUX) || defined(BSD)
char caseFixedName[ MAX_PATH ];
bool found = findFileInDirCaseInsensitive_safe( pTmpFileName, caseFixedName );
if ( found && FS_stat( caseFixedName, &buf ) != -1 )

View File

@ -1527,7 +1527,7 @@ void CBaseFileSystem::DoAsyncCallback( const FileAsyncRequest_t &request, void *
if ( pDataToFree )
{
Assert( !request.pfnAlloc );
#if defined( OSX ) || defined( LINUX )
#if defined( OSX ) || defined( LINUX ) || defined(BSD)
// The ugly delete[] (void*) method generates a compile warning on osx, as it should.
free( pDataToFree );
#else

View File

@ -579,7 +579,7 @@ int CFileSystem_Stdio::FS_chmod( const char *pathT, int pmode )
CBaseFileSystem::FixUpPath ( pathT, path, sizeof( path ) );
int rt = _chmod( path, pmode );
#if defined(LINUX)
#if defined(LINUX) || defined(BSD)
if (rt==-1)
{
char caseFixedName[ MAX_PATH ];
@ -707,7 +707,7 @@ int CFileSystem_Stdio::FS_stat( const char *pathT, struct _stat *buf, bool *pbLo
}
#endif // defined(_WIN32) && defined(FILESYSTEM_MSVC2015_STAT_BUG_WORKAROUND)
#if defined(LINUX)
#if defined(LINUX) || defined(BSD)
if ( rt == -1 )
{
char caseFixedName[ MAX_PATH ];
@ -866,7 +866,7 @@ CStdioFile *CStdioFile::FS_fopen( const char *filenameT, const char *options, in
}
}
#if defined(LINUX)
#if defined(LINUX) || defined(BSD)
if(!pFile && !strchr(options,'w') && !strchr(options,'+') ) // try opening the lower cased version
{
char caseFixedName[ MAX_PATH ];

View File

@ -1130,7 +1130,7 @@ void CBasePanel::UpdateBackgroundState()
vgui::GetAnimationController()->RunAnimationCommand( m_pGameLogo, "alpha", targetTitleAlpha, 0.0f, duration, AnimationController::INTERPOLATOR_LINEAR );
}
// Msg( "animating title (%d => %d at time %.2f)\n", m_pGameMenuButton->GetAlpha(), (int)targetTitleAlpha, engine->Time());
// Msg( "animating title (%d => %d at time %.2f)\n", m_pGameMenuButtons[0]->GetAlpha(), (int)targetTitleAlpha, engine->Time());
for ( i=0; i<m_pGameMenuButtons.Count(); ++i )
{
vgui::GetAnimationController()->RunAnimationCommand( m_pGameMenuButtons[i], "alpha", targetTitleAlpha, 0.0f, duration, AnimationController::INTERPOLATOR_LINEAR );
@ -1650,7 +1650,7 @@ void CBasePanel::PerformLayout()
for ( int i=0; i<m_pGameMenuButtons.Count(); ++i )
{
// Get the size of the logo text
//int textWide, textTall;
// int textWide, textTall;
m_pGameMenuButtons[i]->SizeToContents();
//vgui::surface()->GetTextSize( m_pGameMenuButtons[i]->GetFont(), ModInfo().GetGameTitle(), textWide, textTall );
@ -2220,7 +2220,7 @@ void CBasePanel::RunMenuCommand(const char *command)
RegCloseKey(hKey);
}
#elif defined( OSX ) || defined( LINUX )
#elif defined( OSX ) || defined( LINUX ) || defined(BSD)
FILE *fp = fopen( "/tmp/hl2_relaunch", "w+" );
if ( fp )
{

View File

@ -161,7 +161,7 @@ bool CVGuiSystemModuleLoader::LoadPlatformModules(CreateInterfaceFn *factorylist
{
dllPath = it->GetString("dll_osx");
}
else if ( IsLinux() )
else if ( IsLinux() || IsBSD() )
{
dllPath = it->GetString("dll_linux");
}

2
ivp

@ -1 +1 @@
Subproject commit 428231315f701259387d0720170b05c23263ff4c
Subproject commit 2306a2531691b46f739cb0b587c1f3527c7b1c11

View File

@ -10,7 +10,7 @@
#include <windows.h>
#include "shlwapi.h" // registry stuff
#include <direct.h>
#elif defined ( LINUX ) || defined( OSX )
#elif defined(POSIX)
#define O_EXLOCK 0
#include <sys/types.h>
#include <sys/stat.h>
@ -205,7 +205,7 @@ class CVCRHelpers : public IVCRHelpers
public:
virtual void ErrorMessage( const char *pMsg )
{
#if defined( WIN32 ) || defined( LINUX )
#if defined( WIN32 ) || defined( LINUX ) || defined(BSD)
NOVCR( ::MessageBox( NULL, pMsg, "VCR Error", MB_OK ) );
#endif
}
@ -950,7 +950,7 @@ bool GrabSourceMutex()
#ifdef ANDROID
return true;
#elif defined (LINUX)
#elif defined (LINUX) || defined(BSD)
/*
* Linux
*/
@ -1198,7 +1198,7 @@ DLL_EXPORT int LauncherMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR
DLL_EXPORT int LauncherMain( int argc, char **argv )
#endif
{
#if defined LINUX && !defined ANDROID
#if (defined(LINUX) || defined(BSD)) && !defined ANDROID
// Temporary fix to stop us from crashing in printf/sscanf functions that don't expect
// localization to mess with your "." and "," float seperators. Mac OSX also sets LANG
// to en_US.UTF-8 before starting up (in info.plist I believe).
@ -1225,7 +1225,7 @@ DLL_EXPORT int LauncherMain( int argc, char **argv )
Msg("SDL version: %d.%d.%d rev: %s\n", (int)ver.major, (int)ver.minor, (int)ver.patch, SDL_GetRevision());
#endif
#if defined LINUX && defined USE_SDL && defined TOGLES && !defined ANDROID
#if (defined LINUX || defined BSD) && defined USE_SDL && defined TOGLES && !defined ANDROID
SDL_SetHint(SDL_HINT_VIDEO_X11_FORCE_EGL, "1");
#endif
@ -1247,12 +1247,6 @@ DLL_EXPORT int LauncherMain( int argc, char **argv )
// Hook the debug output stuff.
SpewOutputFunc( LauncherDefaultSpewFunc );
if ( 0 && IsWin98OrOlder() )
{
Error( "This build does not currently run under Windows 98/Me." );
return -1;
}
// Quickly check the hardware key, essentially a warning shot.
if ( !Plat_VerifyHardwareKeyPrompt() )
{
@ -1559,7 +1553,7 @@ DLL_EXPORT int LauncherMain( int argc, char **argv )
RegCloseKey(hKey);
}
#elif defined( OSX ) || defined( LINUX )
#elif defined( OSX ) || defined( LINUX ) || defined(BSD)
struct stat st;
if ( stat( RELAUNCH_FILE, &st ) == 0 )
{
@ -1576,7 +1570,7 @@ DLL_EXPORT int LauncherMain( int argc, char **argv )
}
szCmd[nChars] = 0;
char szOpenLine[ MAX_PATH ];
#if defined( LINUX )
#if defined( LINUX ) || defined(BSD)
Q_snprintf( szOpenLine, sizeof(szOpenLine), "xdg-open \"%s\"", szCmd );
#else
Q_snprintf( szOpenLine, sizeof(szOpenLine), "open \"%s\"", szCmd );

View File

@ -59,7 +59,7 @@ BEGIN_VS_SHADER_FLAGS( Occlusion_DX9, "Help for Occlusion", SHADER_NOT_EDITABLE
SET_STATIC_PIXEL_SHADER( white_ps20 );
// Workaround for weird AMD bug - if sRGB write isn't enabled here then sRGB write enable in subsequent world rendering passes will randomly not take effect (even though we're enabling it) in the driver.
if ( ( IsLinux() || IsWindows() ) && gl_amd_occlusion_workaround.GetBool() )
if ( ( IsLinux() || IsWindows() || IsBSD() ) && gl_amd_occlusion_workaround.GetBool() )
{
pShaderShadow->EnableSRGBWrite( true );
}

View File

@ -16,7 +16,7 @@
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
#if !defined(COMPILER_MSVC64) && !defined(LINUX) && !defined(OSX)
#if !defined(COMPILER_MSVC64) && !defined(LINUX) && !defined(COMPILER_CLANG)
// Implement for 64-bit Windows if needed.
// Clang hits "fatal error: error in backend:" and other errors when trying
// to compile the inline assembly below. 3DNow support is highly unlikely to

View File

@ -3343,7 +3343,7 @@ void MathLib_Init( float gamma, float texGamma, float brightness, int overbright
// SSE Generally performs better than 3DNow when present, so this is placed
// first to allow SSE to override these settings.
#if !defined( OSX ) && !defined( PLATFORM_WINDOWS_PC64 ) && !defined(LINUX)
#if !defined( OSX ) && !defined( PLATFORM_WINDOWS_PC64 ) && !defined(LINUX) && !defined(BSD)
if ( bAllow3DNow && pi.m_b3DNow )
{
s_b3DNowEnabled = true;

View File

@ -61,7 +61,7 @@ void AppShutdown( CAppSystemGroup *pAppSystemGroup );
extern int ValveCocoaMain( int argc, char **argv, CAppSystemGroup *pAppSystemGroup ); \
return ValveCocoaMain( argc, argv, &_globalVarName ); \
}
#elif defined( LINUX )
#elif defined( LINUX ) || defined(BSD)
#define DEFINE_WINDOWED_APPLICATION_OBJECT_GLOBALVAR( _globalVarName ) \
int main( int argc, char **argv ) \
{ \

View File

@ -52,7 +52,7 @@ public:
// Get the next N events. The function returns the number of events that were filled into your array.
virtual int GetEvents( CCocoaEvent *pEvents, int nMaxEventsToReturn, bool debugEvents = false ) = 0;
#ifdef LINUX
#if defined(LINUX) || defined(BSD)
virtual int PeekAndRemoveKeyboardEvents( bool *pbEsc, bool *pbReturn, bool *pbSpace, bool debugEvents = false ) = 0;
#endif

View File

@ -39,11 +39,13 @@
#endif
// stdio.h
#ifndef NULL
#if !defined(NULL) || defined(__FreeBSD__)
#ifdef NULL
# undef NULL
#endif
#define NULL 0
#endif
#ifdef POSIX
#include <stdint.h>
#endif

View File

@ -64,7 +64,11 @@
#ifdef POSIX
// need this for _alloca
#include <alloca.h>
# ifdef BSD
# define va_list __va_list
# else
# include <alloca.h>
# endif
#include <unistd.h>
#include <signal.h>
#include <time.h>
@ -104,6 +108,7 @@
#define IsLinux() false
#define IsOSX() false
#define IsPosix() false
#define IsBSD() false
#define PLATFORM_WINDOWS 1 // Windows PC or Xbox 360
#ifndef _X360
#define IsWindows() true
@ -157,6 +162,12 @@
#define IsOSX() false
#endif
#ifdef BSD
#define IsBSD() true
#else
#define IsBSD() false
#endif
#define IsPosix() true
#define IsPlatformOpenGL() true
#else
@ -439,20 +450,20 @@ typedef void * HINSTANCE;
#else
// On OSX, SIGTRAP doesn't really stop the thread cold when debugging.
// So if being debugged, use INT3 which is precise.
#ifdef OSX
#if defined(__arm__) || defined(__aarch64__)
#ifdef __clang__
#define DebuggerBreak() do { if ( Plat_IsInDebugSession() ) { __builtin_debugtrap(); } else { raise(SIGTRAP); } } while(0)
#elif defined __GNUC__
#define DebuggerBreak() do { if ( Plat_IsInDebugSession() ) { __builtin_trap(); } else { raise(SIGTRAP); } } while(0)
#if defined(OSX) || defined(BSD)
# if defined(__arm__) || defined(__aarch64__)
# ifdef __clang__
# define DebuggerBreak() do { if ( Plat_IsInDebugSession() ) { __builtin_debugtrap(); } else { raise(SIGTRAP); } } while(0)
# elif defined __GNUC__
# define DebuggerBreak() do { if ( Plat_IsInDebugSession() ) { __builtin_trap(); } else { raise(SIGTRAP); } } while(0)
# else
# define DebuggerBreak() raise(SIGTRAP)
# endif
# else
# define DebuggerBreak() do { if ( Plat_IsInDebugSession() ) { __asm ( "int $3" ); } else { raise(SIGTRAP); } } while(0)
# endif
#else
#define DebuggerBreak() raise(SIGTRAP)
#endif
#else
#define DebuggerBreak() do { if ( Plat_IsInDebugSession() ) { __asm ( "int $3" ); } else { raise(SIGTRAP); } } while(0)
#endif
#else
#define DebuggerBreak() raise(SIGTRAP)
# define DebuggerBreak() raise(SIGTRAP)
#endif
#endif
#define DebuggerBreakIfDebugging() if ( !Plat_IsInDebugSession() ) ; else DebuggerBreak()
@ -550,7 +561,7 @@ typedef void * HINSTANCE;
//-----------------------------------------------------------------------------
#if defined( GNUC )
#define stackalloc( _size ) alloca( ALIGN_VALUE( _size, 16 ) )
#ifdef _LINUX
#if defined(_LINUX) || defined(BSD)
#define mallocsize( _p ) ( malloc_usable_size( _p ) )
#elif defined(OSX)
#define mallocsize( _p ) ( malloc_size( _p ) )
@ -1377,10 +1388,11 @@ PLATFORM_INTERFACE void* Plat_SimpleLog( const tchar* file, int line );
//-----------------------------------------------------------------------------
// Returns true if debugger attached, false otherwise
//-----------------------------------------------------------------------------
#if defined(_WIN32) || defined(LINUX) || defined(OSX)
#if defined(_WIN32) || defined(LINUX) || defined(OSX) || defined(BSD)
PLATFORM_INTERFACE bool Plat_IsInDebugSession();
PLATFORM_INTERFACE void Plat_DebugString( const char * );
#else
#warning "Plat_IsInDebugSession isn't working properly"
inline bool Plat_IsInDebugSession( bool bForceRecheck = false ) { return false; }
#define Plat_DebugString(s) ((void)0)
#endif

View File

@ -285,7 +285,7 @@ PLATFORM_INTERFACE void ThreadSetAffinity( ThreadHandle_t hThread, int nAffinity
#error Every platform needs to define ThreadMemoryBarrier to at least prevent compiler reordering
#endif
#if defined( _LINUX ) || defined( _OSX )
#if defined( _LINUX ) || defined( _OSX ) || defined(BSD)
#define USE_INTRINSIC_INTERLOCKED
// linux implementation
inline int32 ThreadInterlockedIncrement( int32 volatile *p )
@ -486,7 +486,7 @@ PLATFORM_INTERFACE void ThreadNotifySyncReleasing(void *p);
#ifndef NO_THREAD_LOCAL
#if defined(WIN32) || defined(OSX) || defined( _PS3 ) || ( defined (_LINUX) )
#if defined(WIN32) || defined(OSX) || defined( _PS3 ) || ( defined (_LINUX) ) || defined(BSD)
#ifndef __AFXTLS_H__ // not compatible with some Windows headers
#if defined(_PS3)

View File

@ -36,7 +36,7 @@
#pragma once
#endif
#ifdef _LINUX
#if defined(_LINUX) || defined(BSD)
#include <dlfcn.h> // dlopen,dlclose, et al
#include <unistd.h>

View File

@ -50,7 +50,7 @@ CFLAGS = {
# disable thread-safe local static initialization for C++11 code, as it cause crashes on Windows XP
'msvc': ['/D_USING_V110_SDK71_', '/Zi', '/FS', '/Zc:threadSafeInit-'],
'clang': ['-fno-strict-aliasing', '-fvisibility=hidden'],
'gcc': ['-g0', '-fno-strict-aliasing', '-fvisibility=hidden'],
'gcc': ['-fno-strict-aliasing', '-fvisibility=hidden'],
'owcc': ['-fno-short-enum', '-ffloat-store', '-g0']
},
'fast': {
@ -73,7 +73,7 @@ CFLAGS = {
'debug': {
'msvc': ['/Od', '/MTd'],
'owcc': ['-g', '-O0', '-fno-omit-frame-pointer', '-funwind-tables', '-fno-omit-leaf-frame-pointer'],
'default': ['-g', '-O0'] #, '-ftree-vectorize', '-ffast-math', '-fno-tree-partial-pre']
'default': ['-g', '-O0'] #, '-ftree-vectorize', '-ffast-math']
},
'sanitize': {
'msvc': ['/Od', '/RTC1', '/MT'],

View File

@ -25,7 +25,7 @@
#define WIN32_LEAN_AND_MEAN
#include <winsock.h>
#endif
#ifdef LINUX
#if defined(LINUX) || defined(BSD)
#include <arpa/inet.h>
#endif

View File

@ -11,7 +11,7 @@
#include <windows.h>
#elif defined(_LINUX)
#include <stdlib.h>
#elif defined(OSX)
#elif defined(OSX) || defined(BSD)
#include <sys/sysctl.h>
#endif
@ -273,7 +273,7 @@ bool CheckSSE4aTechnology( void )
static bool Check3DNowTechnology(void)
{
#if defined( _X360 ) || defined( _PS3 ) || defined (__arm__) || defined(__SANITIZE_ADDRESS__)
#if defined( _X360 ) || defined( _PS3 ) || defined (__arm__) || defined(__SANITIZE_ADDRESS__) || (defined(BSD) && defined(COMPILER_CLANG))
return false;
#else
uint32 eax, unused;
@ -448,7 +448,9 @@ uint64 CalculateCPUFreq(); // from cpu_linux.cpp
static int64 CalculateClockSpeed()
{
#if defined( _WIN32 )
#if !defined( _X360 )
#if defined( _X360 )
return 3200000000LL;
#else
LARGE_INTEGER waitTime, startCount, curCount;
CCycleCount start, end;
@ -476,15 +478,14 @@ static int64 CalculateClockSpeed()
freq = 2000000000;
}
return freq;
#else
return 3200000000LL;
#endif
#elif defined(BSD)
return CalculateCPUFreq() * 1000000.0f;
#elif defined(POSIX)
int64 freq =(int64)CalculateCPUFreq();
if ( freq == 0 ) // couldn't calculate clock speed
{
Error( "Unable to determine CPU Frequency\n" );
Warning( "Unable to determine CPU Frequency\n" );
}
return freq;
#endif
@ -583,7 +584,7 @@ const CPUInformation* GetCPUInformation()
pi.m_nLogicalProcessors = 1;
Assert( !"couldn't read cpu information from /proc/cpuinfo" );
}
#elif defined(OSX)
#elif defined(OSX) || defined(BSD)
int mib[2], num_cpu = 1;
size_t len;
mib[0] = CTL_HW;

View File

@ -11,6 +11,11 @@
#include <linux/sysctl.h>
#else
#include <sys/sysctl.h>
# ifdef __APPLE__
# define CPUFREQ_SYSCTL "hw.cpufrequency_max"
# else
# define CPUFREQ_SYSCTL "dev.cpu.0.freq"
# endif
#endif
#include <sys/time.h>
#include <unistd.h>
@ -46,18 +51,15 @@ static inline uint64 diff(uint64 v1, uint64 v2)
return -d;
}
#ifdef OSX
#if defined(OSX) || defined(BSD)
// Mac
// Mac or BSD
uint64 GetCPUFreqFromPROC()
{
int mib[2] = {CTL_HW, HW_CPU_FREQ};
uint64 frequency = 0;
size_t len = sizeof(frequency);
if (sysctl(mib, 2, &frequency, &len, NULL, 0) == -1)
return 0;
return frequency;
uint64 freq_hz = 0;
size_t freq_size = sizeof(freq_hz);
int retval = sysctlbyname(CPUFREQ_SYSCTL, &freq_hz, &freq_size, NULL, 0);
return freq_hz;
}
#else
@ -99,14 +101,8 @@ uint64 GetCPUFreqFromPROC()
uint64 CalculateCPUFreq()
{
#ifdef __APPLE__
uint64 freq_hz = 0;
size_t freq_size = sizeof(freq_hz);
int retval = sysctlbyname("hw.cpufrequency_max", &freq_hz, &freq_size, NULL, 0);
// MoeMod : TODO dont know how to get freq on Apple Silicon
if(!freq_hz)
freq_hz = 3200000000;
return freq_hz;
#if defined(__APPLE__) || defined(BSD)
return GetCPUFreqFromPROC();
#else
// Try to open cpuinfo_max_freq. If the kernel was built with cpu scaling support disabled, this will fail.
FILE *fp = fopen( "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq", "r" );
@ -127,9 +123,9 @@ uint64 CalculateCPUFreq()
return retVal * 1000;
}
}
#endif
#if !defined(__arm__) && !defined(__aarch64__)
// fallback mechanism to calculate when failed
// Compute the period. Loop until we get 3 consecutive periods that
// are the same to within a small error. The error is chosen
// to be +/- 0.02% on a P-200.
@ -179,7 +175,10 @@ uint64 CalculateCPUFreq()
}
return period;
#endif
#else
// ARM hard-coded frequency
return (uint64)2000000000;
#endif // if !ARM
#endif // if APPLE
}

View File

@ -16,12 +16,17 @@
#include <sys/resource.h>
#include <unistd.h>
#ifdef OSX
#include <mach/mach.h>
#include <mach/mach_time.h>
#if defined(OSX) || defined(BSD)
# ifdef BSD
# include <sys/proc.h>
# include <sys/user.h>
# else
# include <mach/mach.h>
# include <mach/mach_time.h>
# endif
#include <stdbool.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/sysctl.h>
#endif
#ifdef LINUX
@ -436,41 +441,29 @@ PLATFORM_INTERFACE void Plat_SetAllocErrorFn( Plat_AllocErrorFn fn )
#endif // !NO_HOOK_MALLOC
#if defined( OSX )
#if defined( OSX ) || defined(BSD)
// From the Apple tech note: http://developer.apple.com/library/mac/#qa/qa1361/_index.html
bool Plat_IsInDebugSession()
{
static int s_IsInDebugSession;
int junk;
int mib[4];
struct kinfo_proc info;
size_t size;
static int s_IsInDebugSession = -1;
int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, getpid()};
#ifndef BSD
info.kp_proc.p_flag = 0;
#endif
if ( s_IsInDebugSession == -1 )
{
// Initialize the flags so that, if sysctl fails for some bizarre
// reason, we get a predictable result.
size = sizeof(info);
junk = sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, NULL, 0);
info.kp_proc.p_flag = 0;
// Initialize mib, which tells sysctl the info we want, in this case
// we're looking for information about a specific process ID.
mib[0] = CTL_KERN;
mib[1] = KERN_PROC;
mib[2] = KERN_PROC_PID;
mib[3] = getpid();
// Call sysctl.
size = sizeof(info);
junk = sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, NULL, 0);
// We're being debugged if the P_TRACED flag is set.
s_IsInDebugSession = ( (info.kp_proc.p_flag & P_TRACED) != 0 );
}
// We're being debugged if the P_TRACED flag is set.
#ifdef BSD
s_IsInDebugSession = info.ki_flag & P_TRACED;
#else
s_IsInDebugSession = info.kp_proc.p_flag & P_TRACED;
#endif
return !!s_IsInDebugSession;
}
@ -509,7 +502,6 @@ bool Plat_IsInDebugSession()
return ( tracerpid > 0 );
}
#endif // defined( LINUX )
void Plat_DebugString( const char * psz )
@ -567,7 +559,7 @@ PLATFORM_INTERFACE const char *Plat_GetCommandLineA()
PLATFORM_INTERFACE bool GetMemoryInformation( MemoryInformation *pOutMemoryInfo )
{
#if defined( LINUX ) || defined( OSX )
#if defined( LINUX ) || defined( OSX ) || defined(BSD)
return false;
#else
#error "Need to fill out GetMemoryInformation or at least return false for this platform"
@ -579,7 +571,7 @@ PLATFORM_INTERFACE bool Is64BitOS()
{
#if defined OSX
return true;
#elif defined LINUX
#elif defined(LINUX) || defined(BSD)
FILE *pp = popen( "uname -m", "r" );
if ( pp != NULL )
{
@ -789,7 +781,7 @@ static void InstallHooks( void )
__realloc_hook = ReallocHook;
}
#elif OSX
#elif OSX || BSD
static void RemoveHooks( void )

View File

@ -43,6 +43,11 @@
#define OS_TO_PTHREAD(x) pthread_from_mach_thread_np( x )
#endif // !OSX
#ifdef BSD
# undef OS_TO_PTRHEAD
# define OS_TO_PTHREAD(x) (pthread_t)(x)
#endif
#endif
#ifndef _PS3
@ -1680,7 +1685,7 @@ bool CThreadFullMutex::Release()
//
//-----------------------------------------------------------------------------
#if defined( WIN32 ) || defined( _PS3 ) || defined( _OSX ) || defined (_LINUX)
#if defined( WIN32 ) || defined( _PS3 ) || defined( _OSX ) || defined (_LINUX) || defined(BSD)
#if !defined(_PS3)
namespace GenericThreadLocals
{

View File

@ -2211,7 +2211,7 @@ bool EvaluateConditional( const char *str )
return bNot;
if ( Q_stristr( str, "$LINUX" ) )
return (IsLinux() || IsOSX()) ^ bNot;
return ( IsLinux() || IsBSD() || IsOSX() ) ^ bNot;
if ( Q_stristr( str, "$POSIX" ) )
return IsPosix() ^ bNot;

View File

@ -2953,7 +2953,7 @@ extern "C" void qsort_s( void *base, size_t num, size_t width, int (*compare )(v
void V_qsort_s( void *base, size_t num, size_t width, int ( __cdecl *compare )(void *, const void *, const void *), void * context )
{
#if defined OSX
#if defined(OSX) || defined(BSD)
// the arguments are swapped 'round on the mac - awesome, huh?
return qsort_r( base, num, width, context, compare );
#else

View File

@ -38,7 +38,7 @@
#include "glmgr_flush.inl"
#if defined(OSX) || defined(LINUX) || (defined (WIN32) && defined( DX_TO_GL_ABSTRACTION ))
#if defined(OSX) || defined(LINUX) || (defined (WIN32) && defined( DX_TO_GL_ABSTRACTION )) || defined(BSD)
#include "appframework/ilaunchermgr.h"
extern ILauncherMgr *g_pLauncherMgr;
#endif

View File

@ -43,7 +43,7 @@
#include "tier1.h"
#include "tier2/tier2.h"
#if defined(_LINUX) && !defined(__ANDROID__)
#if (defined(_LINUX) || defined(BSD)) && !defined(__ANDROID__)
#include <GL/glx.h>
#endif
@ -54,7 +54,7 @@
#error
#endif
#if defined(OSX) || defined(LINUX) || (defined (WIN32) && defined( DX_TO_GL_ABSTRACTION ))
#if defined(OSX) || defined(LINUX) || (defined (WIN32) && defined( DX_TO_GL_ABSTRACTION )) || defined(BSD)
#include "appframework/ilaunchermgr.h"
ILauncherMgr *g_pLauncherMgr = NULL;
#endif

View File

@ -38,7 +38,7 @@
#include "glmgr_flush.inl"
#if defined(OSX) || defined(LINUX) || (defined (WIN32) && defined( DX_TO_GL_ABSTRACTION ))
#if defined(BSD) || defined(OSX) || defined(LINUX) || (defined (WIN32) && defined( DX_TO_GL_ABSTRACTION ))
#include "appframework/ilaunchermgr.h"
extern ILauncherMgr *g_pLauncherMgr;
#endif

View File

@ -54,7 +54,7 @@
#error
#endif
#if defined(OSX) || defined(LINUX) || (defined (WIN32) && defined( DX_TO_GL_ABSTRACTION ))
#if defined(BSD) || defined(OSX) || defined(LINUX) || (defined (WIN32) && defined( DX_TO_GL_ABSTRACTION ))
#include "appframework/ilaunchermgr.h"
ILauncherMgr *g_pLauncherMgr = NULL;
#endif

View File

@ -28,13 +28,15 @@
#include "vgui_key_translation.h"
#include "filesystem.h"
#ifdef OSX
#include <Carbon/Carbon.h>
#if defined(OSX) || defined(BSD)
#include <sys/param.h>
#include <sys/mount.h>
#elif defined(LINUX)
#include <sys/vfs.h>
#endif
#ifdef OSX
#include <Carbon/Carbon.h>
#endif
#ifdef USE_SDL
#include "SDL_clipboard.h"
@ -290,7 +292,7 @@ void CSystem::ShellExecute(const char *command, const char *file)
if ( pid == 0 )
{
// Child
#ifdef LINUX
#if defined(LINUX) || defined(BSD)
// Escape steam runtime if necessary
const char *szSteamRuntime = getenv( "STEAM_RUNTIME" );
if ( szSteamRuntime )
@ -585,7 +587,7 @@ int CSystem::GetAvailableDrives(char *buf, int bufLen)
//-----------------------------------------------------------------------------
double CSystem::GetFreeDiskSpace(const char *path)
{
#if __DARWIN_ONLY_64_BIT_INO_T
#if __DARWIN_ONLY_64_BIT_INO_T || BSD
// MoeMod: newer macOS only support 64bit, so no statfs64 is provided
struct statfs buf;
int ret = statfs( path, &buf );

View File

@ -43,7 +43,7 @@ CFontManager::CFontManager()
m_FontAmalgams.AddToTail();
m_Win32Fonts.EnsureCapacity( MAX_INITIAL_FONTS );
#if defined(LINUX) || defined(OSX)
#ifdef POSIX
FT_Error error = FT_Init_FreeType( &library );
if ( error )
Error( "Unable to initalize freetype library, is it installed?" );
@ -75,7 +75,7 @@ CFontManager::~CFontManager()
{
ClearAllFonts();
m_FontAmalgams.RemoveAll();
#if defined(LINUX) || defined(OSX)
#ifdef POSIX
FT_Done_FreeType( library );
#endif
}
@ -280,7 +280,7 @@ font_t *CFontManager::CreateOrFindWin32Font(const char *windowsFontName, int tal
i = m_Win32Fonts.AddToTail();
m_Win32Fonts[i] = NULL;
#if defined(LINUX) || defined(OSX)
#ifdef POSIX
int memSize = 0;
void *pchFontData = m_pFontDataHelper( windowsFontName, memSize, NULL );
@ -584,7 +584,7 @@ FallbackFont_t g_FallbackFonts[] =
{ NULL, "Monaco" } // every other font falls back to this
};
#elif defined(LINUX)
#elif defined(LINUX) || defined(BSD)
static const char *g_szValidAsianFonts[] = { "Marlett", "WenQuanYi Zen Hei", "unifont", NULL };
// list of how fonts fallback
@ -649,7 +649,7 @@ const char *CFontManager::GetForeignFallbackFontName()
return "Tahoma";
#elif defined(OSX)
return "Helvetica";
#elif defined(LINUX)
#elif defined(LINUX) || defined(BSD)
return "WenQuanYi Zen Hei";
#elif defined(_PS3)
return "Tahoma";
@ -750,7 +750,7 @@ void CFontManager::GetKernedCharWidth( vgui::HFont font, wchar_t ch, wchar_t chB
if ( m_FontAmalgams[font].GetFontForChar( chAfter ) != pFont )
chAfter = 0;
#if defined(LINUX) || defined(OSX)
#ifdef POSIX
pFont->GetKernedCharWidth( ch, chBefore, chAfter, wide, flabcA, flabcC );
#else
pFont->GetKernedCharWidth( ch, chBefore, chAfter, wide, flabcA );

View File

@ -39,7 +39,7 @@ def build(bld):
'../../public/tier0',
'../../public/tier1',
'../../common',
] + bld.env.INCLUDES_FT2
] + bld.env.INCLUDES_FC + bld.env.INCLUDES_FT2
defines = []

View File

@ -10,7 +10,7 @@
#include <windows.h>
#elif defined( OSX )
#include <Carbon/Carbon.h>
#elif defined( LINUX )
#elif defined( LINUX ) || defined(BSD)
//#error
#elif defined( _X360 )
#else

View File

@ -146,7 +146,7 @@ CMatSystemSurface g_MatSystemSurface;
EXPOSE_SINGLE_INTERFACE_GLOBALVAR( CMatSystemSurface, ISurface,
VGUI_SURFACE_INTERFACE_VERSION, g_MatSystemSurface );
#if defined(LINUX) || defined(OSX)
#if defined(LINUX) || defined(OSX) || defined(BSD)
CUtlDict< CMatSystemSurface::font_entry, unsigned short > CMatSystemSurface::m_FontData;
#endif
@ -407,7 +407,7 @@ InitReturnVal_t CMatSystemSurface::Init( void )
FontManager().SetLanguage( "english" );
}
#if defined(LINUX) || defined(OSX)
#if defined(LINUX) || defined(OSX) || defined(BSD)
FontManager().SetFontDataHelper( &CMatSystemSurface::FontDataHelper );
#endif
@ -1907,7 +1907,7 @@ bool CMatSystemSurface::AddCustomFontFile( const char *fontName, const char *fon
}
Assert( success );
return success;
#elif defined(LINUX) || defined(OSX)
#elif defined(LINUX) || defined(OSX) || defined(BSD)
int size;
if ( CMatSystemSurface::FontDataHelper( fontName, size, fontFileName ) )
@ -1921,7 +1921,7 @@ bool CMatSystemSurface::AddCustomFontFile( const char *fontName, const char *fon
#endif
}
#if defined(LINUX) || defined(OSX)
#if defined(LINUX) || defined(OSX) || defined(BSD)
static void RemoveSpaces( CUtlString &str )
{

View File

@ -556,7 +556,7 @@ private:
int m_nFullscreenViewportHeight;
ITexture *m_pFullscreenRenderTarget;
#if defined(LINUX) || defined(OSX)
#if defined(LINUX) || defined(OSX) || defined(BSD)
struct font_entry
{
void *data;

View File

@ -58,14 +58,14 @@ DEFINE_ENUM_BITWISE_OPERATORS( EPlatform_t );
const EPlatform_t thisPlatform = PLATFORM_XBOX_360;
#elif defined( _PS3 )
const EPlatform_t thisPlatform = PLATFORM_PS3;
#elif defined ( _LINUX )
#elif defined ( _LINUX ) || defined(BSD)
const EPlatform_t thisPlatform = PLATFORM_LINUX;
#else
#error "UNABLE TO DETERMINE PLATFORM"
#endif
#if defined( OSX ) || defined( LINUX )
#if defined( OSX ) || defined( LINUX ) || defined(BSD)
ILauncherMgr *g_pLauncherMgr = NULL;
#endif
@ -1382,7 +1382,7 @@ bool CVideoCommonServices::ProcessFullScreenInput( bool &bAbortEvent, bool &bPau
bool bEscPressed = ( m_bScanEsc ) ? CGEventSourceKeyState( kCGEventSourceStateCombinedSessionState, kVK_Escape ) : false;
bool bReturnPressed = ( m_bScanReturn ) ? CGEventSourceKeyState( kCGEventSourceStateCombinedSessionState, kVK_Return ) : false;
bool bSpacePressed = ( m_bScanSpace ) ? CGEventSourceKeyState( kCGEventSourceStateCombinedSessionState, kVK_Space ) : false;
#elif defined(LINUX)
#elif defined(LINUX) || defined(BSD)
g_pLauncherMgr->PumpWindowsMessageLoop();
// Escape, return, or space stops or pauses the playback

11
wscript
View File

@ -221,6 +221,14 @@ def define_platform(conf):
'_DLL_EXT=.dylib'
])
elif conf.env.DEST_OS in ['freebsd', 'openbsd', 'netbsd', 'dragonflybsd']: # Tested only in freebsd
conf.env.append_unique('DEFINES', [
'POSIX=1', '_POSIX=1', 'PLATFORM_POSIX=1',
'GNUC', # but uses clang
'BSD=1',
'_DLL_EXT=.so'
])
if conf.options.DEBUG_ENGINE:
conf.env.append_unique('DEFINES', [
'DEBUG', '_DEBUG'
@ -370,6 +378,9 @@ def configure(conf):
elif conf.env.DEST_CPU in ['arm', 'aarch64']:
flags += ['-fsigned-char']
if conf.env.DEST_OS == 'freebsd':
linkflags += ['-lexecinfo']
if conf.env.DEST_OS != 'win32':
cflags += flags
linkflags += flags