cmake_minimum_required(VERSION 3.20) project(CommonwealthOnlineHost) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) find_package(Qt6 COMPONENTS Core Gui Widgets Network Concurrent REQUIRED) find_program(DOTNET_EXECUTABLE dotnet REQUIRED) set(PROJECT_SOURCES src/main.cpp src/MainWindow.h src/MainWindow.cpp src/ConfigDialog.h src/ConfigDialog.cpp src/ServerProcess.h src/ServerProcess.cpp src/resources/resources.qrc ) add_executable(CommonwealthOnlineHost ${PROJECT_SOURCES}) target_link_libraries(CommonwealthOnlineHost Qt6::Core Qt6::Gui Qt6::Widgets Qt6::Network Qt6::Concurrent) if(WIN32) set_target_properties(CommonwealthOnlineHost PROPERTIES WIN32_EXECUTABLE ON VS_DPI_AWARE "ON") set(CO_SERVER_RID "win-x64") set(CO_SERVER_EXECUTABLE_SUFFIX ".exe") else() set(CO_SERVER_RID "linux-x64") set(CO_SERVER_EXECUTABLE_SUFFIX "") endif() set_target_properties(CommonwealthOnlineHost PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") set(CO_SERVER_SOURCE_DIR "${CMAKE_SOURCE_DIR}/server") set(CO_SERVER_PROJECT "${CO_SERVER_SOURCE_DIR}/CommonwealthOnline.Server.csproj") set(CO_SERVER_PUBLISH_DIR "${CMAKE_BINARY_DIR}/server-publish/${CO_SERVER_RID}") set(CO_SERVER_STAGE_DIR "$/server") set(CO_SERVER_STAGE_CONFIG "${CO_SERVER_STAGE_DIR}/commonwealth-server.json") if(NOT EXISTS "${CO_SERVER_PROJECT}") message(FATAL_ERROR "Bundled C# server project not found at ${CO_SERVER_PROJECT}") endif() add_custom_command(TARGET CommonwealthOnlineHost POST_BUILD COMMAND ${CMAKE_COMMAND} -E rm -rf "${CO_SERVER_PUBLISH_DIR}" COMMAND ${DOTNET_EXECUTABLE} publish "${CO_SERVER_PROJECT}" -c Release -r ${CO_SERVER_RID} --self-contained true -p:PublishSingleFile=true -p:DebugType=None -p:DebugSymbols=false -o "${CO_SERVER_PUBLISH_DIR}" --nologo COMMAND ${CMAKE_COMMAND} -DCO_SERVER_SOURCE_DIR=${CO_SERVER_SOURCE_DIR} -DCO_SERVER_PUBLISH_DIR=${CO_SERVER_PUBLISH_DIR} -DCO_SERVER_STAGE_DIR=${CO_SERVER_STAGE_DIR} -DCO_SERVER_STAGE_CONFIG=${CO_SERVER_STAGE_CONFIG} -DCO_SERVER_EXECUTABLE_SUFFIX=${CO_SERVER_EXECUTABLE_SUFFIX} -P "${CMAKE_SOURCE_DIR}/cmake/stage_server.cmake" COMMENT "Publishing and staging C# Commonwealth Online server" VERBATIM )