Files
backend/CMakeLists.txt
T
2026-06-05 11:56:28 +02:00

101 lines
3.3 KiB
CMake

cmake_minimum_required(VERSION 3.20)
project(visione-backend VERSION 0.1.0 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
find_package(Python3 COMPONENTS Interpreter REQUIRED)
option(USE_SYSTEM_DROGON "Use an installed Drogon package instead of CPM" OFF)
if (USE_SYSTEM_DROGON)
find_package(Drogon CONFIG REQUIRED)
else ()
set(CPM_SOURCE_CACHE "${CMAKE_CURRENT_SOURCE_DIR}/.cache/cpm" CACHE PATH "CPM dependency cache")
include(cmake/CPM.cmake)
CPMAddPackage(
NAME Drogon
GITHUB_REPOSITORY drogonframework/drogon
GIT_TAG v1.9.13
OPTIONS
"BUILD_CTL OFF"
"BUILD_EXAMPLES OFF"
"BUILD_ORM ON"
"BUILD_MYSQL ON"
"BUILD_POSTGRESQL OFF"
"BUILD_REDIS OFF"
"BUILD_SQLITE OFF"
"BUILD_BROTLI OFF"
"BUILD_YAML_CONFIG OFF"
"BUILD_TESTING OFF"
)
endif ()
set(APP_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/controllers/ApiController.cc
${CMAKE_CURRENT_SOURCE_DIR}/controllers/AdminController.cc
${CMAKE_CURRENT_SOURCE_DIR}/controllers/AuthController.cc
${CMAKE_CURRENT_SOURCE_DIR}/controllers/PublicController.cc
${CMAKE_CURRENT_SOURCE_DIR}/controllers/ReportController.cc
${CMAKE_CURRENT_SOURCE_DIR}/controllers/UserController.cc
${CMAKE_CURRENT_SOURCE_DIR}/common/Auth.cc
${CMAKE_CURRENT_SOURCE_DIR}/common/Cors.cc
${CMAKE_CURRENT_SOURCE_DIR}/common/Crypto.cc
${CMAKE_CURRENT_SOURCE_DIR}/common/Email.cc
${CMAKE_CURRENT_SOURCE_DIR}/common/GeoJson.cc
${CMAKE_CURRENT_SOURCE_DIR}/common/Http.cc
${CMAKE_CURRENT_SOURCE_DIR}/common/Validation.cc
${CMAKE_CURRENT_SOURCE_DIR}/plugins/RequestLogger.cc
${CMAKE_CURRENT_SOURCE_DIR}/repositories/MigrationRunner.cc
${CMAKE_CURRENT_SOURCE_DIR}/repositories/Sql.cc
${CMAKE_CURRENT_SOURCE_DIR}/services/AdminService.cc
${CMAKE_CURRENT_SOURCE_DIR}/services/AuthService.cc
${CMAKE_CURRENT_SOURCE_DIR}/services/ReportService.cc
${CMAKE_CURRENT_SOURCE_DIR}/services/UserService.cc
)
add_executable(${PROJECT_NAME}
main.cc
${APP_SOURCES}
)
target_include_directories(${PROJECT_NAME}
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
)
target_link_libraries(${PROJECT_NAME}
PRIVATE
Drogon::Drogon
)
file(GLOB CONTROLLER_HEADERS CONFIGURE_DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/controllers/*.h
)
set(OPENAPI_OUTPUT ${CMAKE_BINARY_DIR}/openapi/visione.openapi.json)
add_custom_command(
OUTPUT ${OPENAPI_OUTPUT}
COMMAND ${Python3_EXECUTABLE}
${CMAKE_CURRENT_SOURCE_DIR}/scripts/generate_openapi.py
--controllers ${CMAKE_CURRENT_SOURCE_DIR}/controllers
--manual ${CMAKE_CURRENT_SOURCE_DIR}/docs/openapi/visione.openapi.yaml
--out ${OPENAPI_OUTPUT}
--title "Visione API"
--version ${PROJECT_VERSION}
DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/scripts/generate_openapi.py
${CMAKE_CURRENT_SOURCE_DIR}/docs/openapi/visione.openapi.yaml
${CONTROLLER_HEADERS}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
VERBATIM
)
add_custom_target(openapi ALL DEPENDS ${OPENAPI_OUTPUT})
add_dependencies(${PROJECT_NAME} openapi)
enable_testing()
add_subdirectory(test)