111 lines
3.2 KiB
CMake
111 lines
3.2 KiB
CMake
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)
|