2023-02-07 21:18:17 +01:00
|
|
|
cmake_minimum_required(VERSION 3.5)
|
2023-05-18 20:24:09 +02:00
|
|
|
project(openmohaa)
|
2023-01-29 21:00:43 +01:00
|
|
|
|
2023-02-01 00:29:02 +01:00
|
|
|
include(TargetArch.cmake)
|
|
|
|
|
|
|
|
target_architecture(TARGET_ARCH)
|
|
|
|
|
2023-01-30 18:39:52 +01:00
|
|
|
if(TARGET_GAME_TYPE)
|
|
|
|
if(TARGET_GAME_TYPE EQUAL 1)
|
|
|
|
# Build for Team Assault (Spearhead)
|
|
|
|
set(TARGET_BASE_SUFFIX "ta")
|
|
|
|
elseif(TARGET_GAME_TYPE EQUAL 2)
|
|
|
|
# Build for Team Tactics (Breakthrough)
|
|
|
|
set(TARGET_BASE_SUFFIX "tt")
|
|
|
|
else()
|
|
|
|
set(TARGET_BASE_SUFFIX)
|
|
|
|
message(SEND_ERROR "Invalid game type. Game type can be 0, 1 or 2")
|
|
|
|
endif()
|
|
|
|
else()
|
|
|
|
set(TARGET_BASE_SUFFIX)
|
|
|
|
set(TARGET_GAME_TYPE 0)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
set(TARGET_BASE_GAME "main${TARGET_BASE_SUFFIX}")
|
|
|
|
|
|
|
|
if(MSVC)
|
2023-02-07 21:18:17 +01:00
|
|
|
add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE)
|
2023-02-01 00:29:02 +01:00
|
|
|
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
|
|
|
add_compile_options(-Wno-comment)
|
|
|
|
# Ignore warnings for code like 'assert("Assert string")'
|
|
|
|
add_compile_options(-Wno-pointer-bool-conversion)
|
2023-01-30 18:39:52 +01:00
|
|
|
endif()
|
|
|
|
|
2023-02-01 22:45:04 +01:00
|
|
|
IF("${TARGET_ARCH}" STREQUAL "x86_64")
|
2023-02-03 21:26:12 +01:00
|
|
|
set(TARGET_ARCH_SUFFIX "x86_64")
|
2023-02-01 22:45:04 +01:00
|
|
|
ELSEIF("${TARGET_ARCH}" STREQUAL "i386")
|
|
|
|
set(TARGET_ARCH_SUFFIX "x86")
|
2023-02-04 00:48:37 +02:00
|
|
|
ELSEIF("${TARGET_ARCH}" STREQUAL "arm64")
|
|
|
|
set(TARGET_ARCH_SUFFIX "arm64")
|
2023-02-01 22:45:04 +01:00
|
|
|
ELSEIF("${TARGET_ARCH}" MATCHES "arm(.*)")
|
|
|
|
set(TARGET_ARCH_SUFFIX "arm")
|
|
|
|
ELSE()
|
|
|
|
set(TARGET_ARCH_SUFFIX ${TARGET_ARCH})
|
|
|
|
ENDIF()
|
2023-01-29 21:00:43 +01:00
|
|
|
|
2023-02-01 22:45:04 +01:00
|
|
|
message(STATUS "Architecture detected: ${TARGET_ARCH}, suffix set to ${TARGET_ARCH_SUFFIX}")
|
2023-02-01 00:29:02 +01:00
|
|
|
|
|
|
|
IF(WIN32)
|
|
|
|
set(TARGET_PLATFORM_PREFIX "")
|
|
|
|
message(STATUS "Using Win32 naming convention")
|
|
|
|
ELSEIF(UNIX)
|
2023-02-01 22:45:04 +01:00
|
|
|
set(TARGET_PLATFORM_PREFIX "")
|
2023-02-01 00:29:02 +01:00
|
|
|
message(STATUS "Using Unix naming convention")
|
|
|
|
ELSE()
|
|
|
|
set(TARGET_PLATFORM_PREFIX "")
|
|
|
|
ENDIF()
|
|
|
|
|
2023-02-05 14:15:24 +01:00
|
|
|
IF(CMAKE_BUILD_TYPE MATCHES Debug)
|
2023-05-15 15:33:35 +02:00
|
|
|
set(TARGET_CONFIG_SUFFIX "-dbg")
|
2023-02-07 21:18:17 +01:00
|
|
|
add_definitions(-D_DEBUG)
|
2023-02-05 14:15:24 +01:00
|
|
|
ELSE()
|
|
|
|
set(TARGET_CONFIG_SUFFIX "")
|
|
|
|
ENDIF()
|
|
|
|
|
2023-04-30 01:45:26 +02:00
|
|
|
# Common stuff
|
|
|
|
|
|
|
|
## For modules
|
|
|
|
|
2023-01-29 21:00:43 +01:00
|
|
|
set(SOURCES_SHARED
|
|
|
|
"code/qcommon/class.cpp"
|
|
|
|
"code/qcommon/con_set.cpp"
|
|
|
|
"code/qcommon/con_timer.cpp"
|
|
|
|
"code/qcommon/listener.cpp"
|
|
|
|
"code/qcommon/lz77.cpp"
|
|
|
|
"code/qcommon/mem_blockalloc.cpp"
|
|
|
|
"code/qcommon/mem_tempalloc.cpp"
|
|
|
|
"code/qcommon/q_math.c"
|
|
|
|
"code/qcommon/q_shared.c"
|
|
|
|
"code/qcommon/script.cpp"
|
|
|
|
"code/qcommon/str.cpp"
|
|
|
|
"code/script/scriptexception.cpp"
|
|
|
|
"code/script/scriptvariable.cpp"
|
|
|
|
)
|
|
|
|
|
2023-04-30 20:37:50 +02:00
|
|
|
file(GLOB_RECURSE SOURCES_BG "code/game/bg_*.cpp")
|
|
|
|
|
2023-04-30 01:45:26 +02:00
|
|
|
## For executable
|
2023-01-30 18:39:52 +01:00
|
|
|
|
|
|
|
### Platform-specific code
|
|
|
|
if(WIN32)
|
|
|
|
set(SOURCES_PLATFORM_SPECIFIC
|
2023-05-08 22:58:54 +02:00
|
|
|
WIN32
|
|
|
|
"code/win32/win_bounds.cpp"
|
|
|
|
"code/win32/win_localization.cpp"
|
|
|
|
"code/win32/win_main.c"
|
|
|
|
"code/win32/win_net.c"
|
|
|
|
"code/win32/win_shared.c"
|
|
|
|
"code/win32/win_syscon.c"
|
|
|
|
"code/win32/win_wndproc.c"
|
|
|
|
"code/win32/win_resource.rc"
|
|
|
|
)
|
|
|
|
|
|
|
|
set(SOURCES_CLIENT_PLATFORM_SPECIFIC
|
|
|
|
"code/win32/win_gamma.c"
|
|
|
|
"code/win32/win_glimp.c"
|
2023-05-08 23:34:24 +02:00
|
|
|
"code/win32/win_input.c"
|
2023-05-08 22:58:54 +02:00
|
|
|
"code/win32/win_qgl.c"
|
|
|
|
"code/win32/win_snd.c"
|
2023-01-30 18:39:52 +01:00
|
|
|
)
|
|
|
|
else()
|
2023-02-01 00:29:02 +01:00
|
|
|
set(SOURCES_PLATFORM_SPECIFIC
|
2023-05-08 23:34:24 +02:00
|
|
|
"code/unix/linux_signals.c"
|
2023-05-08 22:58:54 +02:00
|
|
|
"code/unix/unix_main.c"
|
|
|
|
"code/unix/unix_net.c"
|
|
|
|
"code/unix/unix_shared.c"
|
2023-02-01 00:29:02 +01:00
|
|
|
# These are still used even they're prefixed 'win'
|
2023-05-08 22:58:54 +02:00
|
|
|
"code/win32/win_bounds.cpp"
|
|
|
|
"code/win32/win_localization.cpp"
|
2023-02-01 00:29:02 +01:00
|
|
|
)
|
2023-05-11 22:47:34 +02:00
|
|
|
|
|
|
|
set(SOURCES_CLIENT_PLATFORM_SPECIFIC
|
|
|
|
"code/unix/linux_common.c"
|
|
|
|
"code/unix/linux_glimp.c"
|
|
|
|
"code/unix/linux_joystick.c"
|
|
|
|
"code/unix/linux_qgl.c"
|
|
|
|
"code/unix/linux_snd.c"
|
|
|
|
)
|
2023-01-30 18:39:52 +01:00
|
|
|
endif()
|
|
|
|
|
|
|
|
### Common executable code
|
|
|
|
set(SOURCES_COMMON
|
2023-01-29 21:00:43 +01:00
|
|
|
"code/qcommon/alias.c"
|
|
|
|
"code/qcommon/cm_fencemask.c"
|
|
|
|
"code/qcommon/cm_load.c"
|
|
|
|
"code/qcommon/cm_patch.c"
|
|
|
|
"code/qcommon/cm_polylib.c"
|
|
|
|
"code/qcommon/cm_terrain.c"
|
|
|
|
"code/qcommon/cm_test.c"
|
|
|
|
"code/qcommon/cm_trace.c"
|
|
|
|
"code/qcommon/cm_trace_lbd.cpp"
|
|
|
|
"code/qcommon/cmd.c"
|
|
|
|
"code/qcommon/common.cpp"
|
|
|
|
"code/qcommon/crc.c"
|
|
|
|
"code/qcommon/cvar.c"
|
|
|
|
"code/qcommon/files.cpp"
|
|
|
|
"code/qcommon/huffman.cpp"
|
|
|
|
"code/qcommon/md4.c"
|
|
|
|
"code/qcommon/md5.c"
|
|
|
|
"code/qcommon/memory.c"
|
|
|
|
"code/qcommon/msg.cpp"
|
|
|
|
"code/qcommon/net_chan.c"
|
|
|
|
"code/qcommon/q_math.c"
|
|
|
|
"code/qcommon/q_shared.c"
|
|
|
|
"code/qcommon/tiki_main.cpp"
|
|
|
|
"code/qcommon/tiki_script.cpp"
|
|
|
|
"code/qcommon/unzip.c"
|
2023-02-05 01:38:42 +01:00
|
|
|
# Gamespy
|
|
|
|
"code/gamespy/sv_gamespy.c"
|
|
|
|
"code/gamespy/sv_gqueryreporting.c"
|
2023-01-29 21:00:43 +01:00
|
|
|
)
|
|
|
|
|
2023-01-30 18:39:52 +01:00
|
|
|
file(GLOB_RECURSE SOURCES_SKEL "code/tiki/*.cpp" "code/skeletor/*.cpp")
|
2023-01-29 23:31:13 +01:00
|
|
|
|
2023-01-30 18:39:52 +01:00
|
|
|
set(SOURCES_APP ${SOURCES_SHARED} ${SOURCES_COMMON} ${SOURCES_SKEL})
|
2023-01-29 23:31:13 +01:00
|
|
|
|
2023-04-30 01:45:26 +02:00
|
|
|
# Targets
|
2023-01-29 21:00:43 +01:00
|
|
|
|
2023-04-30 01:45:26 +02:00
|
|
|
## Server
|
2023-02-04 21:00:31 +01:00
|
|
|
|
2023-04-30 01:45:26 +02:00
|
|
|
### Server game library
|
|
|
|
file(GLOB_RECURSE SOURCES_GAME "code/game/*.c" "code/game/*.cpp" "code/parser/*.cpp" "code/script/*.cpp")
|
|
|
|
set(SOURCES_GAME_LIB ${SOURCES_SHARED} ${SOURCES_GAME})
|
2023-01-29 22:58:51 +01:00
|
|
|
|
2023-04-30 01:45:26 +02:00
|
|
|
add_library(fgame SHARED ${SOURCES_GAME_LIB})
|
|
|
|
target_compile_definitions(fgame PRIVATE GAME_DLL ARCHIVE_SUPPORTED TARGET_GAME_TYPE=${TARGET_GAME_TYPE})
|
|
|
|
target_include_directories(fgame PUBLIC "code/qcommon" "code/script" "code/game")
|
|
|
|
target_include_directories(fgame PRIVATE "code/parser")
|
|
|
|
target_compile_features(fgame PUBLIC cxx_nullptr)
|
|
|
|
target_compile_features(fgame PUBLIC c_variadic_macros)
|
2023-01-29 23:31:13 +01:00
|
|
|
|
2023-04-30 01:45:26 +02:00
|
|
|
set_target_properties(fgame PROPERTIES PREFIX "${TARGET_PLATFORM_PREFIX}")
|
|
|
|
set_target_properties(fgame PROPERTIES OUTPUT_NAME "game${TARGET_ARCH_SUFFIX}${TARGET_CONFIG_SUFFIX}")
|
|
|
|
set_target_properties(fgame PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${TARGET_BASE_GAME}")
|
|
|
|
INSTALL(TARGETS fgame DESTINATION "${TARGET_BASE_GAME}")
|
|
|
|
|
|
|
|
include("code/gamespy/gcd.cmake")
|
|
|
|
|
|
|
|
### Server executable
|
2023-01-30 18:39:52 +01:00
|
|
|
file(GLOB_RECURSE SOURCES_SERVER "code/server/*.c" "code/server/*.cpp")
|
|
|
|
set(SOURCES_SERVER_APP ${SOURCES_APP} ${SOURCES_SERVER})
|
2023-01-29 21:00:43 +01:00
|
|
|
|
2023-05-08 23:34:24 +02:00
|
|
|
add_executable(omohaaded ${SOURCES_PLATFORM_SPECIFIC} ${SOURCES_SERVER_APP} "code/null/null_client.c" "code/null/null_input.c" "code/null/null_snddma.c")
|
2023-04-30 01:45:26 +02:00
|
|
|
target_compile_definitions(omohaaded PRIVATE NO_SCRIPTENGINE APP_MODULE DEDICATED TARGET_GAME_TYPE=${TARGET_GAME_TYPE})
|
2023-02-08 14:04:47 +01:00
|
|
|
target_compile_features(omohaaded PUBLIC cxx_nullptr)
|
2023-02-08 14:26:01 +01:00
|
|
|
target_compile_features(omohaaded PUBLIC c_variadic_macros)
|
2023-02-05 01:38:42 +01:00
|
|
|
# Gamespy dependency
|
|
|
|
add_dependencies(omohaaded gcd)
|
|
|
|
target_link_libraries(omohaaded PRIVATE gcd)
|
2023-02-04 21:00:31 +01:00
|
|
|
target_include_directories(omohaaded PUBLIC "code/qcommon" "code/script" "code/gamespy" "code/server" "code/SDL2/include")
|
2023-02-05 14:15:24 +01:00
|
|
|
set_target_properties(omohaaded PROPERTIES OUTPUT_NAME "omohaaded${TARGET_BASE_SUFFIX}${TARGET_ARCH_SUFFIX}${TARGET_CONFIG_SUFFIX}")
|
2023-01-29 21:00:43 +01:00
|
|
|
|
|
|
|
if(WIN32)
|
2023-02-05 14:02:18 +01:00
|
|
|
if (MSVC)
|
|
|
|
target_link_options(omohaaded PRIVATE "/MANIFEST:NO")
|
|
|
|
endif()
|
2023-02-05 01:38:42 +01:00
|
|
|
target_link_libraries(omohaaded PRIVATE wsock32 ws2_32)
|
|
|
|
target_link_libraries(omohaaded PRIVATE winmm)
|
2023-05-18 19:56:46 +02:00
|
|
|
|
|
|
|
INSTALL(FILES $<TARGET_PDB_FILE:fgame> DESTINATION "${TARGET_BASE_GAME}" OPTIONAL)
|
2023-05-08 23:34:24 +02:00
|
|
|
INSTALL(FILES $<TARGET_PDB_FILE:omohaaded> DESTINATION "./" OPTIONAL)
|
2023-02-03 20:05:34 +01:00
|
|
|
elseif(UNIX)
|
2023-02-07 20:50:38 +01:00
|
|
|
find_package(Threads)
|
|
|
|
target_link_libraries(omohaaded PRIVATE ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT})
|
2023-02-08 14:26:01 +01:00
|
|
|
target_link_libraries(omohaaded PRIVATE m)
|
|
|
|
target_link_libraries(omohaaded PRIVATE stdc++)
|
2023-01-29 21:00:43 +01:00
|
|
|
endif()
|
2023-01-29 23:31:13 +01:00
|
|
|
|
2023-02-01 22:45:04 +01:00
|
|
|
INSTALL(TARGETS omohaaded DESTINATION "./")
|
2023-01-29 23:31:13 +01:00
|
|
|
|
2023-04-30 01:45:26 +02:00
|
|
|
if (WITH_CLIENT)
|
|
|
|
## Client
|
|
|
|
|
|
|
|
### Client game library
|
|
|
|
file(GLOB_RECURSE SOURCES_CGAME "code/cgame/*.c" "code/cgame/*.cpp")
|
2023-04-30 20:37:50 +02:00
|
|
|
set(SOURCES_CGAME_LIB ${SOURCES_SHARED} ${SOURCES_CGAME} ${SOURCES_BG})
|
2023-04-30 01:45:26 +02:00
|
|
|
|
|
|
|
add_library(cgame SHARED ${SOURCES_CGAME_LIB})
|
|
|
|
target_compile_definitions(cgame PRIVATE CGAME_DLL NO_SCRIPTENGINE TARGET_GAME_TYPE=${TARGET_GAME_TYPE})
|
|
|
|
target_include_directories(cgame PUBLIC "code/qcommon" "code/cgame" "code/script")
|
|
|
|
target_compile_features(cgame PUBLIC cxx_nullptr)
|
|
|
|
target_compile_features(cgame PUBLIC c_variadic_macros)
|
|
|
|
|
|
|
|
set_target_properties(cgame PROPERTIES PREFIX "${TARGET_PLATFORM_PREFIX}")
|
|
|
|
set_target_properties(cgame PROPERTIES OUTPUT_NAME "cgame${TARGET_ARCH_SUFFIX}${TARGET_CONFIG_SUFFIX}")
|
|
|
|
set_target_properties(cgame PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${TARGET_BASE_GAME}")
|
|
|
|
INSTALL(TARGETS cgame DESTINATION "${TARGET_BASE_GAME}")
|
|
|
|
|
|
|
|
### Executable
|
2023-05-08 23:36:41 +02:00
|
|
|
file(GLOB_RECURSE SOURCES_JPEG_8 "code/jpeg-8c/*.c")
|
|
|
|
add_library(jpeg8 STATIC ${SOURCES_JPEG_8})
|
|
|
|
target_include_directories(jpeg8 PRIVATE "code/jpeg-8c")
|
|
|
|
|
|
|
|
file(GLOB_RECURSE SOURCES_CLIENT "code/client/*.c" "code/client/*.cpp" "code/qcommon/puff.c")
|
|
|
|
file(GLOB_RECURSE SOURCES_UILIB "code/uilib/*.c" "code/uilib/*.cpp")
|
|
|
|
file(GLOB_RECURSE SOURCES_RENDERER "code/renderer/*.c" "code/renderer/*.cpp")
|
|
|
|
#file(GLOB_RECURSE SOURCES_RENDERER "code/sdl/*.c" "code/renderercommon/*.c" "code/renderergl2/*.c" "code/renderergl2/*.cpp")
|
|
|
|
set(SOURCES_CLIENT_APP ${SOURCES_APP} ${SOURCES_SERVER} ${SOURCES_CLIENT} ${SOURCES_UILIB} ${SOURCES_LIBS} ${SOURCES_RENDERER})
|
|
|
|
|
|
|
|
add_executable(openmohaa ${SOURCES_PLATFORM_SPECIFIC} ${SOURCES_CLIENT_APP} ${SOURCES_CLIENT_PLATFORM_SPECIFIC})
|
|
|
|
target_compile_definitions(openmohaa PRIVATE NO_SCRIPTENGINE APP_MODULE TARGET_GAME_TYPE=${TARGET_GAME_TYPE})
|
|
|
|
target_compile_features(openmohaa PUBLIC cxx_nullptr)
|
|
|
|
target_compile_features(openmohaa PUBLIC c_variadic_macros)
|
|
|
|
target_link_libraries(openmohaa PRIVATE jpeg8)
|
|
|
|
# Gamespy dependency
|
|
|
|
add_dependencies(openmohaa gcd)
|
|
|
|
target_link_libraries(openmohaa PRIVATE gcd)
|
|
|
|
target_include_directories(openmohaa PUBLIC "code/qcommon" "code/script" "code/gamespy" "code/server" "code/client" "code/uilib" "code/SDL2/include" "code/jpeg-8c")
|
|
|
|
set_target_properties(openmohaa PROPERTIES OUTPUT_NAME "openmohaa${TARGET_BASE_SUFFIX}${TARGET_ARCH_SUFFIX}${TARGET_CONFIG_SUFFIX}")
|
|
|
|
|
|
|
|
if(WIN32)
|
|
|
|
if (MSVC)
|
|
|
|
target_link_options(openmohaa PRIVATE "/MANIFEST:NO")
|
|
|
|
|
2023-05-11 22:47:34 +02:00
|
|
|
#add_library(sdl2 SHARED IMPORTED)
|
|
|
|
#set_target_properties(sdl2 PROPERTIES
|
|
|
|
# IMPORTED_IMPLIB "${CMAKE_SOURCE_DIR}/code/libs/win32/SDL2.lib"
|
|
|
|
#)
|
|
|
|
#
|
|
|
|
#add_library(sdl2main SHARED IMPORTED)
|
|
|
|
#set_target_properties(sdl2main PROPERTIES
|
|
|
|
# IMPORTED_IMPLIB "${CMAKE_SOURCE_DIR}/code/libs/win32/SDL2main.lib"
|
|
|
|
#)
|
|
|
|
#
|
|
|
|
#add_library(glew32 SHARED IMPORTED)
|
|
|
|
#set_target_properties(glew32 PROPERTIES
|
|
|
|
# IMPORTED_IMPLIB "${CMAKE_SOURCE_DIR}/code/libs/win32/glew32.lib"
|
|
|
|
#)
|
|
|
|
|
|
|
|
target_link_libraries(openmohaa PRIVATE opengl32)
|
2023-05-08 23:36:41 +02:00
|
|
|
endif()
|
|
|
|
|
|
|
|
target_link_libraries(openmohaa PRIVATE wsock32 ws2_32)
|
|
|
|
target_link_libraries(openmohaa PRIVATE winmm)
|
2023-05-18 19:56:46 +02:00
|
|
|
|
|
|
|
INSTALL(FILES $<TARGET_PDB_FILE:cgame> DESTINATION "${TARGET_BASE_GAME}" OPTIONAL)
|
|
|
|
INSTALL(FILES $<TARGET_PDB_FILE:openmohaa> DESTINATION "./" OPTIONAL)
|
2023-05-08 23:36:41 +02:00
|
|
|
elseif(UNIX)
|
2023-05-11 22:47:34 +02:00
|
|
|
find_package(OpenGL REQUIRED)
|
|
|
|
find_package(GLUT REQUIRED)
|
|
|
|
find_package(X11 REQUIRED)
|
2023-05-08 23:36:41 +02:00
|
|
|
find_package(Threads)
|
2023-05-11 22:47:34 +02:00
|
|
|
|
|
|
|
target_include_directories(openmohaa PRIVATE ${OPENGL_INCLUDE_DIRS} ${GLUT_INCLUDE_DIRS})
|
|
|
|
target_link_libraries(openmohaa PRIVATE ${OPENGL_LIBRARIES} ${GLUT_LIBRARY} ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT})
|
2023-05-08 23:36:41 +02:00
|
|
|
target_link_libraries(openmohaa PRIVATE m)
|
|
|
|
target_link_libraries(openmohaa PRIVATE stdc++)
|
2023-05-11 22:47:34 +02:00
|
|
|
target_link_libraries(openmohaa PRIVATE ${X11_LIBRARIES} ${X11_Xxf86vm_LIB} ${X11_Xext_LIB} Xxf86dga)
|
2023-05-08 23:36:41 +02:00
|
|
|
endif()
|
|
|
|
|
|
|
|
INSTALL(TARGETS openmohaa DESTINATION "./")
|
2023-04-30 01:45:26 +02:00
|
|
|
endif()
|