160 lines
3.9 KiB
CMake
160 lines
3.9 KiB
CMake
cmake_minimum_required(VERSION 3.10)
|
|
|
|
|
|
|
|
# Project setup
|
|
|
|
project(newserv)
|
|
|
|
set(CMAKE_CXX_STANDARD 20)
|
|
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()
|
|
|
|
set(LOCAL_INCLUDE_DIR "/usr/local/include")
|
|
set(LOCAL_LIB_DIR "/usr/local/lib")
|
|
list(APPEND CMAKE_PREFIX_PATH ${LOCAL_LIB_DIR})
|
|
include_directories(${LOCAL_INCLUDE_DIR})
|
|
link_directories(${LOCAL_LIB_DIR})
|
|
|
|
|
|
|
|
# Library search
|
|
|
|
find_path (LIBEVENT_INCLUDE_DIR NAMES event.h)
|
|
find_library (LIBEVENT_LIBRARY NAMES event)
|
|
find_library (LIBEVENT_CORE NAMES event_core)
|
|
set (LIBEVENT_INCLUDE_DIRS ${LIBEVENT_INCLUDE_DIR})
|
|
set (LIBEVENT_LIBRARIES
|
|
${LIBEVENT_LIBRARY}
|
|
${LIBEVENT_CORE})
|
|
|
|
find_package(phosg REQUIRED)
|
|
find_package(Iconv REQUIRED)
|
|
find_package(resource_file QUIET)
|
|
|
|
|
|
|
|
# Executable definition
|
|
|
|
set(SOURCES
|
|
src/AFSArchive.cc
|
|
src/BattleParamsIndex.cc
|
|
src/BMLArchive.cc
|
|
src/CatSession.cc
|
|
src/Channel.cc
|
|
src/ChatCommands.cc
|
|
src/ChoiceSearch.cc
|
|
src/Client.cc
|
|
src/CommonItemSet.cc
|
|
src/Compression.cc
|
|
src/DCSerialNumbers.cc
|
|
src/DNSServer.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/FileContentsCache.cc
|
|
src/FunctionCompiler.cc
|
|
src/GSLArchive.cc
|
|
src/GVMEncoder.cc
|
|
src/IPFrameInfo.cc
|
|
src/IPStackSimulator.cc
|
|
src/ItemCreator.cc
|
|
src/ItemData.cc
|
|
src/ItemNameIndex.cc
|
|
src/ItemParameterTable.cc
|
|
src/Items.cc
|
|
src/LevelTable.cc
|
|
src/License.cc
|
|
src/Lobby.cc
|
|
src/Loggers.cc
|
|
src/Main.cc
|
|
src/Map.cc
|
|
src/Menu.cc
|
|
src/NetworkAddresses.cc
|
|
src/PatchFileIndex.cc
|
|
src/Player.cc
|
|
src/PlayerSubordinates.cc
|
|
src/ProxyCommands.cc
|
|
src/ProxyServer.cc
|
|
src/PSOEncryption.cc
|
|
src/PSOGCObjectGraph.cc
|
|
src/PSOProtocol.cc
|
|
src/Quest.cc
|
|
src/QuestScript.cc
|
|
src/RareItemSet.cc
|
|
src/ReceiveCommands.cc
|
|
src/ReceiveSubcommands.cc
|
|
src/ReplaySession.cc
|
|
src/SaveFileFormats.cc
|
|
src/SendCommands.cc
|
|
src/Server.cc
|
|
src/ServerShell.cc
|
|
src/ServerState.cc
|
|
src/Shell.cc
|
|
src/StaticGameData.cc
|
|
src/TeamIndex.cc
|
|
src/Text.cc
|
|
src/TextArchive.cc
|
|
src/UnicodeTextSet.cc
|
|
src/Version.cc
|
|
src/WordSelectTable.cc
|
|
)
|
|
|
|
if(resource_file_FOUND)
|
|
set(SOURCES ${SOURCES} src/ARCodeTranslator.cc)
|
|
endif()
|
|
|
|
add_executable(newserv ${SOURCES})
|
|
target_include_directories(newserv PUBLIC ${LIBEVENT_INCLUDE_DIR} ${Iconv_INCLUDE_DIRS})
|
|
target_link_libraries(newserv phosg ${LIBEVENT_LIBRARIES} ${Iconv_LIBRARIES} pthread)
|
|
|
|
if(resource_file_FOUND)
|
|
target_compile_definitions(newserv PUBLIC HAVE_RESOURCE_FILE)
|
|
target_link_libraries(newserv resource_file)
|
|
message(STATUS "libresource_file found; enabling patch support")
|
|
else()
|
|
message(WARNING "libresource_file not found; disabling patch support")
|
|
endif()
|
|
|
|
|
|
|
|
# Test configuration
|
|
|
|
enable_testing()
|
|
|
|
file(GLOB LogTestCases ${CMAKE_SOURCE_DIR}/tests/*.test.txt)
|
|
|
|
foreach(LogTestCase IN ITEMS ${LogTestCases})
|
|
add_test(
|
|
NAME ${LogTestCase}
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
|
COMMAND ${CMAKE_BINARY_DIR}/newserv --replay-log=${LogTestCase} --config=${CMAKE_SOURCE_DIR}/tests/config.json)
|
|
endforeach()
|
|
|
|
file(GLOB ScriptTestCases ${CMAKE_SOURCE_DIR}/tests/*.test.sh)
|
|
|
|
foreach(ScriptTestCase IN ITEMS ${ScriptTestCases})
|
|
add_test(
|
|
NAME ${ScriptTestCase}
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
|
COMMAND ${ScriptTestCase} ${CMAKE_BINARY_DIR}/newserv)
|
|
endforeach()
|
|
|
|
# Installation configuration
|
|
|
|
install(TARGETS newserv DESTINATION bin)
|