Files
Adminive/backend/CMakeLists.txt
T
2026-08-07 00:01:16 +08:00

102 lines
7.0 KiB
CMake

include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(adminive_backend_root "${CMAKE_CURRENT_LIST_DIR}")
set(adminive_include_dir "${adminive_backend_root}/include")
set(adminive_third_party_include_dir "${adminive_backend_root}/third_party/include")
set(adminive_frontend_dist_dir "${adminive_backend_root}/../frontend_dist")
file(TO_CMAKE_PATH "${adminive_frontend_dist_dir}" adminive_frontend_dist_dir)
option(ADMINIVE_PROPAGATE_MSVC_STRICT_MODE "Propagate /permissive- to Adminive consumers" OFF)
add_library(Adminive INTERFACE)
set_target_properties(Adminive PROPERTIES EXPORT_NAME Core)
add_library(Adminive::Adminive ALIAS Adminive)
add_library(Adminive::Core ALIAS Adminive)
target_include_directories(Adminive INTERFACE "$<BUILD_INTERFACE:${adminive_include_dir}>" "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>")
target_compile_features(Adminive INTERFACE cxx_std_20)
if(MSVC)
target_compile_options(Adminive INTERFACE /utf-8 /Zc:__cplusplus)
if(ADMINIVE_PROPAGATE_MSVC_STRICT_MODE)
target_compile_options(Adminive INTERFACE /permissive-)
endif()
endif()
add_library(Adminive_Http INTERFACE)
set_target_properties(Adminive_Http PROPERTIES EXPORT_NAME Http)
add_library(Adminive::Http ALIAS Adminive_Http)
target_link_libraries(Adminive_Http INTERFACE Adminive::Core)
add_library(Adminive_Httplib INTERFACE)
set_target_properties(Adminive_Httplib PROPERTIES EXPORT_NAME Httplib)
add_library(Adminive::Httplib ALIAS Adminive_Httplib)
target_link_libraries(Adminive_Httplib INTERFACE Adminive::Http)
target_include_directories(Adminive_Httplib INTERFACE "$<BUILD_INTERFACE:${adminive_third_party_include_dir}>" "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>")
if(WIN32)
target_compile_definitions(Adminive_Httplib INTERFACE WINVER=0x0A00 _WIN32_WINNT=0x0A00)
target_link_libraries(Adminive_Httplib INTERFACE ws2_32)
endif()
add_library(Adminive_Drogon INTERFACE)
set_target_properties(Adminive_Drogon PROPERTIES EXPORT_NAME Drogon)
add_library(Adminive::Drogon ALIAS Adminive_Drogon)
target_link_libraries(Adminive_Drogon INTERFACE Adminive::Http "$<INSTALL_INTERFACE:Drogon::Drogon>")
if(TARGET Drogon::Drogon)
target_link_libraries(Adminive_Drogon INTERFACE "$<BUILD_INTERFACE:Drogon::Drogon>")
elseif(TARGET drogon)
target_link_libraries(Adminive_Drogon INTERFACE "$<BUILD_INTERFACE:drogon>")
endif()
add_library(Adminive_Default INTERFACE)
set_target_properties(Adminive_Default PROPERTIES EXPORT_NAME Default)
add_library(Adminive::Default ALIAS Adminive_Default)
target_link_libraries(Adminive_Default INTERFACE Adminive::Httplib)
target_include_directories(Adminive_Default INTERFACE "$<BUILD_INTERFACE:${adminive_third_party_include_dir}>" "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>")
add_library(Adminive_Example STATIC "${adminive_backend_root}/src/example.cpp" "${adminive_backend_root}/src/config_store.cpp" "${adminive_backend_root}/src/device_tables.cpp" "${adminive_backend_root}/src/server_app.cpp")
target_include_directories(Adminive_Example PUBLIC "${adminive_backend_root}/src")
target_link_libraries(Adminive_Example PUBLIC Adminive::Default)
add_executable(Adminive_Server "${adminive_backend_root}/src/main.cpp")
target_compile_definitions(Adminive_Server PRIVATE ADMINIVE_FRONTEND_DIST_DIR="${adminive_frontend_dist_dir}")
target_link_libraries(Adminive_Server PRIVATE Adminive_Example)
if(MSVC)
target_compile_options(Adminive_Example PRIVATE /permissive-)
target_compile_options(Adminive_Server PRIVATE /permissive-)
endif()
if(BUILD_TESTING)
add_executable(Adminive_Test "${adminive_backend_root}/tests/test.cpp")
target_include_directories(Adminive_Test PRIVATE "${adminive_backend_root}/src")
target_link_libraries(Adminive_Test PRIVATE Adminive_Example)
add_test(NAME Adminive_Test COMMAND Adminive_Test)
add_executable(Adminive_Core_Adapter_Test "${adminive_backend_root}/tests/core_adapter_test.cpp")
target_link_libraries(Adminive_Core_Adapter_Test PRIVATE Adminive::Core)
add_test(NAME Adminive_Core_Adapter_Test COMMAND Adminive_Core_Adapter_Test)
add_executable(Adminive_Advanced_Adapter_Test "${adminive_backend_root}/tests/advanced_adapter_test.cpp")
target_link_libraries(Adminive_Advanced_Adapter_Test PRIVATE Adminive::Default)
add_test(NAME Adminive_Advanced_Adapter_Test COMMAND Adminive_Advanced_Adapter_Test)
add_executable(Adminive_Safety_Test "${adminive_backend_root}/tests/safety_test.cpp")
target_link_libraries(Adminive_Safety_Test PRIVATE Adminive::Default)
add_test(NAME Adminive_Safety_Test COMMAND Adminive_Safety_Test)
add_executable(Adminive_Config_Store_Test "${adminive_backend_root}/tests/config_store_test.cpp")
target_include_directories(Adminive_Config_Store_Test PRIVATE "${adminive_backend_root}/src")
target_link_libraries(Adminive_Config_Store_Test PRIVATE Adminive_Example)
add_test(NAME Adminive_Config_Store_Test COMMAND Adminive_Config_Store_Test)
add_executable(Adminive_Drogon_Adapter_Test "${adminive_backend_root}/tests/drogon_adapter_test.cpp")
target_include_directories(Adminive_Drogon_Adapter_Test BEFORE PRIVATE "${adminive_backend_root}/tests/fake_drogon")
target_link_libraries(Adminive_Drogon_Adapter_Test PRIVATE Adminive::Default)
add_test(NAME Adminive_Drogon_Adapter_Test COMMAND Adminive_Drogon_Adapter_Test)
if(MSVC)
target_compile_options(Adminive_Test PRIVATE /permissive-)
target_compile_options(Adminive_Core_Adapter_Test PRIVATE /permissive-)
target_compile_options(Adminive_Advanced_Adapter_Test PRIVATE /permissive-)
target_compile_options(Adminive_Drogon_Adapter_Test PRIVATE /permissive-)
target_compile_options(Adminive_Safety_Test PRIVATE /permissive-)
target_compile_options(Adminive_Config_Store_Test PRIVATE /permissive-)
endif()
endif()
set(adminive_install_cmake_dir "${CMAKE_INSTALL_LIBDIR}/cmake/Adminive")
configure_package_config_file("${adminive_backend_root}/../cmake/AdminiveConfig.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/AdminiveConfig.cmake" INSTALL_DESTINATION "${adminive_install_cmake_dir}")
write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/AdminiveConfigVersion.cmake" VERSION "${PROJECT_VERSION}" COMPATIBILITY SameMajorVersion)
install(TARGETS Adminive Adminive_Http Adminive_Httplib Adminive_Default EXPORT AdminiveTargets)
install(TARGETS Adminive_Drogon EXPORT AdminiveDrogonTargets)
install(DIRECTORY "${adminive_include_dir}/" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
install(DIRECTORY "${adminive_third_party_include_dir}/" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
install(EXPORT AdminiveTargets FILE AdminiveTargets.cmake NAMESPACE Adminive:: DESTINATION "${adminive_install_cmake_dir}")
install(EXPORT AdminiveDrogonTargets FILE AdminiveDrogonTargets.cmake NAMESPACE Adminive:: DESTINATION "${adminive_install_cmake_dir}")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/AdminiveConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/AdminiveConfigVersion.cmake" DESTINATION "${adminive_install_cmake_dir}")