kyuii-engine/CMakeLists.txt

427 lines
16 KiB
CMake

# -------------------------------
# SPDX-License-Identifier: ISC
#
# Copyright © 2021 Daniel Wolf <<nephatrine@gmail.com>>
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
# -------------------------------
cmake_minimum_required(VERSION 3.9 FATAL_ERROR)
project(
KyuII
VERSION 3.22.0
LANGUAGES C)
# Policies
if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.11")
# FindOpenGL prefers GLVND by default when available.
cmake_policy(SET CMP0072 NEW)
endif()
if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.14")
# install(CODE) and install(SCRIPT) support generator expressions.
cmake_policy(SET CMP0087 NEW)
endif()
# CMake Includes
include(CMakeDependentOption)
set(CMAKE_SHARED_MODULE_PREFIX "")
# Project Includes
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/tools")
include(NXGenerateExportHeader)
include(NXGenerateVersionHeader)
include(NXGetRuntimeDependencies)
include(NXIdentifyTarget)
nx_identify_target()
# Platform-Specifics
option(KYUII_BUILD_UNIMPLEMENTED "Build Unimplemented Components" OFF)
set(KYUII_IMPLEMENTS_CD OFF)
set(KYUII_IMPLEMENTS_COMMON OFF)
set(KYUII_IMPLEMENTS_IN OFF)
set(KYUII_IMPLEMENTS_NET OFF)
set(KYUII_IMPLEMENTS_SND OFF)
set(KYUII_IMPLEMENTS_SYS OFF)
set(KYUII_IMPLEMENTS_SYS_DYN OFF)
set(KYUII_IMPLEMENTS_VID OFF)
set(KYUII_IMPLEMENTS_VID_DYN OFF)
if(NX_TARGET_PLATFORM_WINDOWS AND NX_TARGET_ARCHITECTURE_IA32)
set(KYUII_IMPLEMENTS_COMMON ON)
list(APPEND KYUII_COMMON_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/win32/q_shwin.c")
list(APPEND KYUII_COMMON_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/win32/winquake.h")
list(APPEND KYUII_COMMON_LIBS "Winmm")
set(KYUII_IMPLEMENTS_SYS ON)
set(KYUII_IMPLEMENTS_SYS_DYN ON)
list(APPEND KYUII_ENGINE_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/win32/conproc.c" "${CMAKE_CURRENT_SOURCE_DIR}/win32/sys_win.c"
"${CMAKE_CURRENT_SOURCE_DIR}/win32/engine.rc")
list(APPEND KYUII_ENGINE_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/win32/conproc.h")
set(KYUII_IMPLEMENTS_NET ON)
list(APPEND KYUII_NETWORK_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/win32/net_wins.c")
list(APPEND KYUII_NETWORK_LIBS "Ws2_32")
set(KYUII_IMPLEMENTS_CD ON)
list(APPEND KYUII_CLIENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/win32/cd_win.c")
set(KYUII_IMPLEMENTS_IN ON)
list(APPEND KYUII_CLIENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/win32/in_win.c")
set(KYUII_IMPLEMENTS_SND ON)
list(APPEND KYUII_CLIENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/win32/snd_win.c")
set(KYUII_IMPLEMENTS_VID ON)
set(KYUII_IMPLEMENTS_VID_DYN ON)
list(APPEND KYUII_CLIENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/win32/vid_dll.c" "${CMAKE_CURRENT_SOURCE_DIR}/win32/vid_menu.c")
elseif(NX_TARGET_PLATFORM_LINUX AND NX_TARGET_ARCHITECTURE_IA32)
set(KYUII_IMPLEMENTS_COMMON ON)
list(APPEND KYUII_COMMON_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/linux/glob.c" "${CMAKE_CURRENT_SOURCE_DIR}/linux/q_shlinux.c")
list(APPEND KYUII_COMMON_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/linux/glob.h")
set(KYUII_IMPLEMENTS_SYS ON)
set(KYUII_IMPLEMENTS_SYS_DYN ON)
list(APPEND KYUII_ENGINE_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/linux/sys_linux.c")
set(KYUII_IMPLEMENTS_NET ON)
list(APPEND KYUII_NETWORK_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/linux/net_udp.c")
set(KYUII_IMPLEMENTS_CD ON)
list(APPEND KYUII_CLIENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/linux/cd_linux.c")
set(KYUII_IMPLEMENTS_IN ON)
list(APPEND KYUII_CLIENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/linux/in_linux.c")
set(KYUII_IMPLEMENTS_SND ON)
list(APPEND KYUII_CLIENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/linux/snd_linux.c")
set(KYUII_IMPLEMENTS_VID ON)
set(KYUII_IMPLEMENTS_VID_DYN ON)
list(APPEND KYUII_CLIENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/linux/vid_menu.c" "${CMAKE_CURRENT_SOURCE_DIR}/linux/vid_so.c")
endif()
if(NOT KYUII_IMPLEMENTS_COMMON)
set(KYUII_IMPLEMENTS_COMMON ${KYUII_BUILD_UNIMPLEMENTED})
list(APPEND KYUII_COMMON_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/null/q_shnull.c")
endif()
if(NOT KYUII_IMPLEMENTS_SYS)
set(KYUII_IMPLEMENTS_SYS ${KYUII_BUILD_UNIMPLEMENTED})
list(APPEND KYUII_ENGINE_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/null/sys_null.c")
endif()
if(NOT KYUII_IMPLEMENTS_NET)
set(KYUII_IMPLEMENTS_NET ${KYUII_BUILD_UNIMPLEMENTED})
list(APPEND KYUII_NETWORK_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/null/net_null.c")
endif()
if(NOT KYUII_IMPLEMENTS_CD)
set(KYUII_IMPLEMENTS_CD ${KYUII_BUILD_UNIMPLEMENTED})
list(APPEND KYUII_CLIENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/null/cd_null.c")
endif()
if(NOT KYUII_IMPLEMENTS_IN)
set(KYUII_IMPLEMENTS_IN ${KYUII_BUILD_UNIMPLEMENTED})
list(APPEND KYUII_CLIENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/null/in_null.c")
endif()
if(NOT KYUII_IMPLEMENTS_SND)
set(KYUII_IMPLEMENTS_SND ${KYUII_BUILD_UNIMPLEMENTED})
list(APPEND KYUII_CLIENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/null/snddma_null.c")
endif()
if(NOT KYUII_IMPLEMENTS_VID)
set(KYUII_IMPLEMENTS_VID ${KYUII_BUILD_UNIMPLEMENTED})
list(APPEND KYUII_CLIENT_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/null/vid_null.c")
endif()
# Shared Functions - Engine, Game, Refresh
nx_generate_version_header(${PROJECT_NAME} QUERY_GIT)
list(APPEND KYUII_SHARED_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/game/q_shared.c")
list(APPEND KYUII_SHARED_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/game/q_shared.h" "${CMAKE_CURRENT_BINARY_DIR}/kyuii_version.h")
add_library(Shared INTERFACE)
target_compile_definitions(Shared INTERFACE C_ONLY ${NX_TARGET_BUILD_MACRO} ${NX_TARGET_ARCHITECTURE_MACRO} ${NX_TARGET_PLATFORM_MACRO})
target_include_directories(Shared INTERFACE "${CMAKE_CURRENT_BINARY_DIR}")
if(NX_TARGET_PLATFORM_LINUX)
target_compile_definitions(Shared INTERFACE stricmp=strcasecmp)
target_link_libraries(Shared INTERFACE m)
endif()
target_sources(Shared INTERFACE ${KYUII_SHARED_SOURCE})
add_library(KyuII::Shared ALIAS Shared)
# Common Functions - Engine, Refresh
add_library(Common INTERFACE)
target_link_libraries(Common INTERFACE KyuII::Shared ${KYUII_COMMON_LIBS})
target_sources(Common INTERFACE ${KYUII_COMMON_SOURCE})
add_library(KyuII::Common ALIAS Common)
# Game API - Engine, Game
set(gameapi_VERSION 3.21)
nx_generate_version_header(gameapi)
nx_generate_export_header(gameapi STATIC_DEFINE GAME_HARD_LINKED)
list(APPEND KYUII_GAMEAPI_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/game/m_flash.c")
list(APPEND KYUII_GAMEAPI_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/game/game.h" "${CMAKE_CURRENT_BINARY_DIR}/gameapi_export.h"
"${CMAKE_CURRENT_BINARY_DIR}/gameapi_version.h")
add_library(GameAPI INTERFACE)
target_link_libraries(GameAPI INTERFACE KyuII::Shared)
target_sources(GameAPI INTERFACE ${KYUII_GAMEAPI_SOURCE})
add_library(KyuII::GameAPI ALIAS GameAPI)
# Refresh API - Engine, Refresh
set(refapi_VERSION 3.21)
nx_generate_version_header(refapi)
nx_generate_export_header(refapi STATIC_DEFINE REF_HARD_LINKED)
list(APPEND KYUII_REFAPI_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/client/ref.h" "${CMAKE_CURRENT_BINARY_DIR}/refapi_export.h"
"${CMAKE_CURRENT_BINARY_DIR}/refapi_version.h")
add_library(RefAPI INTERFACE)
target_link_libraries(RefAPI INTERFACE KyuII::Common)
target_sources(RefAPI INTERFACE ${KYUII_REFAPI_SOURCE})
add_library(KyuII::RefAPI ALIAS RefAPI)
# Game Libraries
cmake_dependent_option(KYUII_USE_DYNAMIC_GAME "Use Dynamic Game Modules" ON "KYUII_IMPLEMENTS_SYS_DYN" OFF)
set(KYUII_DEFAULT_GAME ON)
cmake_dependent_option(KYUII_BUILD_GAMEQ2 "Build Quake II Game Module" ON "KYUII_DEFAULT_GAME" OFF)
if(KYUII_BUILD_GAMEQ2 AND NOT KYUII_USE_DYNAMIC_GAME)
set(KYUII_DEFAULT_GAME OFF)
endif()
cmake_dependent_option(KYUII_BUILD_GAMECTF "Build CTF Game Module" ON "KYUII_DEFAULT_GAME" OFF)
if(KYUII_BUILD_GAMECTF AND NOT KYUII_USE_DYNAMIC_GAME)
set(KYUII_DEFAULT_GAME OFF)
endif()
if(KYUII_BUILD_GAMEQ2)
add_subdirectory(game)
endif()
if(KYUII_BUILD_GAMECTF)
add_subdirectory(ctf)
endif()
# Refresh Libraries
find_package(OpenGL)
cmake_dependent_option(KYUII_USE_DYNAMIC_REFRESH "Use Dynamic Refresh Modules" ON "KYUII_IMPLEMENTS_VID_DYN" OFF)
set(KYUII_DEFAULT_REFRESH ON)
cmake_dependent_option(KYUII_BUILD_REFGL "Build OpenGL Refresh Module" ${OPENGL_FOUND} "KYUII_DEFAULT_REFRESH" OFF)
if(KYUII_BUILD_REFGL AND NOT KYUII_USE_DYNAMIC_REFRESH)
set(KYUII_DEFAULT_REFRESH OFF)
endif()
cmake_dependent_option(KYUII_BUILD_REFSOFT "Build Software Refresh Module" ON "KYUII_DEFAULT_REFRESH" OFF)
if(KYUII_BUILD_REFSOFT AND NOT KYUII_USE_DYNAMIC_REFRESH)
set(KYUII_DEFAULT_REFRESH OFF)
endif()
if(KYUII_BUILD_REFGL)
add_subdirectory(ref_gl)
endif()
if(KYUII_BUILD_REFSOFT)
add_subdirectory(ref_soft)
endif()
# Common Engine
set(KYUII_DEDICATED_ONLY OFF)
set(KYUII_NETCLIENT_ONLY OFF)
set(KYUII_LOCAL_ONLY OFF)
if(NOT KYUII_IMPLEMENTS_VID_DYN AND NOT TARGET KyuII::RefHL)
set(KYUII_DEDICATED_ONLY ON)
endif()
if(NOT KYUII_IMPLEMENTS_SYS_DYN AND NOT TARGET KyuII::GameHL)
set(KYUII_NETCLIENT_ONLY ON)
endif()
if(NOT KYUII_IMPLEMENTS_NET
AND NOT KYUII_NETCLIENT_ONLY
AND NOT KYUII_DEDICATED_ONLY)
set(KYUII_LOCAL_ONLY ON)
endif()
if(NOT KYUII_IMPLEMENTS_SYS OR NOT KYUII_IMPLEMENTS_COMMON)
set(KYUII_IMPLEMENTS_SYS OFF)
set(KYUII_IMPLEMENTS_COMMON OFF)
endif()
cmake_dependent_option(KYUII_BUILD_KYUII "Build Full Engine" ON
"NOT KYUII_DEDICATED_ONLY;NOT KYUII_NETCLIENT_ONLY;KYUII_IMPLEMENTS_COMMON;KYUII_IMPLEMENTS_IN" OFF)
cmake_dependent_option(
KYUII_BUILD_KYUDEMO "Build Demo Engine" ${KYUII_LOCAL_ONLY}
"NOT KYUII_DEDICATED_ONLY;NOT KYUII_NETCLIENT_ONLY;KYUII_BUILD_GAMEQ2;KYUII_IMPLEMENTS_COMMON;KYUII_IMPLEMENTS_IN" OFF)
cmake_dependent_option(
KYUII_BUILD_KYUARENA "Build Multiplayer Engine" ON
"NOT KYUII_DEDICATED_ONLY;NOT KYUII_NETCLIENT_ONLY;KYUII_BUILD_GAMECTF;KYUII_IMPLEMENTS_COMMON;KYUII_IMPLEMENTS_IN" OFF)
cmake_dependent_option(KYUII_BUILD_KYUNODE "Build Dedicated Server" ON
"NOT KYUII_NETCLIENT_ONLY;KYUII_IMPLEMENTS_COMMON;KYUII_IMPLEMENTS_NET" OFF)
cmake_dependent_option(KYUII_BUILD_KYUNET "Build Dedicated Client" ${KYUII_NETCLIENT_ONLY}
"NOT KYUII_DEDICATED_ONLY;KYUII_IMPLEMENTS_COMMON;KYUII_IMPLEMENTS_NET;KYUII_IMPLEMENTS_IN" OFF)
list(
APPEND
KYUII_ENGINE_SOURCE
"${CMAKE_CURRENT_SOURCE_DIR}/qcommon/cmd.c"
"${CMAKE_CURRENT_SOURCE_DIR}/qcommon/cmodel.c"
"${CMAKE_CURRENT_SOURCE_DIR}/qcommon/common.c"
"${CMAKE_CURRENT_SOURCE_DIR}/qcommon/crc.c"
"${CMAKE_CURRENT_SOURCE_DIR}/qcommon/cvar.c"
"${CMAKE_CURRENT_SOURCE_DIR}/qcommon/files.c"
"${CMAKE_CURRENT_SOURCE_DIR}/qcommon/md4.c"
"${CMAKE_CURRENT_SOURCE_DIR}/qcommon/net_chan.c"
"${CMAKE_CURRENT_SOURCE_DIR}/qcommon/pmove.c")
list(APPEND KYUII_ENGINE_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/qcommon/crc.h" "${CMAKE_CURRENT_SOURCE_DIR}/qcommon/qcommon.h"
"${CMAKE_CURRENT_SOURCE_DIR}/qcommon/qfiles.h")
list(APPEND KYUII_NETWORK_NULL "${CMAKE_CURRENT_SOURCE_DIR}/null/net_null.c")
list(
APPEND
KYUII_SERVER_SOURCE
"${CMAKE_CURRENT_SOURCE_DIR}/server/sv_ccmds.c"
"${CMAKE_CURRENT_SOURCE_DIR}/server/sv_ents.c"
"${CMAKE_CURRENT_SOURCE_DIR}/server/sv_game.c"
"${CMAKE_CURRENT_SOURCE_DIR}/server/sv_init.c"
"${CMAKE_CURRENT_SOURCE_DIR}/server/sv_main.c"
"${CMAKE_CURRENT_SOURCE_DIR}/server/sv_send.c"
"${CMAKE_CURRENT_SOURCE_DIR}/server/sv_user.c"
"${CMAKE_CURRENT_SOURCE_DIR}/server/sv_world.c")
list(APPEND KYUII_SERVER_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/server/server.h")
list(APPEND KYUII_SERVER_NULL "${CMAKE_CURRENT_SOURCE_DIR}/server/sv_null.c")
list(
APPEND
KYUII_CLIENT_SOURCE
"${CMAKE_CURRENT_SOURCE_DIR}/client/cl_cin.c"
"${CMAKE_CURRENT_SOURCE_DIR}/client/cl_ents.c"
"${CMAKE_CURRENT_SOURCE_DIR}/client/cl_fx.c"
"${CMAKE_CURRENT_SOURCE_DIR}/client/cl_input.c"
"${CMAKE_CURRENT_SOURCE_DIR}/client/cl_inv.c"
"${CMAKE_CURRENT_SOURCE_DIR}/client/cl_main.c"
"${CMAKE_CURRENT_SOURCE_DIR}/client/cl_newfx.c"
"${CMAKE_CURRENT_SOURCE_DIR}/client/cl_parse.c"
"${CMAKE_CURRENT_SOURCE_DIR}/client/cl_pred.c"
"${CMAKE_CURRENT_SOURCE_DIR}/client/cl_scrn.c"
"${CMAKE_CURRENT_SOURCE_DIR}/client/cl_tent.c"
"${CMAKE_CURRENT_SOURCE_DIR}/client/cl_view.c"
"${CMAKE_CURRENT_SOURCE_DIR}/client/console.c"
"${CMAKE_CURRENT_SOURCE_DIR}/client/keys.c"
"${CMAKE_CURRENT_SOURCE_DIR}/client/menu.c"
"${CMAKE_CURRENT_SOURCE_DIR}/client/qmenu.c"
"${CMAKE_CURRENT_SOURCE_DIR}/client/snd_dma.c"
"${CMAKE_CURRENT_SOURCE_DIR}/client/snd_mem.c"
"${CMAKE_CURRENT_SOURCE_DIR}/client/snd_mix.c"
"${CMAKE_CURRENT_SOURCE_DIR}/client/x86.c")
list(
APPEND
KYUII_CLIENT_HEADER
"${CMAKE_CURRENT_SOURCE_DIR}/client/adivtab.h"
"${CMAKE_CURRENT_SOURCE_DIR}/client/anorms.h"
"${CMAKE_CURRENT_SOURCE_DIR}/client/asm_i386.h"
"${CMAKE_CURRENT_SOURCE_DIR}/client/block16.h"
"${CMAKE_CURRENT_SOURCE_DIR}/client/block8.h"
"${CMAKE_CURRENT_SOURCE_DIR}/client/cdaudio.h"
"${CMAKE_CURRENT_SOURCE_DIR}/client/client.h"
"${CMAKE_CURRENT_SOURCE_DIR}/client/console.h"
"${CMAKE_CURRENT_SOURCE_DIR}/client/input.h"
"${CMAKE_CURRENT_SOURCE_DIR}/client/keys.h"
"${CMAKE_CURRENT_SOURCE_DIR}/client/qmenu.h"
"${CMAKE_CURRENT_SOURCE_DIR}/client/screen.h"
"${CMAKE_CURRENT_SOURCE_DIR}/client/snd_loc.h"
"${CMAKE_CURRENT_SOURCE_DIR}/client/sound.h"
"${CMAKE_CURRENT_SOURCE_DIR}/client/vid.h")
list(APPEND KYUII_CLIENT_NULL "${CMAKE_CURRENT_SOURCE_DIR}/null/cd_null.c" "${CMAKE_CURRENT_SOURCE_DIR}/null/cl_null.c"
"${CMAKE_CURRENT_SOURCE_DIR}/null/in_null.c" "${CMAKE_CURRENT_SOURCE_DIR}/null/snddma_null.c")
if(KYUII_USE_DYNAMIC_GAME OR KYUII_USE_DYNAMIC_REFRESH)
list(APPEND KYUII_ENGINE_LIBS ${CMAKE_DL_LIBS})
endif()
if(KYUII_USE_DYNAMIC_GAME)
list(APPEND KYUII_SERVER_LIBS KyuII::GameAPI)
else()
list(APPEND KYUII_SERVER_LIBS KyuII::GameHL)
endif()
if(KYUII_USE_DYNAMIC_REFRESH)
list(APPEND KYUII_CLIENT_LIBS KyuII::RefAPI)
else()
list(APPEND KYUII_CLIENT_LIBS KyuII::RefHL)
endif()
if(KYUII_BUILD_KYUII)
add_executable(KyuII WIN32 ${KYUII_ENGINE_SOURCE} ${KYUII_NETWORK_SOURCE} ${KYUII_CLIENT_SOURCE} ${KYUII_SERVER_SOURCE})
target_link_libraries(KyuII PRIVATE ${KYUII_ENGINE_LIBS} ${KYUII_NETWORK_LIBS} ${KYUII_CLIENT_LIBS} ${KYUII_SERVER_LIBS})
install(TARGETS KyuII RUNTIME DESTINATION kyuii)
nx_add_runtime_executable(KyuII)
endif()
if(KYUII_BUILD_KYUDEMO)
add_executable(KyuDemo WIN32 ${KYUII_ENGINE_SOURCE} ${KYUII_NETWORK_NULL} ${KYUII_CLIENT_SOURCE} ${KYUII_SERVER_SOURCE})
target_compile_definitions(KyuDemo PRIVATE SINGLEPLAYER_ONLY)
target_link_libraries(KyuDemo PRIVATE ${KYUII_ENGINE_LIBS} ${KYUII_CLIENT_LIBS} KyuII::GameQ2_HL)
install(TARGETS KyuDemo RUNTIME DESTINATION kyuii)
nx_add_runtime_executable(KyuDemo)
endif()
if(KYUII_BUILD_KYUARENA)
add_executable(KyuArena WIN32 ${KYUII_ENGINE_SOURCE} ${KYUII_NETWORK_SOURCE} ${KYUII_CLIENT_SOURCE} ${KYUII_SERVER_SOURCE})
target_compile_definitions(KyuArena PRIVATE MULTIPLAYER_ONLY)
target_link_libraries(KyuArena PRIVATE ${KYUII_ENGINE_LIBS} ${KYUII_NETWORK_LIBS} ${KYUII_CLIENT_LIBS} KyuII::GameCTF_HL)
install(TARGETS KyuArena RUNTIME DESTINATION kyuii)
nx_add_runtime_executable(KyuArena)
endif()
if(KYUII_BUILD_KYUNODE)
add_executable(KyuNode WIN32 ${KYUII_ENGINE_SOURCE} ${KYUII_NETWORK_SOURCE} ${KYUII_CLIENT_NULL} ${KYUII_SERVER_SOURCE})
target_compile_definitions(KyuNode PRIVATE DEDICATED_ONLY)
target_link_libraries(KyuNode PRIVATE ${KYUII_ENGINE_LIBS} ${KYUII_NETWORK_LIBS} KyuII::Common ${KYUII_SERVER_LIBS})
install(TARGETS KyuNode RUNTIME DESTINATION kyuii)
nx_add_runtime_executable(KyuNode)
endif()
if(KYUII_BUILD_KYUNET)
add_executable(KyuNet WIN32 ${KYUII_ENGINE_SOURCE} ${KYUII_NETWORK_SOURCE} ${KYUII_CLIENT_SOURCE} ${KYUII_SERVER_NULL})
target_compile_definitions(KyuNet PRIVATE NETCLIENT_ONLY)
target_link_libraries(KyuNet PRIVATE ${KYUII_ENGINE_LIBS} ${KYUII_NETWORK_LIBS} ${KYUII_CLIENT_LIBS} KyuII::GameAPI)
install(TARGETS KyuNet RUNTIME DESTINATION kyuii)
nx_add_runtime_executable(KyuNet)
endif()
nx_get_runtime_dependencies()
nx_scope_project()