102 lines
7.0 KiB
CMake
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}")
|