107 lines
2.8 KiB
Text
107 lines
2.8 KiB
Text
|
|
cmake_minimum_required(VERSION 3.20)
|
||
|
|
project(streaming-backend)
|
||
|
|
|
||
|
|
set(CMAKE_CXX_STANDARD 20)
|
||
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||
|
|
|
||
|
|
# Use pkg-config to find libraries
|
||
|
|
find_package(PkgConfig REQUIRED)
|
||
|
|
|
||
|
|
# Find dependencies
|
||
|
|
find_package(Drogon CONFIG REQUIRED)
|
||
|
|
find_package(PostgreSQL REQUIRED)
|
||
|
|
|
||
|
|
# Find Redis dependencies
|
||
|
|
pkg_check_modules(HIREDIS REQUIRED hiredis)
|
||
|
|
pkg_check_modules(REDIS_PLUS_PLUS redis++)
|
||
|
|
|
||
|
|
# Manual fallback for redis++
|
||
|
|
if(NOT REDIS_PLUS_PLUS_FOUND)
|
||
|
|
find_path(REDIS_PLUS_PLUS_INCLUDE_DIR sw/redis++/redis++.h
|
||
|
|
PATHS /usr/local/include /usr/include
|
||
|
|
)
|
||
|
|
find_library(REDIS_PLUS_PLUS_LIBRARY redis++
|
||
|
|
PATHS /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu
|
||
|
|
)
|
||
|
|
|
||
|
|
if(REDIS_PLUS_PLUS_INCLUDE_DIR AND REDIS_PLUS_PLUS_LIBRARY)
|
||
|
|
set(REDIS_PLUS_PLUS_FOUND TRUE)
|
||
|
|
set(REDIS_PLUS_PLUS_INCLUDE_DIRS ${REDIS_PLUS_PLUS_INCLUDE_DIR})
|
||
|
|
set(REDIS_PLUS_PLUS_LIBRARIES ${REDIS_PLUS_PLUS_LIBRARY})
|
||
|
|
else()
|
||
|
|
message(FATAL_ERROR "redis++ not found")
|
||
|
|
endif()
|
||
|
|
endif()
|
||
|
|
|
||
|
|
# Find bcrypt library
|
||
|
|
find_path(BCRYPT_INCLUDE_DIR bcrypt/BCrypt.hpp
|
||
|
|
PATHS /usr/local/include /usr/include
|
||
|
|
)
|
||
|
|
find_library(BCRYPT_LIBRARY bcrypt
|
||
|
|
PATHS /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu
|
||
|
|
)
|
||
|
|
|
||
|
|
if(NOT BCRYPT_INCLUDE_DIR OR NOT BCRYPT_LIBRARY)
|
||
|
|
message(FATAL_ERROR "bcrypt not found")
|
||
|
|
endif()
|
||
|
|
|
||
|
|
# Find jwt-cpp (header-only)
|
||
|
|
find_path(JWT_CPP_INCLUDE_DIR jwt-cpp/jwt.h
|
||
|
|
PATHS /usr/local/include /usr/include
|
||
|
|
)
|
||
|
|
|
||
|
|
if(NOT JWT_CPP_INCLUDE_DIR)
|
||
|
|
message(FATAL_ERROR "jwt-cpp not found")
|
||
|
|
endif()
|
||
|
|
|
||
|
|
# Source files
|
||
|
|
set(SOURCES
|
||
|
|
src/main.cpp
|
||
|
|
src/controllers/StreamController.cpp
|
||
|
|
src/controllers/UserController.cpp
|
||
|
|
src/controllers/AdminController.cpp
|
||
|
|
src/controllers/RealmController.cpp
|
||
|
|
src/services/DatabaseService.cpp
|
||
|
|
src/services/StatsService.cpp
|
||
|
|
src/services/RedisHelper.cpp
|
||
|
|
src/services/AuthService.cpp
|
||
|
|
)
|
||
|
|
|
||
|
|
# Create executable
|
||
|
|
add_executable(${PROJECT_NAME} ${SOURCES})
|
||
|
|
|
||
|
|
# Include directories
|
||
|
|
target_include_directories(${PROJECT_NAME}
|
||
|
|
PRIVATE
|
||
|
|
${CMAKE_CURRENT_SOURCE_DIR}/src
|
||
|
|
${BCRYPT_INCLUDE_DIR}
|
||
|
|
${JWT_CPP_INCLUDE_DIR}
|
||
|
|
SYSTEM PRIVATE
|
||
|
|
${HIREDIS_INCLUDE_DIRS}
|
||
|
|
${REDIS_PLUS_PLUS_INCLUDE_DIRS}
|
||
|
|
)
|
||
|
|
|
||
|
|
# Link libraries
|
||
|
|
target_link_libraries(${PROJECT_NAME}
|
||
|
|
PRIVATE
|
||
|
|
Drogon::Drogon
|
||
|
|
PostgreSQL::PostgreSQL
|
||
|
|
${REDIS_PLUS_PLUS_LIBRARIES}
|
||
|
|
${HIREDIS_LIBRARIES}
|
||
|
|
${BCRYPT_LIBRARY}
|
||
|
|
pthread
|
||
|
|
)
|
||
|
|
|
||
|
|
# Compile options
|
||
|
|
target_compile_options(${PROJECT_NAME}
|
||
|
|
PRIVATE
|
||
|
|
${HIREDIS_CFLAGS_OTHER}
|
||
|
|
${REDIS_PLUS_PLUS_CFLAGS_OTHER}
|
||
|
|
-Wall
|
||
|
|
-Wextra
|
||
|
|
-Wpedantic
|
||
|
|
-Wno-pedantic # Suppress pedantic warnings from third-party headers
|
||
|
|
)
|
||
|
|
# Build admin tool
|
||
|
|
add_executable(admin-tool src/admin_tool.cpp)
|
||
|
|
target_link_libraries(admin-tool PRIVATE Drogon::Drogon PostgreSQL::PostgreSQL)
|