9150e85442
# Conflicts: # src/Client.cc # src/IPStackSimulator.cc # src/ReceiveCommands.cc # src/ReceiveSubcommands.cc # src/SendCommands.cc # src/ServerState.cc # src/ServerState.hh
182 lines
4.8 KiB
CMake
182 lines
4.8 KiB
CMake
cmake_minimum_required(VERSION 3.22)
|
|
set(CMAKE_POLICY_DEFAULT_CMP0110 NEW)
|
|
|
|
|
|
|
|
# Project setup
|
|
|
|
project(newserv)
|
|
|
|
set(CMAKE_CXX_STANDARD 23)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED True)
|
|
if (MSVC)
|
|
add_compile_options(/W4 /WX)
|
|
else()
|
|
add_compile_options(-Wall -Wextra -Werror -Wno-address-of-packed-member)
|
|
endif()
|
|
|
|
|
|
|
|
# Library search
|
|
|
|
find_path(ASIO_INCLUDE_DIR NAMES asio.hpp HINTS "${WINDOWS_ENV}/include" REQUIRED)
|
|
if(WIN32)
|
|
find_path(Iconv_INCLUDE_DIRS NAMES iconv.h HINTS "${WINDOWS_ENV}/include" REQUIRED)
|
|
find_library(Iconv_LIBRARIES NAMES iconv HINTS "${WINDOWS_ENV}/lib" REQUIRED)
|
|
else()
|
|
find_package(Iconv REQUIRED)
|
|
endif()
|
|
find_package(phosg REQUIRED)
|
|
find_package(resource_file REQUIRED)
|
|
|
|
|
|
|
|
# Git metadata
|
|
|
|
add_custom_command(
|
|
OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/src/Revision.cc ${CMAKE_CURRENT_SOURCE_DIR}/src/__Revision__.cc
|
|
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/src/Revision-generate.sh ${CMAKE_CURRENT_SOURCE_DIR}/src/Revision.cc
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src
|
|
)
|
|
add_custom_target(
|
|
newserv-Revision-cc
|
|
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/Revision.cc ${CMAKE_CURRENT_SOURCE_DIR}/src/__Revision__.cc
|
|
)
|
|
|
|
|
|
|
|
# Executable definition
|
|
|
|
set(SOURCES
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src/Revision.cc
|
|
src/Account.cc
|
|
src/AccountSync.cc
|
|
src/TeamSync.cc
|
|
src/AddressTranslator.cc
|
|
src/AFSArchive.cc
|
|
src/AsyncHTTPServer.cc
|
|
src/AsyncUtils.cc
|
|
src/BattleParamsIndex.cc
|
|
src/BMLArchive.cc
|
|
src/Channel.cc
|
|
src/ChatCommands.cc
|
|
src/ChoiceSearch.cc
|
|
src/Client.cc
|
|
src/ClientFunctionIndex.cc
|
|
src/CommandCensorData.cc
|
|
src/CommonItemSet.cc
|
|
src/Compression.cc
|
|
src/DCSerialNumbers.cc
|
|
src/DNSServer.cc
|
|
src/DOLFileIndex.cc
|
|
src/DataIndex.cc
|
|
src/DownloadSession.cc
|
|
src/EnemyType.cc
|
|
src/Episode3/AssistServer.cc
|
|
src/Episode3/BattleRecord.cc
|
|
src/Episode3/Card.cc
|
|
src/Episode3/CardSpecial.cc
|
|
src/Episode3/DataIndexes.cc
|
|
src/Episode3/DeckState.cc
|
|
src/Episode3/MapState.cc
|
|
src/Episode3/PlayerState.cc
|
|
src/Episode3/PlayerStateSubordinates.cc
|
|
src/Episode3/RulerServer.cc
|
|
src/Episode3/Server.cc
|
|
src/Episode3/Tournament.cc
|
|
src/GameServer.cc
|
|
src/GSLArchive.cc
|
|
src/HTTPServer.cc
|
|
src/ImageEncoder.cc
|
|
src/IntegralExpression.cc
|
|
src/IPFrameInfo.cc
|
|
src/IPStackSimulator.cc
|
|
src/IPV4RangeSet.cc
|
|
src/ItemCreator.cc
|
|
src/ItemData.cc
|
|
src/ItemNameIndex.cc
|
|
src/ItemParameterTable.cc
|
|
src/Items.cc
|
|
src/ItemTranslationTable.cc
|
|
src/LevelTable.cc
|
|
src/Lobby.cc
|
|
src/Loggers.cc
|
|
src/MagMetadataTable.cc
|
|
src/Main.cc
|
|
src/Map.cc
|
|
src/Menu.cc
|
|
src/NetworkAddresses.cc
|
|
src/PatchDownloadSession.cc
|
|
src/PatchFileIndex.cc
|
|
src/PlayerInventory.cc
|
|
src/PlayerSubordinates.cc
|
|
src/PPKArchive.cc
|
|
src/ProxyCommands.cc
|
|
src/ProxySession.cc
|
|
src/PSOEncryption.cc
|
|
src/PSOGCObjectGraph.cc
|
|
src/PSOProtocol.cc
|
|
src/Quest.cc
|
|
src/QuestMetadata.cc
|
|
src/QuestScript.cc
|
|
src/RareItemSet.cc
|
|
src/ReceiveCommands.cc
|
|
src/ReceiveSubcommands.cc
|
|
src/ReplaySession.cc
|
|
src/SaveFileFormats.cc
|
|
src/SendCommands.cc
|
|
src/ServerShell.cc
|
|
src/ServerState.cc
|
|
src/ShellCommands.cc
|
|
src/ShopRandomSets.cc
|
|
src/SignalWatcher.cc
|
|
src/StaticGameData.cc
|
|
src/TeamIndex.cc
|
|
src/TekkerAdjustmentSet.cc
|
|
src/Text.cc
|
|
src/TextIndex.cc
|
|
src/Version.cc
|
|
src/WordSelectTable.cc
|
|
)
|
|
|
|
add_executable(newserv ${SOURCES})
|
|
target_include_directories(newserv PUBLIC ${ASIO_INCLUDE_DIR} ${Iconv_INCLUDE_DIRS})
|
|
target_link_libraries(newserv phosg::phosg ${Iconv_LIBRARIES} resource_file::resource_file)
|
|
if (WIN32)
|
|
target_compile_definitions(newserv PUBLIC WINVER=0x0A00 _WIN32_WINNT=0x0A00)
|
|
target_compile_options(newserv PRIVATE -Wa,-mbig-obj -Wno-mismatched-new-delete)
|
|
target_link_options(newserv PRIVATE -static -static-libgcc -static-libstdc++)
|
|
target_link_libraries(newserv ws2_32 mswsock bcrypt iphlpapi)
|
|
endif()
|
|
add_dependencies(newserv newserv-Revision-cc)
|
|
|
|
# target_compile_options(newserv PRIVATE -fsanitize=address)
|
|
# target_link_options(newserv PRIVATE -fsanitize=address)
|
|
|
|
|
|
|
|
# Test configuration
|
|
|
|
enable_testing()
|
|
|
|
file(GLOB LOG_TEST_CASES ${CMAKE_SOURCE_DIR}/tests/*.test.txt)
|
|
list(TRANSFORM LOG_TEST_CASES PREPEND "--replay-log=" OUTPUT_VARIABLE LOG_REPLAY_ARGS)
|
|
add_test(
|
|
NAME "log-replays"
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
|
COMMAND ${CMAKE_BINARY_DIR}/newserv --parallel --config=${CMAKE_SOURCE_DIR}/tests/config.json ${LOG_REPLAY_ARGS})
|
|
|
|
file(GLOB SCRIPT_TEST_CASES ${CMAKE_SOURCE_DIR}/tests/*.test.sh)
|
|
foreach(SCRIPT_TEST_CASE IN ITEMS ${SCRIPT_TEST_CASES})
|
|
add_test(
|
|
NAME ${SCRIPT_TEST_CASE}
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
|
COMMAND ${SCRIPT_TEST_CASE} ${CMAKE_BINARY_DIR}/newserv)
|
|
endforeach()
|
|
|
|
|
|
|
|
# Installation configuration
|
|
|
|
install(TARGETS newserv DESTINATION bin)
|