113 lines
3.1 KiB
CMake
113 lines
3.1 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)
|
|
install(FILES daemon.conf DESTINATION /etc/yourpart/)
|