include("${CMAKE_CURRENT_LIST_DIR}/../web_server/cmake/rely.cmake") set(Aethera_MCP_dependencies global::drogon global::pfr ) rcl_add_dependency_action_targets(Aethera_MCP_env ${Aethera_MCP_dependencies}) set_target_properties(Aethera_MCP_env PROPERTIES FOLDER Aethera_MCP) library_get_missing_with_rely(Aethera_MCP_dependencies_missing ${Aethera_MCP_dependencies}) if (Aethera_MCP_dependencies_missing) rcl_log_append(${CMAKE_CURRENT_LIST_LINE} "[FATAL_ERROR] Aethera_MCP dependencies\n${Aethera_MCP_dependencies_missing}\n are not installed. Build Aethera_MCP_env first") return() endif () rcl_load_dependency_environment(${Aethera_MCP_dependencies}) find_package(Drogon CONFIG REQUIRED) if (NOT TARGET Aethera_render_2D) rcl_log_append(${CMAKE_CURRENT_LIST_LINE} "[FATAL_ERROR] Aethera_MCP requires Aethera_render_2D") return() endif () if (NOT TARGET Aethera_render_3D) rcl_log_append(${CMAKE_CURRENT_LIST_LINE} "[FATAL_ERROR] Aethera_MCP requires Aethera_render_3D") return() endif () if (NOT TARGET structive::property_core) set(Aethera_MCP_saved_build_testing "${BUILD_TESTING}") set(BUILD_TESTING OFF) set(STRUCTIVE_BUILD_EXAMPLES OFF) set(STRUCTIVE_BUILD_TESTS OFF) set(STRUCTIVE_INSTALL OFF) add_subdirectory( "${CMAKE_CURRENT_LIST_DIR}/../third_party/Structive" "${CMAKE_CURRENT_BINARY_DIR}/third_party/Structive" EXCLUDE_FROM_ALL) set(BUILD_TESTING "${Aethera_MCP_saved_build_testing}") unset(Aethera_MCP_saved_build_testing) endif () set(Aethera_MCP_core_dir "${CMAKE_CURRENT_LIST_DIR}/core") append_glob_source(Aethera_MCP_core_sources "${Aethera_MCP_core_dir}") add_library(Aethera_MCP_Core STATIC ${Aethera_MCP_core_sources}) target_include_directories(Aethera_MCP_Core PUBLIC "$" "$" "$") target_compile_features(Aethera_MCP_Core PUBLIC cxx_std_23) target_compile_definitions(Aethera_MCP_Core PUBLIC NOMINMAX) target_link_libraries(Aethera_MCP_Core PUBLIC Aethera_render_2D Aethera_render_3D structive::property_core) add_executable(Aethera_MCP_Server "${CMAKE_CURRENT_LIST_DIR}/server/main.cpp" "${CMAKE_CURRENT_LIST_DIR}/server/Mcp_Server.cpp" "${CMAKE_CURRENT_LIST_DIR}/server/Mcp_Server.hpp") target_link_libraries(Aethera_MCP_Server PRIVATE Aethera_MCP_Core Drogon::Drogon TBB::tbbmalloc_proxy) if (MSVC) target_compile_options(Aethera_MCP_Core PRIVATE /utf-8 /bigobj) target_compile_options(Aethera_MCP_Server PRIVATE /utf-8 /bigobj) target_link_options(Aethera_MCP_Server PRIVATE "/INCLUDE:__TBB_malloc_proxy") add_custom_command(TARGET Aethera_MCP_Server POST_BUILD COMMAND "${CMAKE_COMMAND}" -E copy_if_different "$" "$" "$" COMMENT "Deploying the scalable allocator runtime for Aethera MCP" VERBATIM) endif () if (Aethera_BUILD_TESTS) find_package(benchmark CONFIG REQUIRED) add_executable(Aethera_MCP_Protocol_Type_Tests "${CMAKE_CURRENT_LIST_DIR}/tests/Protocol_Type_Tests.cpp") target_link_libraries(Aethera_MCP_Protocol_Type_Tests PRIVATE Aethera_MCP_Core GTest::gtest_main) if (MSVC) target_compile_options(Aethera_MCP_Protocol_Type_Tests PRIVATE /utf-8 /bigobj) endif () add_test(NAME Aethera_MCP_Protocol_Type_Tests COMMAND Aethera_MCP_Protocol_Type_Tests) set_tests_properties(Aethera_MCP_Protocol_Type_Tests PROPERTIES LABELS "Aethera_MCP") add_executable(Aethera_MCP_Benchmarks "${CMAKE_CURRENT_LIST_DIR}/tests/Control_Path_Benchmarks.cpp") target_link_libraries(Aethera_MCP_Benchmarks PRIVATE Aethera_MCP_Core benchmark::benchmark TBB::tbbmalloc_proxy) renderive_stage_render_3D_runtime(Aethera_MCP_Benchmarks) if (MSVC) target_compile_options(Aethera_MCP_Benchmarks PRIVATE /utf-8 /bigobj) target_link_options(Aethera_MCP_Benchmarks PRIVATE "/INCLUDE:__TBB_malloc_proxy") add_custom_command(TARGET Aethera_MCP_Benchmarks POST_BUILD COMMAND "${CMAKE_COMMAND}" -E copy_if_different "$" "$" "$" VERBATIM) endif () add_custom_target(Aethera_MCP_benchmark COMMAND Aethera_MCP_Benchmarks --benchmark_min_time=1s --benchmark_repetitions=3 --benchmark_report_aggregates_only=true DEPENDS Aethera_MCP_Benchmarks USES_TERMINAL) add_executable(Aethera_MCP_Event_Latency_Benchmarks "${CMAKE_CURRENT_LIST_DIR}/tests/Event_Latency_Benchmarks.cpp") target_link_libraries(Aethera_MCP_Event_Latency_Benchmarks PRIVATE Aethera_MCP_Core benchmark::benchmark TBB::tbbmalloc_proxy) renderive_stage_render_3D_runtime(Aethera_MCP_Event_Latency_Benchmarks) if (MSVC) target_compile_options(Aethera_MCP_Event_Latency_Benchmarks PRIVATE /utf-8 /bigobj) target_link_options(Aethera_MCP_Event_Latency_Benchmarks PRIVATE "/INCLUDE:__TBB_malloc_proxy") add_custom_command(TARGET Aethera_MCP_Event_Latency_Benchmarks POST_BUILD COMMAND "${CMAKE_COMMAND}" -E copy_if_different "$" "$" "$" VERBATIM) endif () add_custom_target(Aethera_MCP_event_latency_benchmark COMMAND Aethera_MCP_Event_Latency_Benchmarks --aethera_event_samples=12 DEPENDS Aethera_MCP_Event_Latency_Benchmarks USES_TERMINAL) add_custom_target(Aethera_MCP_check COMMAND "${CMAKE_CTEST_COMMAND}" --test-dir "${CMAKE_BINARY_DIR}" -C "$" -L "^Aethera_MCP$" --output-on-failure DEPENDS Aethera_MCP_Protocol_Type_Tests USES_TERMINAL) endif ()