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/ReportController.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 ) 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 ) file(GLOB OPENAPI_SOURCE_FILES CONFIGURE_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/controllers/*.cc ${CMAKE_CURRENT_SOURCE_DIR}/services/*.cc ) file(GLOB_RECURSE SWAGGER_DROGON_FILES CONFIGURE_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/scripts/swagger-drogon/*.py ${CMAKE_CURRENT_SOURCE_DIR}/scripts/swagger-drogon/*.toml ${CMAKE_CURRENT_SOURCE_DIR}/scripts/swagger-drogon/*.md ) 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 --sources ${CMAKE_CURRENT_SOURCE_DIR}/controllers ${CMAKE_CURRENT_SOURCE_DIR}/services --contract ${CMAKE_CURRENT_SOURCE_DIR}/docs/openapi/visione.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.yaml ${SWAGGER_DROGON_FILES} ${CONTROLLER_HEADERS} ${OPENAPI_SOURCE_FILES} 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)