Merge branch 'sohl1.2' into zombie-x

This commit is contained in:
Andrey Akhmichin 2020-01-01 04:52:45 +05:00
commit db9f932bef
33 changed files with 551 additions and 84 deletions

View File

@ -65,6 +65,10 @@ if(64BIT AND CMAKE_SIZEOF_VOID_P EQUAL 4)
message(FATAL_ERROR "You enabled XASH_64BIT, but compiler can't create 64 bit code!")
endif()
# Xash3D FWGS Library Naming Scheme compliance
# see documentation: https://github.com/FWGS/xash3d-fwgs/blob/master/Documentation/library-naming.md
include(LibraryNaming)
if(64BIT)
message(STATUS "Building for 64 Bit")
else()
@ -87,10 +91,11 @@ if(${CMAKE_VERSION} VERSION_LESS "3.0.2")
endif()
if(NOT MSVC)
add_compile_options(-Wempty-body) # GCC/Clang flag
#add_compile_options(-Wempty-body) # GCC/Clang flag
add_compile_options(-Wreturn-type) # GCC/Clang flag
endif()
if(BUILD_CLIENT)
add_subdirectory(cl_dll)
endif()

View File

@ -150,10 +150,6 @@ set_target_properties (${CLDLL_LIBRARY} PROPERTIES
if(APPLE OR WIN32 OR ${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
set(CLDLL_NAME "client")
if(64BIT)
set(CLDLL_NAME "client64")
endif()
set_target_properties(${CLDLL_LIBRARY} PROPERTIES
OUTPUT_NAME ${CLDLL_NAME}
PREFIX "")

View File

@ -86,7 +86,7 @@ int CHudMOTD::Draw( float fTime )
ypos_r = ROW_RANGE_MIN;
height = ROW_RANGE_MAX;
}
int ymax = ypos + height;
// int ymax = ypos + height;
if( xmax > ScreenWidth - 30 ) xmax = ScreenWidth - 30;
gHUD.DrawDarkRectangle( xpos - 5, ypos_r - 5, xmax - xpos + 10, height + 10 );
while( *ch )
@ -157,7 +157,7 @@ int CHudMOTD::MsgFunc_MOTD( const char *pszName, int iSize, void *pbuf )
if( length > m_iMaxLength )
{
m_iMaxLength = length;
length = 0;
// length = 0;
}
m_bShow = true;
}

View File

@ -709,9 +709,9 @@ void CStudioModelRenderer::StudioFxTransform( cl_entity_t *ent, float transform[
else if( gEngfuncs.pfnRandomLong( 0, 49 ) == 0 )
{
float offset;
int axis = gEngfuncs.pfnRandomLong(0,1);
/*int axis = gEngfuncs.pfnRandomLong(0,1);
if( axis == 1 ) // Choose between x & z
axis = 2;
axis = 2;*/
offset = gEngfuncs.pfnRandomFloat( -10.0f, 10.0f );
transform[gEngfuncs.pfnRandomLong( 0, 2 )][3] += offset;
}

View File

@ -134,7 +134,7 @@ HUD_ConnectionlessPacket
int DLLEXPORT HUD_ConnectionlessPacket( const struct netadr_s *net_from, const char *args, char *response_buffer, int *response_buffer_size )
{
// Parse stuff from args
int max_buffer_size = *response_buffer_size;
// int max_buffer_size = *response_buffer_size;
// Zero it out since we aren't going to respond.
// If we wanted to response, we'd write data into response_buffer

View File

@ -88,12 +88,12 @@ void DLLEXPORT Demo_ReadBuffer( int size, unsigned char *buffer )
g_demosniperorg[1] = *(float *)&buffer[i];
i += sizeof(float);
g_demosniperorg[2] = *(float *)&buffer[i];
i += sizeof(float);
// i += sizeof(float);
}
break;
case TYPE_ZOOM:
g_demozoom = *(float *)&buffer[i];
i += sizeof(float);
// i += sizeof(float);
break;
default:
gEngfuncs.Con_DPrintf( "Unknown demo buffer type, skipping.\n" );

View File

@ -66,7 +66,7 @@ int CHudGeiger::Draw( float flTime )
int pct;
float flvol = 0.0f;
//int rg[3];
int i;
int i = 0;
if( m_iGeigerRange < 1000 && m_iGeigerRange > 0 )
{

View File

@ -152,13 +152,14 @@ int CHudHealth::MsgFunc_Damage( const char *pszName, int iSize, void *pbuf )
// Green <-> Yellow <-> Red ramp
void CHudHealth::GetPainColor( int &r, int &g, int &b )
{
#if 0
int iHealth = m_iHealth;
if( iHealth > 50 )
iHealth -= 50;
else if( iHealth < 0 )
iHealth = 0;
#if 0
g = iHealth * 255 / 100;
r = 255 - g;
b = 0;
@ -463,7 +464,7 @@ void CHudHealth::UpdateTiles( float flTime, long bitsDamage )
if( pdmg->y )
pdmg->y -= giDmgHeight;
}
pdmg = &m_dmg[i];
// pdmg = &m_dmg[i];
}
}

View File

@ -322,7 +322,7 @@ Vector CBaseEntity::FireBulletsPlayer ( ULONG cShots, Vector vecSrc, Vector vecD
// get circular gaussian spread
x = UTIL_SharedRandomFloat( shared_rand + iShot, -0.5f, 0.5f ) + UTIL_SharedRandomFloat( shared_rand + ( 1 + iShot ) , -0.5f, 0.5f );
y = UTIL_SharedRandomFloat( shared_rand + ( 2 + iShot ), -0.5f, 0.5f ) + UTIL_SharedRandomFloat( shared_rand + ( 3 + iShot ), -0.5f, 0.5f );
z = x * x + y * y;
// z = x * x + y * y;
}
}

View File

@ -352,7 +352,7 @@ int CHudMessage::Draw( float fTime )
// Assume m_parms.time contains last time
if( m_pMessages[i] )
{
pMessage = m_pMessages[i];
// pMessage = m_pMessages[i];
if( m_startTime[i] > gHUD.m_flTime )
m_startTime[i] = gHUD.m_flTime + m_parms.time - m_startTime[i] + 0.2f; // Server takes 0.2 seconds to spawn, adjust for this
}

View File

@ -259,7 +259,7 @@ void CHudSayText::EnsureTextFitsInOneLineAndWrapIfHaveTo( int line )
if( !last_break )
last_break = x - 1;
x = last_break;
// x = last_break;
// find an empty string slot
int j;

View File

@ -523,7 +523,7 @@ void V_CalcNormalRefdef( struct ref_params_s *pparams )
}
else
{
waterEntity = 0; // Don't need this in software
// waterEntity = 0; // Don't need this in software
}
VectorCopy( pparams->vieworg, point );

View File

@ -60,7 +60,7 @@ def build(bld):
bld.shlib(
source = source,
target = 'client',
target = 'client' + bld.env.POSTFIX,
features = 'c cxx',
includes = includes,
defines = defines,

107
cmake/LibraryNaming.cmake Normal file
View File

@ -0,0 +1,107 @@
include(CheckSymbolExists)
# generated(see comments in public/build.h)
set(CMAKE_REQUIRED_INCLUDES "${CMAKE_SOURCE_DIR}/public/")
check_symbol_exists(XASH_64BIT "build.h" XASH_64BIT)
check_symbol_exists(XASH_AMD64 "build.h" XASH_AMD64)
check_symbol_exists(XASH_ANDROID "build.h" XASH_ANDROID)
check_symbol_exists(XASH_APPLE "build.h" XASH_APPLE)
check_symbol_exists(XASH_ARM "build.h" XASH_ARM)
check_symbol_exists(XASH_ARM64 "build.h" XASH_ARM64)
check_symbol_exists(XASH_ARM_HARDFP "build.h" XASH_ARM_HARDFP)
check_symbol_exists(XASH_ARM_SOFTFP "build.h" XASH_ARM_SOFTFP)
check_symbol_exists(XASH_ARMv4 "build.h" XASH_ARMv4)
check_symbol_exists(XASH_ARMv5 "build.h" XASH_ARMv5)
check_symbol_exists(XASH_ARMv6 "build.h" XASH_ARMv6)
check_symbol_exists(XASH_ARMv7 "build.h" XASH_ARMv7)
check_symbol_exists(XASH_BIG_ENDIAN "build.h" XASH_BIG_ENDIAN)
check_symbol_exists(XASH_BSD "build.h" XASH_BSD)
check_symbol_exists(XASH_E2K "build.h" XASH_E2K)
check_symbol_exists(XASH_EMSCRIPTEN "build.h" XASH_EMSCRIPTEN)
check_symbol_exists(XASH_FREEBSD "build.h" XASH_FREEBSD)
check_symbol_exists(XASH_IOS "build.h" XASH_IOS)
check_symbol_exists(XASH_JS "build.h" XASH_JS)
check_symbol_exists(XASH_LINUX "build.h" XASH_LINUX)
check_symbol_exists(XASH_LITTLE_ENDIAN "build.h" XASH_LITTLE_ENDIAN)
check_symbol_exists(XASH_MINGW "build.h" XASH_MINGW)
check_symbol_exists(XASH_MIPS "build.h" XASH_MIPS)
check_symbol_exists(XASH_MOBILE_PLATFORM "build.h" XASH_MOBILE_PLATFORM)
check_symbol_exists(XASH_MSVC "build.h" XASH_MSVC)
check_symbol_exists(XASH_NETBSD "build.h" XASH_NETBSD)
check_symbol_exists(XASH_OPENBSD "build.h" XASH_OPENBSD)
check_symbol_exists(XASH_WIN32 "build.h" XASH_WIN32)
check_symbol_exists(XASH_WIN64 "build.h" XASH_WIN64)
check_symbol_exists(XASH_X86 "build.h" XASH_X86)
unset(CMAKE_REQUIRED_INCLUDES)
# engine/common/build.c
if(XASH_ANDROID)
set(BUILDOS "android")
elseif(XASH_WIN32 OR XASH_LINUX OR XASH_APPLE)
set(BUILDOS "") # no prefix for default OS
elseif(XASH_FREEBSD)
set(BUILDOS "freebsd")
elseif(XASH_NETBSD)
set(BUILDOS "netbsd")
elseif(XASH_OPENBSD)
set(BUILDOS "openbsd")
elseif(XASH_EMSCRIPTEN)
set(BUILDOS "emscripten")
else()
message(SEND_ERROR "Place your operating system name here! If this is a mistake, try to fix conditions above and report a bug")
endif()
if(XASH_AMD64)
set(BUILDARCH "amd64")
elseif(XASH_X86)
set(BUILDARCH "")
elseif(XASH_ARM64)
set(BUILDARCH "arm64")
elseif(XASH_ARM)
set(BUILDARCH "armv")
if(XASH_ARMv7)
set(BUILDARCH "${BUILDARCH}7")
elseif(XASH_ARMv6)
set(BUILDARCH "${BUILDARCH}6")
elseif(XASH_ARMv5)
set(BUILDARCH "${BUILDARCH}5")
elseif(XASH_ARMv4)
set(BUILDARCH "${BUILDARCH}4")
else()
message(SEND_ERROR "Unknown ARM")
endif()
if(XASH_ARM_HARDFP)
set(BUILDARCH "${BUILDARCH}hf")
else()
set(BUILDARCH "${BUILDARCH}l")
endif()
elseif(XASH_MIPS AND XASH_BIG_ENDIAN)
set(BUILDARCH "mips")
elseif(XASH_MIPS AND XASH_LITTLE_ENDIAN)
set(BUILDARCH "mipsel")
elseif(XASH_JS)
set(BUILDARCH "javascript")
elseif(XASH_E2K)
set(BUILDARCH "e2k")
else()
message(SEND_ERROR "Place your architecture name here! If this is a mistake, try to fix conditions above and report a bug")
endif()
if(BUILDOS STREQUAL "android")
set(POSTFIX "") # force disable for Android, as Android ports aren't distributed in normal way and doesn't follow library naming
elif(BUILDOS AND BUILDARCH)
set(POSTFIX "_${BUILDOS}_${BUILDARCH}")
elseif(BUILDARCH)
set(POSTFIX "_${BUILDARCH}")
else()
set(POSTFIX "")
endif()
message(STATUS "Library postfix: " ${POSTFIX})
set(CMAKE_RELEASE_POSTFIX ${POSTFIX})
set(CMAKE_DEBUG_POSTFIX ${POSTFIX})
set(CMAKE_RELWITHDEBINFO_POSTFIX ${POSTFIX})
set(CMAKE_MINSIZEREL_POSTFIX ${POSTFIX})
set(CMAKE_POSTFIX ${POSTFIX})

View File

@ -194,9 +194,6 @@ set_target_properties (${SVDLL_LIBRARY} PROPERTIES
if(APPLE OR WIN32 OR ${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
set(SVDLL_NAME "${SERVER_LIBRARY_NAME}")
if(64BIT)
set(SVDLL_NAME "${SERVER_LIBRARY_NAME}64")
endif()
set_target_properties(${SVDLL_LIBRARY} PROPERTIES
OUTPUT_NAME ${SVDLL_NAME}

View File

@ -724,9 +724,9 @@ void CApache::Flight( void )
if( pitch == 100.0f )
pitch = 101.0f;
float flVol = ( m_flForce / 100.0f ) + 0.1f;
/*float flVol = ( m_flForce / 100.0f ) + 0.1f;
if( flVol > 1.0f )
flVol = 1.0f;
flVol = 1.0f;*/
EMIT_SOUND_DYN( ENT( pev ), CHAN_STATIC, "apache/ap_rotor2.wav", 1.0f, 0.3f, SND_CHANGE_PITCH | SND_CHANGE_VOL, pitch );
}

View File

@ -512,10 +512,10 @@ Activity CBaseMonster::GetDeathActivity( void )
Activity CBaseMonster::GetSmallFlinchActivity( void )
{
Activity flinchActivity;
BOOL fTriedDirection;
// BOOL fTriedDirection;
//float flDot;
fTriedDirection = FALSE;
// fTriedDirection = FALSE;
UTIL_MakeVectors( pev->angles );
//flDot = DotProduct( gpGlobals->v_forward, g_vecAttackDir * -1.0f );

View File

@ -857,11 +857,11 @@ void CBreakable::Die( void )
WRITE_BYTE( cFlag );
MESSAGE_END();
float size = pev->size.x;
/*float size = pev->size.x;
if( size < pev->size.y )
size = pev->size.y;
if( size < pev->size.z )
size = pev->size.z;
size = pev->size.z;*/
// !!! HACK This should work!
// Build a box above the entity that looks like an 8 pixel high sheet

View File

@ -425,13 +425,13 @@ BOOL CHGrunt::CheckMeleeAttack1( float flDot, float flDist )
{
return FALSE;
}
}
if( flDist <= 64.0f && flDot >= 0.7f &&
pEnemy->Classify() != CLASS_ALIEN_BIOWEAPON &&
pEnemy->Classify() != CLASS_PLAYER_BIOWEAPON )
{
return TRUE;
if( flDist <= 64.0f && flDot >= 0.7f &&
pEnemy->Classify() != CLASS_ALIEN_BIOWEAPON &&
pEnemy->Classify() != CLASS_PLAYER_BIOWEAPON )
{
return TRUE;
}
}
return FALSE;
}

View File

@ -95,9 +95,9 @@ void CHornet::Spawn( void )
SetTouch( &CHornet::DieTouch );
SetThink( &CHornet::StartTrack );
edict_t *pSoundEnt = pev->owner;
/*edict_t *pSoundEnt = pev->owner;
if( !pSoundEnt )
pSoundEnt = edict();
pSoundEnt = edict();*/
if( !FNullEnt( pev->owner ) && ( pev->owner->v.flags & FL_CLIENT ) )
{

View File

@ -676,10 +676,13 @@ Schedule_t *CISlave :: GetSchedule( void )
ASSERT( pSound != NULL );
if ( pSound && (pSound->m_iType & bits_SOUND_DANGER) )
return GetScheduleOfType( SCHED_TAKE_COVER_FROM_BEST_SOUND );
if ( pSound->m_iType & bits_SOUND_COMBAT )
m_afMemory |= bits_MEMORY_PROVOKED;
if( pSound )
{
if( pSound->m_iType & bits_SOUND_DANGER )
return GetScheduleOfType( SCHED_TAKE_COVER_FROM_BEST_SOUND );
if( pSound->m_iType & bits_SOUND_COMBAT )
m_afMemory |= bits_MEMORY_PROVOKED;
}
}
switch (m_MonsterState)

View File

@ -269,7 +269,8 @@ void CBaseMonster::Listen( void )
}
//iSound = g_pSoundEnt->m_SoundPool[iSound].m_iNext;
iSound = pCurrentSound->m_iNext;
if( pCurrentSound )
iSound = pCurrentSound->m_iNext;
}
}
@ -439,18 +440,21 @@ CSound *CBaseMonster::PBestSound( void )
{
pSound = CSoundEnt::SoundPointerForIndex( iThisSound );
if( pSound && pSound->FIsSound() )
if( pSound )
{
flDist = ( pSound->m_vecOrigin - EarPosition() ).Length();
if( flDist < flBestDist )
if( pSound->FIsSound() )
{
iBestSound = iThisSound;
flBestDist = flDist;
}
}
flDist = ( pSound->m_vecOrigin - EarPosition() ).Length();
iThisSound = pSound->m_iNextAudible;
if( flDist < flBestDist )
{
iBestSound = iThisSound;
flBestDist = flDist;
}
}
iThisSound = pSound->m_iNextAudible;
}
}
if( iBestSound >= 0 )
{
@ -2387,7 +2391,7 @@ BOOL CBaseMonster::BuildNearestRoute( Vector vecThreat, Vector vecViewOffset, fl
// try to actually get there
if( BuildRoute( node.m_vecOrigin, bits_MF_TO_LOCATION, NULL ) )
{
flMaxDist = flDist;
// flMaxDist = flDist;
m_vecMoveGoal = node.m_vecOrigin;
return TRUE; // UNDONE: keep looking for something closer!
}
@ -3337,7 +3341,7 @@ BOOL CBaseMonster::BBoxFlat( void )
{
return FALSE;
}
flLength = flLength2;
// flLength = flLength2;
return TRUE;
}

View File

@ -951,10 +951,10 @@ void CNihilanth::Flight( void )
m_velocity.y += gpGlobals->v_up.y * m_flForce;
m_velocity.z += gpGlobals->v_up.z * m_flForce;
float flSpeed = m_velocity.Length();
/*float flSpeed = m_velocity.Length();
float flDir = DotProduct( Vector( gpGlobals->v_forward.x, gpGlobals->v_forward.y, 0 ), Vector( m_velocity.x, m_velocity.y, 0 ) );
if( flDir < 0 )
flSpeed = -flSpeed;
flSpeed = -flSpeed;*/
//float flDist = DotProduct( m_posDesired - vecEst, gpGlobals->v_forward );

View File

@ -2535,7 +2535,7 @@ int CGraph::FLoadGraph( const char *szMapName )
if( length < 0 )
goto ShortFile;
memcpy( m_pHashLinks, pMemFile, sizeof(short) * m_nHashLinks );
pMemFile += sizeof(short) * m_nHashLinks;
// pMemFile += sizeof(short) * m_nHashLinks;
// Set the graph present flag, clear the pointers set flag
//
@ -3643,7 +3643,7 @@ void CNodeViewer::Spawn()
int start = 0;
int end;
do{
end = m_nVisited;
// end = m_nVisited;
// ALERT( at_console, "%d :", m_nVisited );
for( end = m_nVisited; start < end; start++ )
{

View File

@ -403,15 +403,20 @@ void COsprey::FlyThink( void )
if( gpGlobals->time > m_startTime + m_dTime )
{
if( m_pGoalEnt->pev->speed == 0 )
if( m_pGoalEnt )
{
SetThink( &COsprey::DeployThink );
if( m_pGoalEnt->pev->speed == 0 )
{
SetThink( &COsprey::DeployThink );
}
int loopbreaker = 100; //LRC - <slap> don't loop indefinitely!
do{
m_pGoalEnt = UTIL_FindEntityByTargetname( NULL, STRING( m_pGoalEnt->pev->target ) );
loopbreaker--; //LRC
} while (m_pGoalEnt && m_pGoalEnt->pev->speed < 400 && !HasDead() && loopbreaker > 0);
}
int loopbreaker = 100; //LRC - <slap> don't loop indefinitely!
do{
m_pGoalEnt = UTIL_FindEntityByTargetname( NULL, STRING( m_pGoalEnt->pev->target ) );
loopbreaker--; //LRC
} while (m_pGoalEnt->pev->speed < 400 && !HasDead() && loopbreaker > 0);
UpdateGoal();
}

View File

@ -327,7 +327,7 @@ void CAmbientGeneric::RampThink( void )
if( pitch < m_dpv.pitchstart )
{
pitch = m_dpv.pitchstart;
// pitch = m_dpv.pitchstart;
m_dpv.spindown = 0; // done with ramp down
// shut sound off
@ -378,7 +378,7 @@ void CAmbientGeneric::RampThink( void )
if( vol < m_dpv.volstart )
{
vol = m_dpv.volstart;
// vol = m_dpv.volstart;
m_dpv.fadeout = 0; // done with ramp down
// shut sound off
@ -1948,7 +1948,7 @@ void CSpeaker::Precache( void )
void CSpeaker::SpeakerThink( void )
{
const char* szSoundFile = NULL;
const char* szSoundFile = "";
float flvolume = pev->health * 0.1f;
float flattenuation = 0.3f;
int flags = 0;

View File

@ -269,9 +269,9 @@ void CSqueakGrenade::HuntThink( void )
}
// higher pitch as squeeker gets closer to detonation time
float flpitch = 155.0f - 60.0f * ( ( m_flDie - gpGlobals->time ) / SQUEEK_DETONATE_DELAY );
/*float flpitch = 155.0f - 60.0f * ( ( m_flDie - gpGlobals->time ) / SQUEEK_DETONATE_DELAY );
if( flpitch < 80.0f )
flpitch = 80.0f;
flpitch = 80.0f;*/
if( m_hEnemy != 0 )
{

View File

@ -496,18 +496,21 @@ void CTalkMonster::RunTask( Task_t *pTask )
if( pTask->iTask == TASK_TLK_CLIENT_STARE )
{
// fail out if the player looks away or moves away.
if( ( pPlayer->v.origin - pev->origin ).Length2D() > TLK_STARE_DIST )
if( pPlayer )
{
// player moved away.
TaskFail();
}
// fail out if the player looks away or moves away.
if( ( pPlayer->v.origin - pev->origin ).Length2D() > TLK_STARE_DIST )
{
// player moved away.
TaskFail();
}
UTIL_MakeVectors( pPlayer->v.angles );
if( UTIL_DotPoints( pPlayer->v.origin, pev->origin, gpGlobals->v_forward ) < m_flFieldOfView )
{
// player looked away
TaskFail();
UTIL_MakeVectors( pPlayer->v.angles );
if( UTIL_DotPoints( pPlayer->v.origin, pev->origin, gpGlobals->v_forward ) < m_flFieldOfView )
{
// player looked away
TaskFail();
}
}
}

View File

@ -68,7 +68,7 @@ def build(bld):
bld.shlib(
source = source,
target = bld.env.SERVER_NAME,
target = bld.env.SERVER_NAME + bld.env.POSTFIX,
features = 'c cxx',
includes = includes,
defines = defines,

View File

@ -289,7 +289,7 @@ void PM_ViewEntity( void )
int i;
pmtrace_t trace;
int pcolor = 77;
float fup;
// float fup;
#if 0
if ( !pm_showclip.value )
@ -300,9 +300,9 @@ void PM_ViewEntity( void )
VectorCopy( pmove->origin, origin);
fup = 0.5f * ( pmove->player_mins[pmove->usehull][2] + pmove->player_maxs[pmove->usehull][2] );
/*fup = 0.5f * ( pmove->player_mins[pmove->usehull][2] + pmove->player_maxs[pmove->usehull][2] );
fup += pmove->view_ofs[2];
fup -= 4;
fup -= 4;*/
for (i = 0; i < 3; i++)
{

219
public/build.h Normal file
View File

@ -0,0 +1,219 @@
/*
build.h - compile-time build information
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to <http://unlicense.org/>
*/
#pragma once
#ifndef BUILD_H
#define BUILD_H
// All XASH_* macros set by this header are guaranteed to have positive value otherwise not defined
// Any new define must be undefined at first
// You can generate #undef list below with this oneliner:
// $ cat build.h | sed 's/\t//g' | grep '^#define XASH' | awk '{ print $2 }' | sort | uniq | awk '{ print "#undef " $1 }'
//
// So in various buildscripts you can grep for ^#undef XASH and select only second word
// or in another oneliner:
// $ cat build.h | grep '^#undef XASH' | awk '{ print $2 }'
#undef XASH_64BIT
#undef XASH_AMD64
#undef XASH_ANDROID
#undef XASH_APPLE
#undef XASH_ARM
#undef XASH_ARM64
#undef XASH_ARM_HARDFP
#undef XASH_ARM_SOFTFP
#undef XASH_ARMv4
#undef XASH_ARMv5
#undef XASH_ARMv6
#undef XASH_ARMv7
#undef XASH_BIG_ENDIAN
#undef XASH_BSD
#undef XASH_E2K
#undef XASH_EMSCRIPTEN
#undef XASH_FREEBSD
#undef XASH_IOS
#undef XASH_JS
#undef XASH_LINUX
#undef XASH_LITTLE_ENDIAN
#undef XASH_MINGW
#undef XASH_MIPS
#undef XASH_MOBILE_PLATFORM
#undef XASH_MSVC
#undef XASH_NETBSD
#undef XASH_OPENBSD
#undef XASH_WIN32
#undef XASH_WIN64
#undef XASH_X86
//================================================================
//
// OPERATING SYSTEM DEFINES
//
//================================================================
#if defined(_WIN32)
#define XASH_WIN32 1
#if defined(__MINGW32__)
#define XASH_MINGW 1
#elif defined(_MSC_VER)
#define XASH_MSVC 1
#endif
#if defined(_WIN64)
#define XASH_WIN64 1
#endif
#elif defined(__linux__)
#define XASH_LINUX 1
#if defined(__ANDROID__)
#define XASH_ANDROID 1
#endif // defined(__ANDROID__)
#elif defined(__APPLE__)
#include <TargetConditionals.h>
#define XASH_APPLE 1
#if TARGET_OS_IOS
#define XASH_IOS 1
#endif // TARGET_OS_IOS
#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
#define XASH_BSD 1
#if defined(__FreeBSD__)
#define XASH_FREEBSD 1
#elif defined(__NetBSD__)
#define XASH_NETBSD 1
#elif defined(__OpenBSD__)
#define XASH_OPENBSD 1
#endif
#elif defined __EMSCRIPTEN__
#define XASH_EMSCRIPTEN 1
#else
#error "Place your operating system name here! If this is a mistake, try to fix conditions above and report a bug"
#endif
#if defined XASH_ANDROID || defined XASH_IOS
#define XASH_MOBILE_PLATFORM 1
#endif
//================================================================
//
// ENDIANNESS DEFINES
//
//================================================================
#if defined(XASH_LITTLE_ENDIAN) && defined(XASH_BIG_ENDIAN)
#error "Both XASH_LITTLE_ENDIAN and XASH_BIG_ENDIAN are defined"
#endif
#if !defined(XASH_LITTLE_ENDIAN) || !defined(XASH_BIG_ENDIAN)
#if defined XASH_MSVC || __LITTLE_ENDIAN__
//!!! Probably all WinNT installations runs in little endian
#define XASH_LITTLE_ENDIAN 1
#elif __BIG_ENDIAN__
#define XASH_BIG_ENDIAN 1
#elif defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && defined(__ORDER_LITTLE_ENDIAN__) // some compilers define this
#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
#define XASH_BIG_ENDIAN 1
#elif __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
#define XASH_LITTLE_ENDIAN 1
#else
#error "Unknown endianness!"
#endif
#else
#include <sys/param.h>
#if __BYTE_ORDER == __BIG_ENDIAN
#define XASH_BIG_ENDIAN 1
#elif __BYTE_ORDER == __LITTLE_ENDIAN
#define XASH_LITTLE_ENDIAN 1
#else
#error "Unknown endianness!"
#endif
#endif // !XASH_WIN32
#endif
//================================================================
//
// CPU ARCHITECTURE DEFINES
//
//================================================================
#if defined(__x86_64__) || defined(_M_X64)
#define XASH_64BIT 1
#define XASH_AMD64 1
#elif defined(__i386__) || defined(_X86_) || defined(_M_IX86)
#define XASH_X86 1
#elif defined __aarch64__
#define XASH_64BIT 1
#define XASH_ARM64 1
#elif defined __arm__ || defined _M_ARM
#if defined _M_ARM
// msvc can only armv7 ?
#define XASH_ARM 7
#elif __ARM_ARCH == 7 || __ARM_ARCH_7__
#define XASH_ARM 7
#elif __ARM_ARCH == 6 || __ARM_ARCH_6__ || __ARM_ARCH_6J__
#define XASH_ARM 6
#elif __ARM_ARCH == 5 || __ARM_ARCH_5__
#define XASH_ARM 5
#elif __ARM_ARCH == 4 || __ARM_ARCH_4__
#define XASH_ARM 4
#else
#error "Unknown ARM"
#endif
#if defined _M_ARM
#error "No WinMobile port yet! Need to determine which ARM float ABI msvc uses if applicable"
#endif
#if defined __SOFTFP__ || __ARM_PCS_VFP == 0
#define XASH_ARM_SOFTFP 1
#else // __SOFTFP__
#define XASH_ARM_HARDFP 1
#endif // __SOFTFP__
#elif defined __mips__
#define XASH_MIPS 1
#elif defined __EMSCRIPTEN__
#define XASH_JS 1
#elif defined __e2k__
#define XASH_64BIT 1
#define XASH_E2K 1
#else
#error "Place your architecture name here! If this is a mistake, try to fix conditions above and report a bug"
#endif
#if defined(XASH_WAF_DETECTED_64BIT) && !defined(XASH_64BIT)
#define XASH_64BIT 1
#endif
#if XASH_ARM == 7
#define XASH_ARMv7 1
#elif XASH_ARM == 6
#define XASH_ARMv6 1
#elif XASH_ARM == 5
#define XASH_ARMv5 1
#elif XASH_ARM == 4
#define XASH_ARMv4 1
#endif
#endif // BUILD_H

View File

@ -0,0 +1,127 @@
#! /usr/bin/env python
# Copyright 2019 (C) a1batross
from waflib import Configure, Errors, Utils
# TODO: make generic
CHECK_SYMBOL_EXISTS_FRAGMENT = '''
#include "build.h"
int main(int argc, char** argv)
{
(void)argv;
#ifndef %s
return ((int*)(&%s))[argc];
#else
(void)argc;
return 0;
#endif
}
'''
DEFINES = [
'XASH_64BIT',
'XASH_AMD64',
'XASH_ANDROID',
'XASH_APPLE',
'XASH_ARM',
'XASH_ARM64',
'XASH_ARM_HARDFP',
'XASH_ARM_SOFTFP',
'XASH_ARMv4',
'XASH_ARMv5',
'XASH_ARMv6',
'XASH_ARMv7',
'XASH_BIG_ENDIAN',
'XASH_BSD',
'XASH_E2K',
'XASH_EMSCRIPTEN',
'XASH_FREEBSD',
'XASH_IOS',
'XASH_JS',
'XASH_LINUX',
'XASH_LITTLE_ENDIAN',
'XASH_MINGW',
'XASH_MIPS',
'XASH_MOBILE_PLATFORM',
'XASH_MSVC',
'XASH_NETBSD',
'XASH_OPENBSD',
'XASH_WIN32',
'XASH_WIN64',
'XASH_X86'
]
def configure(conf):
conf.env.stash()
conf.start_msg('Determining library postfix')
tests = map(lambda x: {
'fragment': CHECK_SYMBOL_EXISTS_FRAGMENT % (x, x),
'includes': [conf.path.find_node('public/').abspath()],
'define_name': x }, DEFINES )
conf.multicheck(*tests, msg = '', mandatory = False, quiet = True)
# engine/common/build.c
if conf.env.XASH_ANDROID:
buildos = "android"
elif conf.env.XASH_WIN32 or conf.env.XASH_LINUX or conf.env.XASH_APPLE:
buildos = "" # no prefix for default OS
elif conf.env.XASH_FREEBSD:
buildos = "freebsd"
elif conf.env.XASH_NETBSD:
buildos = "netbsd"
elif conf.env.XASH_OPENBSD:
buildos = "openbsd"
elif conf.env.XASH_EMSCRIPTEN:
buildos = "emscripten"
else:
conf.fatal("Place your operating system name here! If this is a mistake, try to fix conditions above and report a bug")
if conf.env.XASH_AMD64:
buildarch = "amd64"
elif conf.env.XASH_X86:
buildarch = ""
elif conf.env.XASH_ARM64:
buildarch = "arm64"
elif conf.env.XASH_ARM:
buildarch = "armv"
if conf.env.XASH_ARMv7:
buildarch += "7"
elif conf.env.XASH_ARMv6:
buildarch += "6"
elif conf.env.XASH_ARMv5:
buildarch += "5"
elif conf.env.XASH_ARMv4:
buildarch += "4"
else:
raise conf.fatal('Unknown ARM')
if conf.env.XASH_ARM_HARDFP:
buildarch += "hf"
else:
buildarch += "l"
elif conf.env.XASH_MIPS and conf.env.XASH_BIG_ENDIAN:
buildarch = "mips"
elif conf.env.XASH_MIPS and conf.env.XASH_LITTLE_ENDIAN:
buildarch = "mipsel"
elif conf.env.XASH_JS:
buildarch = "javascript"
elif conf.env.XASH_E2K:
buildarch = "e2k"
else:
raise conf.fatal("Place your architecture name here! If this is a mistake, try to fix conditions above and report a bug")
conf.env.revert()
if buildos == 'android':
# force disable for Android, as Android ports aren't distributed in normal way and doesn't follow library naming
conf.env.POSTFIX = ''
elif buildos != '' and buildarch != '':
conf.env.POSTFIX = '_%s_%s' % (buildos,buildarch)
elif buildarch != '':
conf.env.POSTFIX = '_%s' % buildarch
else:
conf.env.POSTFIX = ''
conf.end_msg(conf.env.POSTFIX)

View File

@ -122,7 +122,7 @@ def configure(conf):
else:
conf.env.BIT32_ALLOW64 = True
conf.env.BIT32_MANDATORY = not conf.env.BIT32_ALLOW64
conf.load('force_32bit')
conf.load('force_32bit library_naming')
linker_flags = {
'common': {