cmake_minimum_required(VERSION 3.28) project(csp_backend LANGUAGES CXX) # Drogon 1.8.x on Ubuntu still uses legacy CMake commands. cmake_policy(SET CMP0153 OLD) find_package(Drogon CONFIG REQUIRED) find_package(Catch2 3 REQUIRED) find_package(OpenSSL REQUIRED) add_library(csp_core src/version.cc src/db/sqlite_db.cc src/app_state.cc src/services/crypto.cc src/services/auth_service.cc src/services/problem_service.cc src/services/user_service.cc src/services/wrong_book_service.cc src/services/kb_service.cc src/services/contest_service.cc src/services/daily_task_service.cc src/services/submission_service.cc src/services/solution_access_service.cc src/services/redeem_service.cc src/services/problem_workspace_service.cc src/services/problem_solution_runner.cc src/services/kb_import_runner.cc src/services/problem_gen_runner.cc src/services/submission_feedback_service.cc src/services/submission_feedback_runner.cc src/services/import_service.cc src/services/import_runner.cc src/domain/enum_strings.cc src/domain/json.cc ) target_include_directories(csp_core PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include /usr/include/jsoncpp ) target_link_libraries(csp_core PUBLIC SQLite3_lib OpenSSL::Crypto ) add_library(csp_web src/controllers/auth_controller.cc src/controllers/problem_controller.cc src/controllers/submission_controller.cc src/controllers/me_controller.cc src/controllers/contest_controller.cc src/controllers/leaderboard_controller.cc src/controllers/admin_controller.cc src/controllers/kb_controller.cc src/controllers/import_controller.cc src/controllers/meta_controller.cc src/controllers/problem_gen_controller.cc src/health_controller.cc ) target_include_directories(csp_web PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include ) target_link_libraries(csp_web PRIVATE Drogon::Drogon csp_core ) add_executable(csp_server src/main.cc ) target_include_directories(csp_server PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include ) target_link_libraries(csp_server PRIVATE Drogon::Drogon csp_core "$" ) enable_testing() add_executable(csp_tests tests/test_main.cc tests/version_test.cc tests/sqlite_db_test.cc tests/auth_service_test.cc tests/auth_http_test.cc tests/domain_test.cc tests/problem_service_test.cc tests/kb_service_test.cc tests/contest_service_test.cc tests/daily_task_service_test.cc tests/submission_service_test.cc tests/me_http_test.cc tests/problem_http_test.cc tests/problem_workspace_service_test.cc tests/problem_workspace_http_test.cc tests/contest_http_test.cc tests/submission_http_test.cc tests/import_service_test.cc tests/import_http_test.cc ) target_include_directories(csp_tests PRIVATE /usr/include/jsoncpp ) target_link_libraries(csp_tests PRIVATE Catch2::Catch2WithMain Drogon::Drogon csp_core "$" ) include(CTest) add_test(NAME csp_tests COMMAND csp_tests)