文件
csp/backend/CMakeLists.txt

121 行
2.9 KiB
CMake

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/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
"$<LINK_LIBRARY:WHOLE_ARCHIVE,csp_web>"
)
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
"$<LINK_LIBRARY:WHOLE_ARCHIVE,csp_web>"
)
include(CTest)
add_test(NAME csp_tests COMMAND csp_tests)