Skip to content

Commit

Permalink
Make project compile on Linux (#1)
Browse files Browse the repository at this point in the history
- Updated CMake files to support build on Linux
- Deleted original Linux makefiles as they are not needed since CMake is introduced
- Fixed minor problems in the code which prevented the project from compiling

It likely breaks the Windows build, but hopefully it only causes minor problems
those are easy to fix in a way that allows the project to compile on both platforms.

The Linux CMake files don't try to deploy the built libraries to the game mod
directory (people likely build in a separate environment, not where they have the
game installed).

Co-authored-by: MegaBrutal <megabrutal@devcentre>
  • Loading branch information
MegaBrutal and MegaBrutal authored Mar 11, 2022
1 parent 0adef78 commit 8059652
Show file tree
Hide file tree
Showing 16 changed files with 70 additions and 1,313 deletions.
4 changes: 4 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ set(CLIENT_DLL_NAME "client")
set(GAMEDIR_NAME "sevenkewp")
set(GAME_ARGS "-steam -console -game ${GAMEDIR_NAME} +developer 2 +map sc_test -sv_cheats 1 -maxplayers 32")

if (UNIX)
set(CMAKE_CXX_COMPILER "g++")
endif()

project(sevenkewp)

add_subdirectory(dlls) # server project
Expand Down
51 changes: 37 additions & 14 deletions cl_dll/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,7 @@ set(ALL_SRC
)

include_directories(../dlls)
include_directories(../dlls/env)
include_directories(.)
include_directories(../public)
include_directories(../common)
Expand All @@ -193,19 +194,41 @@ add_library(${CLIENT_DLL_NAME} SHARED ${ALL_SRC})

target_compile_definitions(${CLIENT_DLL_NAME} PRIVATE -DCLIENT_DLL -DCLIENT_WEAPONS -DHL_DLL)

add_custom_command(TARGET ${CLIENT_DLL_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${CLIENT_DLL_NAME}> ${ENGINE_DIR}/${GAMEDIR_NAME}/cl_dlls/
COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_SOURCE_DIR}/${GAMEDIR_NAME}/cl_dlls
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${CLIENT_DLL_NAME}> ${PROJECT_SOURCE_DIR}/${GAMEDIR_NAME}/cl_dlls/
)
if (USE_AUTOHOTKEY_SCRIPT)
add_custom_command(TARGET ${CLIENT_DLL_NAME} POST_BUILD
COMMAND start ${CMAKE_CURRENT_SOURCE_DIR}/../resize_console.ahk
)
endif()

if(UNIX)

add_definitions(-DLINUX)

add_custom_command(TARGET ${CLIENT_DLL_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_SOURCE_DIR}/${GAMEDIR_NAME}/cl_dlls
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${CLIENT_DLL_NAME}> ${PROJECT_SOURCE_DIR}/${GAMEDIR_NAME}/cl_dlls/
)

target_link_libraries(${CLIENT_DLL_NAME}
dl
pthread
stdc++
:vgui.so
)

set_target_properties(${CLIENT_DLL_NAME} PROPERTIES
PREFIX ""
COMPILE_FLAGS "-m32" LINK_FLAGS "-m32 -L ../../linux/release"
)

if(MSVC)
if (USE_AUTOHOTKEY_SCRIPT)
add_custom_command(TARGET ${CLIENT_DLL_NAME} POST_BUILD
COMMAND start ${CMAKE_CURRENT_SOURCE_DIR}/../resize_console.ahk
)
endif()
elseif(MSVC)

add_custom_command(TARGET ${CLIENT_DLL_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${CLIENT_DLL_NAME}> ${ENGINE_DIR}/${GAMEDIR_NAME}/cl_dlls/
COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_SOURCE_DIR}/${GAMEDIR_NAME}/cl_dlls
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${CLIENT_DLL_NAME}> ${PROJECT_SOURCE_DIR}/${GAMEDIR_NAME}/cl_dlls/
)

target_link_libraries(${CLIENT_DLL_NAME}
${CMAKE_CURRENT_SOURCE_DIR}/../utils/vgui/lib/win32_vc6/vgui.lib
wsock32
Expand All @@ -217,7 +240,7 @@ if(MSVC)
VS_DEBUGGER_WORKING_DIRECTORY "${ENGINE_DIR}"
VS_DEBUGGER_COMMAND_ARGUMENTS "${GAME_ARGS}"
)

source_group("Header Files\\Entities" FILES ${ENTITY_HDR})
source_group("Header Files\\Weapons" FILES ${WEAPON_HDR})
source_group("Header Files\\Util" FILES ${UTIL_HDR})
Expand All @@ -237,5 +260,5 @@ if(MSVC)
source_group("Source Files\\Render" FILES ${RENDER_SRC})

else()
message(FATAL_ERROR "TODO: Linux/mac support")
endif()
message(FATAL_ERROR "TODO: Mac support")
endif()
2 changes: 1 addition & 1 deletion cl_dll/hud_msg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ int CHud :: MsgFunc_Concuss( const char *pszName, int iSize, void *pbuf )

void ToxicCloudCallback(tempent_s* tempent, float frametime, float curtime) {
tempent->entity.origin = tempent->entity.origin + tempent->entity.curstate.velocity*frametime;
tempent->entity.curstate.scale = min(15.0f, tempent->entity.curstate.scale + 10*frametime);
tempent->entity.curstate.scale = fminf(15.0f, tempent->entity.curstate.scale + 10*frametime);
tempent->entity.angles.z += 100*frametime;

float timeLeft = tempent->die - curtime;
Expand Down
28 changes: 20 additions & 8 deletions dlls/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -406,20 +406,32 @@ target_include_directories(${SERVER_DLL_NAME} PRIVATE monster)

target_compile_definitions(${SERVER_DLL_NAME} PRIVATE -DQUIVER -DVOXEL -DQUAKE2 -DVALVE_DLL -DCLIENT_WEAPONS)

add_custom_command(TARGET ${SERVER_DLL_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${SERVER_DLL_NAME}> ${ENGINE_DIR}/${GAMEDIR_NAME}/dlls/
COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_SOURCE_DIR}/${GAMEDIR_NAME}/dlls
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${SERVER_DLL_NAME}> ${PROJECT_SOURCE_DIR}/${GAMEDIR_NAME}/dlls/
)
if(UNIX)

add_custom_command(TARGET ${SERVER_DLL_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_SOURCE_DIR}/${GAMEDIR_NAME}/dlls
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${SERVER_DLL_NAME}> ${PROJECT_SOURCE_DIR}/${GAMEDIR_NAME}/dlls/
)

set_target_properties(${SERVER_DLL_NAME} PROPERTIES
PREFIX ""
COMPILE_FLAGS "-m32" LINK_FLAGS "-m32"
)

elseif(MSVC)

add_custom_command(TARGET ${SERVER_DLL_NAME} POST_BUILD
#COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${SERVER_DLL_NAME}> ${ENGINE_DIR}/${GAMEDIR_NAME}/dlls/
COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_SOURCE_DIR}/${GAMEDIR_NAME}/dlls
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${SERVER_DLL_NAME}> ${PROJECT_SOURCE_DIR}/${GAMEDIR_NAME}/dlls/
)

if(MSVC)
if (USE_AUTOHOTKEY_SCRIPT)
add_custom_command(TARGET ${SERVER_DLL_NAME} POST_BUILD
COMMAND start ${CMAKE_CURRENT_SOURCE_DIR}/../resize_console.ahk
)
endif()


set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEF:${CMAKE_CURRENT_SOURCE_DIR}/hl.def")

set_target_properties(${SERVER_DLL_NAME} PROPERTIES
Expand Down Expand Up @@ -454,5 +466,5 @@ if(MSVC)
source_group("Source Files\\Game" FILES ${GAME_SRC})

else()
message(FATAL_ERROR "TODO: Linux/mac support")
message(FATAL_ERROR "TODO: Mac support")
endif()
186 changes: 0 additions & 186 deletions dlls/Makefile

This file was deleted.

6 changes: 3 additions & 3 deletions dlls/client_commands.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -306,19 +306,19 @@ bool CheatCommand(edict_t* pEntity) {
if (FStrEq(pcmd, "cl_noclip")) {
ABORT_IF_CHEATS_DISABLED("No clip");
pev->movetype = pev->movetype == MOVETYPE_NOCLIP ? MOVETYPE_WALK : MOVETYPE_NOCLIP;
char * newMode = pev->movetype == MOVETYPE_NOCLIP ? "ON" : "OFF";
const char* newMode = pev->movetype == MOVETYPE_NOCLIP ? "ON" : "OFF";
CLIENT_PRINTF(pEntity, print_center, UTIL_VarArgs("No clip is %s\n", newMode));
}
else if (FStrEq(pcmd, "godmode")) {
ABORT_IF_CHEATS_DISABLED("God mode");
pev->takedamage = pev->takedamage == DAMAGE_NO ? DAMAGE_YES : DAMAGE_NO;
char* newMode = pev->takedamage == DAMAGE_NO ? "ON" : "OFF";
const char* newMode = pev->takedamage == DAMAGE_NO ? "ON" : "OFF";
CLIENT_PRINTF(pEntity, print_center, UTIL_VarArgs("God mode is %s\n", newMode));
}
else if (FStrEq(pcmd, "cl_notarget")) {
ABORT_IF_CHEATS_DISABLED("No target");
pev->flags ^= FL_NOTARGET;
char* newMode = pev->flags & FL_NOTARGET ? "ON" : "OFF";
const char* newMode = pev->flags & FL_NOTARGET ? "ON" : "OFF";
CLIENT_PRINTF(pEntity, print_center, UTIL_VarArgs("No target is %s\n", newMode));
}
else {
Expand Down
4 changes: 2 additions & 2 deletions dlls/monster/CBabyGarg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class CBabyGarg : public CGargantua
void Spawn(void);
void Precache(void);

void CBabyGarg::TraceAttack(entvars_t* pevAttacker, float flDamage, Vector vecDir, TraceResult* ptr, int bitsDamageType);
void TraceAttack(entvars_t* pevAttacker, float flDamage, Vector vecDir, TraceResult* ptr, int bitsDamageType);
int TakeDamage(entvars_t* pevInflictor, entvars_t* pevAttacker, float flDamage, int bitsDamageType);
void SetObjectCollisionBox(void)
{
Expand Down Expand Up @@ -227,4 +227,4 @@ void CBabyGarg::StompSound() {

void CBabyGarg::BreatheSound() {
EMIT_SOUND_DYN(edict(), CHAN_VOICE, pBreatheSounds[RANDOM_LONG(0, ARRAYSIZE(pBreatheSounds) - 1)], 1.0, ATTN_GARG, 0, PITCH_NORM + RANDOM_LONG(-10, 10));
}
}
4 changes: 2 additions & 2 deletions dlls/monster/CTor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -593,7 +593,7 @@ void CTor::SlamAttack() {
pushDir.z = 0;

float launchPower = 1.0f - ((delta.Length() - 64) * 0.5f / SLAM_ATTACK_RADIUS);
launchPower = max(0.7f, launchPower);
launchPower = fmaxf(0.7f, launchPower);
float pushPower = 1.0f - launchPower;

Vector launchForce = Vector(0, 0, 1) * 1000 * launchPower;
Expand Down Expand Up @@ -744,4 +744,4 @@ void CTor::DeathNotice(entvars_t* pevChild) {
if (numChildren < 0) {
numChildren = 0;
}
}
}
2 changes: 1 addition & 1 deletion dlls/nodes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ CGraph WorldGraph;

LINK_ENTITY_TO_CLASS( info_node, CNodeEnt );
LINK_ENTITY_TO_CLASS( info_node_air, CNodeEnt );
#ifdef _LINUX
#ifdef __linux__
#include <unistd.h>
#define CreateDirectory(p, n) mkdir(p, 0777)
#endif
Expand Down
Loading

0 comments on commit 8059652

Please sign in to comment.