cmake_minimum_required(VERSION 3.20) project(cvmmap-streamer LANGUAGES CXX) set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) find_package(Threads REQUIRED) if (EXISTS "${CMAKE_CURRENT_LIST_DIR}/lib/CLI11/CMakeLists.txt") add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/lib/CLI11" "${CMAKE_CURRENT_BINARY_DIR}/vendor/cli11") endif() find_package(cppzmq QUIET) find_package(ZeroMQ QUIET) find_package(spdlog REQUIRED) find_package(PkgConfig REQUIRED) pkg_check_modules(GSTREAMER IMPORTED_TARGET gstreamer-1.0>=1.14 gstreamer-video-1.0>=1.14 gstreamer-app-1.0>=1.14) if (NOT GSTREAMER_FOUND) message(FATAL_ERROR "GStreamer development packages are required for cvmmap-streamer. " "Install pkg-config modules: gstreamer-1.0>=1.14, gstreamer-video-1.0>=1.14, " "and gstreamer-app-1.0>=1.14.") endif() add_library(cvmmap_streamer_common STATIC src/ipc/help.cpp src/config/runtime_config.cpp src/core/frame_source.cpp src/core/ingest_runtime.cpp src/ipc/contracts.cpp src/ipc/ipc_stub.cpp src/sim/wire.cpp lib/cvmmap-client-cpp/app_cvmmap_client.cpp lib/cvmmap-client-cpp/app_cvmmap_parser.cpp src/metrics/latency_tracker.cpp src/pipeline/pipeline_stub.cpp src/protocol/rtmp_publisher.cpp src/protocol/rtp_publisher.cpp) target_include_directories(cvmmap_streamer_common PUBLIC "${CMAKE_CURRENT_LIST_DIR}/include" PRIVATE "${CMAKE_CURRENT_LIST_DIR}/lib/cvmmap-client-cpp" "${CMAKE_CURRENT_LIST_DIR}/lib/cvmmap-client-cpp/include") set(CVMAP_STREAMER_LINK_DEPS Threads::Threads) if (TARGET cppzmq::cppzmq) list(APPEND CVMAP_STREAMER_LINK_DEPS cppzmq::cppzmq) elseif (TARGET cppzmq) list(APPEND CVMAP_STREAMER_LINK_DEPS cppzmq) endif() if (TARGET ZeroMQ::libzmq) list(APPEND CVMAP_STREAMER_LINK_DEPS ZeroMQ::libzmq) elseif (TARGET ZeroMQ::ZeroMQ) list(APPEND CVMAP_STREAMER_LINK_DEPS ZeroMQ::ZeroMQ) endif() if (TARGET ZeroMQ::cppzmq) list(APPEND CVMAP_STREAMER_LINK_DEPS ZeroMQ::cppzmq) elseif (TARGET cppzmq::cppzmq) list(APPEND CVMAP_STREAMER_LINK_DEPS cppzmq::cppzmq) endif() if (NOT TARGET PkgConfig::GSTREAMER) message(FATAL_ERROR "GStreamer packages were detected but PkgConfig::GSTREAMER target is unavailable. " "Please ensure GStreamer development toolchain is correctly installed.") endif() list(APPEND CVMAP_STREAMER_LINK_DEPS PkgConfig::GSTREAMER) if (TARGET spdlog::spdlog) list(APPEND CVMAP_STREAMER_LINK_DEPS spdlog::spdlog) elseif (TARGET spdlog) list(APPEND CVMAP_STREAMER_LINK_DEPS spdlog) endif() if (TARGET CLI11::CLI11) list(APPEND CVMAP_STREAMER_LINK_DEPS CLI11::CLI11) endif() target_link_libraries(cvmmap_streamer_common PUBLIC ${CVMAP_STREAMER_LINK_DEPS}) function(add_cvmmap_binary target source) add_executable(${target} ${source} ${ARGN}) target_include_directories(${target} PRIVATE "${CMAKE_CURRENT_LIST_DIR}/include") target_link_libraries(${target} PRIVATE cvmmap_streamer_common) set_target_properties(${target} PROPERTIES OUTPUT_NAME "${target}") endfunction() add_cvmmap_binary(cvmmap_streamer src/main_streamer.cpp) add_cvmmap_binary(rtp_receiver_tester src/testers/rtp_receiver_tester.cpp) add_cvmmap_binary(rtmp_stub_tester src/testers/rtmp_stub_tester.cpp) add_cvmmap_binary(ipc_snapshot_tester src/testers/ipc_snapshot_tester.cpp)