- Update CMakeLists.txt to install the template configuration file as an example, ensuring it is available for reference. - Modify install-config.cmake to prioritize the installed template file, with fallbacks to source directory templates if the installed one is missing, enhancing the robustness of the configuration setup.
120 lines
3.5 KiB
CMake
120 lines
3.5 KiB
CMake
cmake_minimum_required(VERSION 3.20)
|
|
project(YourPartDaemon VERSION 1.0 LANGUAGES CXX)
|
|
|
|
# C++ Standard and Compiler Settings
|
|
set(CMAKE_CXX_STANDARD 23)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
# Use best available GCC for C++23 support (OpenSUSE Tumbleweed)
|
|
# Try GCC 15 first (best C++23 support), then GCC 13, then system default
|
|
find_program(GCC15_CC gcc-15)
|
|
find_program(GCC15_CXX g++-15)
|
|
find_program(GCC13_CC gcc-13)
|
|
find_program(GCC13_CXX g++-13)
|
|
|
|
if(GCC15_CC AND GCC15_CXX)
|
|
set(CMAKE_C_COMPILER ${GCC15_CC})
|
|
set(CMAKE_CXX_COMPILER ${GCC15_CXX})
|
|
message(STATUS "Using GCC 15 for best C++23 support")
|
|
elseif(GCC13_CC AND GCC13_CXX)
|
|
set(CMAKE_C_COMPILER ${GCC13_CC})
|
|
set(CMAKE_CXX_COMPILER ${GCC13_CXX})
|
|
message(STATUS "Using GCC 13 for C++23 support")
|
|
else()
|
|
message(STATUS "Using system default compiler")
|
|
endif()
|
|
# Optimize for GCC 13 with C++23
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flto=auto -O3 -march=native -mtune=native")
|
|
set(CMAKE_CXX_FLAGS_DEBUG "-O1 -g -DDEBUG")
|
|
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -march=native -mtune=native")
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -flto")
|
|
set(CMAKE_BUILD_TYPE Release)
|
|
|
|
# Include /usr/local if needed
|
|
list(APPEND CMAKE_PREFIX_PATH /usr/local)
|
|
|
|
# Find libwebsockets via pkg-config
|
|
find_package(PkgConfig REQUIRED)
|
|
pkg_check_modules(LWS REQUIRED libwebsockets)
|
|
|
|
# Find other dependencies
|
|
find_package(PostgreSQL REQUIRED)
|
|
find_package(Threads REQUIRED)
|
|
find_package(nlohmann_json CONFIG REQUIRED)
|
|
|
|
# PostgreSQL C++ libpqxx
|
|
find_package(PkgConfig REQUIRED)
|
|
pkg_check_modules(LIBPQXX REQUIRED libpqxx)
|
|
|
|
# Project sources and headers
|
|
set(SOURCES
|
|
src/main.cpp
|
|
src/config.cpp
|
|
src/connection_pool.cpp
|
|
src/database.cpp
|
|
src/character_creation_worker.cpp
|
|
src/produce_worker.cpp
|
|
src/message_broker.cpp
|
|
src/websocket_server.cpp
|
|
src/stockagemanager.cpp
|
|
src/director_worker.cpp
|
|
src/valuerecalculationworker.cpp
|
|
src/usercharacterworker.cpp
|
|
src/houseworker.cpp
|
|
src/politics_worker.cpp
|
|
)
|
|
|
|
set(HEADERS
|
|
src/config.h
|
|
src/database.h
|
|
src/connection_pool.h
|
|
src/worker.h
|
|
src/character_creation_worker.h
|
|
src/produce_worker.h
|
|
src/message_broker.h
|
|
src/websocket_server.h
|
|
src/stockagemanager.h
|
|
src/director_worker.h
|
|
src/valuerecalculationworker.h
|
|
src/usercharacterworker.h
|
|
src/houseworker.h
|
|
src/politics_worker.h
|
|
)
|
|
|
|
# Define executable target
|
|
add_executable(yourpart-daemon ${SOURCES} ${HEADERS}
|
|
src/utils.h src/utils.cpp
|
|
src/underground_worker.h src/underground_worker.cpp)
|
|
|
|
# Include directories
|
|
target_include_directories(yourpart-daemon PRIVATE
|
|
${PostgreSQL_INCLUDE_DIRS}
|
|
${LIBPQXX_INCLUDE_DIRS}
|
|
${LWS_INCLUDE_DIRS}
|
|
)
|
|
|
|
# Find systemd
|
|
find_package(PkgConfig REQUIRED)
|
|
pkg_check_modules(SYSTEMD REQUIRED libsystemd)
|
|
|
|
# Link libraries
|
|
target_link_libraries(yourpart-daemon PRIVATE
|
|
${PostgreSQL_LIBRARIES}
|
|
Threads::Threads
|
|
z ssl crypto
|
|
${LIBPQXX_LIBRARIES}
|
|
${LWS_LIBRARIES}
|
|
nlohmann_json::nlohmann_json
|
|
${SYSTEMD_LIBRARIES}
|
|
)
|
|
|
|
# Installation rules
|
|
install(TARGETS yourpart-daemon DESTINATION /usr/local/bin)
|
|
|
|
# Installiere Template als Referenz ZUERST (wird vom install-Skript benötigt)
|
|
install(FILES daemon.conf DESTINATION /etc/yourpart/ RENAME daemon.conf.example)
|
|
|
|
# Intelligente Konfigurationsdatei-Installation
|
|
# Verwendet ein CMake-Skript, das nur fehlende Keys hinzufügt, ohne bestehende zu überschreiben
|
|
# Das Skript liest das Template aus /etc/yourpart/daemon.conf.example oder dem Source-Verzeichnis
|
|
install(SCRIPT cmake/install-config.cmake)
|