Files
netcode-demo/CMakeLists.txt
2026-01-11 01:37:39 +04:00

154 lines
4.8 KiB
CMake

cmake_minimum_required(VERSION 4.2)
project(netcode_demo LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
# ENet enable shared
set(ENET_SHARED ON CACHE BOOL "Build enet as a shared library" FORCE)
set(ENET_STATIC OFF CACHE BOOL "Build enet as a static library" FORCE)
# Build flags
option(BUILD_ALL "Build everything" ON)
option(BUILD_COMMON "Build common" ON)
option(BUILD_CLIENT "Build client" ON)
option(BUILD_SERVER "Build server" ON)
option(BUILD_APP "Build app" ON)
option(BUILD_SAPP "Build sapp" ON)
find_package(SFML 3.0 COMPONENTS System Window Graphics Network REQUIRED)
#add_compile_definitions(ENET_IPV6=1)
add_subdirectory(extern/enet)
#target_compile_definitions(enet_shared PUBLIC ENET_IPV6=1)
# ---------------------------
# Common library
# ---------------------------
if(BUILD_COMMON OR BUILD_ALL)
add_library(common SHARED
common/src/common.cpp
)
set_target_properties(common PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON)
target_include_directories(common PUBLIC common/include)
target_link_libraries(common PUBLIC enet::enet_shared)
if(WIN32)
target_link_libraries(common PUBLIC ws2_32 winmm)
endif()
endif()
# ---------------------------
# App library
# ---------------------------
if(BUILD_APP OR BUILD_ALL)
add_library(app SHARED
app/src/app_entry.cpp
app/include/app/network_simulation.hpp
)
set_target_properties(app PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON)
target_include_directories(app PUBLIC app/include)
if(BUILD_COMMON OR BUILD_ALL)
target_link_libraries(app PUBLIC common)
endif()
endif()
# ---------------------------
# Sapp library
# ---------------------------
if(BUILD_SAPP OR BUILD_ALL)
add_library(sapp SHARED
sapp/src/sapp_entry.cpp
)
set_target_properties(sapp PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON)
target_include_directories(sapp PUBLIC sapp/include)
if(BUILD_COMMON OR BUILD_ALL)
target_link_libraries(sapp PUBLIC common)
endif()
endif()
# ---------------------------
# Client executable
# ---------------------------
if(BUILD_CLIENT OR BUILD_ALL)
add_executable(client client/cl_main.cpp
)
target_include_directories(client PRIVATE client)
target_link_libraries(client PUBLIC
$<$<BOOL:${BUILD_COMMON}>:common>
$<$<BOOL:${BUILD_APP}>:app>
SFML::System SFML::Window SFML::Graphics SFML::Network enet::enet_shared
)
if(WIN32)
target_link_libraries(client PRIVATE ws2_32 winmm)
endif()
set_target_properties(client PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/client/$<CONFIG>
)
if(WIN32)
add_custom_command(TARGET client POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:common> $<TARGET_FILE_DIR:client>
COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:app> $<TARGET_FILE_DIR:client>
COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:enet_shared> $<TARGET_FILE_DIR:client>
COMMAND_EXPAND_LISTS
)
endif()
endif()
# ---------------------------
# Server executable
# ---------------------------
if(BUILD_SERVER OR BUILD_ALL)
add_executable(server server/sv_main.cpp)
target_include_directories(server PRIVATE server)
target_link_libraries(server PUBLIC
$<$<BOOL:${BUILD_COMMON}>:common>
$<$<BOOL:${BUILD_SAPP}>:sapp>
enet::enet_shared
)
if(WIN32)
target_link_libraries(server PRIVATE ws2_32 winmm)
endif()
set_target_properties(server PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/server/$<CONFIG>
)
if(WIN32)
add_custom_command(TARGET server POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:common> $<TARGET_FILE_DIR:server>
COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:sapp> $<TARGET_FILE_DIR:server>
COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:enet_shared> $<TARGET_FILE_DIR:server>
COMMAND_EXPAND_LISTS
)
endif()
endif()
# ---------------------------
# Main target
# ---------------------------
add_custom_target(netcode_demo ALL
COMMENT "Build all enabled subprojects according to BUILD_* flags"
)
if(BUILD_COMMON OR BUILD_ALL)
add_dependencies(netcode_demo common)
endif()
if(BUILD_APP OR BUILD_ALL)
add_dependencies(netcode_demo app)
endif()
if(BUILD_SAPP OR BUILD_ALL)
add_dependencies(netcode_demo sapp)
endif()
if(BUILD_CLIENT OR BUILD_ALL)
add_dependencies(netcode_demo client)
endif()
if(BUILD_SERVER OR BUILD_ALL)
add_dependencies(netcode_demo server)
endif()