# Minimum version based on requirements from PRD (CMake >= 3.20) cmake_minimum_required(VERSION 3.20) project(rk3588_media_server VERSION 0.1.0 DESCRIPTION "RK3588 media server bootstrap" LANGUAGES C CXX) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) option(BUILD_SAMPLES "Build demo binaries" ON) option(ENABLE_RK_DEMOS "Use official Rockchip demos that link against vendor SDKs" OFF) set(RK_MPP_ROOT "${CMAKE_SOURCE_DIR}/third_party/mpp" CACHE PATH "Path to Rockchip MPP SDK root") set(RK_MPP_LIB_PATH "" CACHE FILEPATH "Absolute path to librockchip_mpp.so built for RK3588") set(RK_RKNN_ROOT "${CMAKE_SOURCE_DIR}/third_party/rknpu2" CACHE PATH "Path to Rockchip RKNN runtime repository") set(RKNN_RUNTIME_LIB_DIR "${RK_RKNN_ROOT}/runtime/RK3588/Linux/librknn_api/aarch64" CACHE PATH "Directory containing librknnrt.so") set(RKNN_RUNTIME_INCLUDE_DIR "${RK_RKNN_ROOT}/runtime/RK3588/Linux/librknn_api/include" CACHE PATH "include path for rknn_api.h") set(RKNN_MODEL_PATH "${RK_RKNN_ROOT}/examples/rknn_api_demo/model/RK3588/mobilenet_v1.rknn" CACHE FILEPATH "Default RKNN demo model") set(RKNN_SAMPLE_IMAGE "${RK_RKNN_ROOT}/examples/rknn_api_demo/model/dog_224x224.jpg" CACHE FILEPATH "Default RKNN demo input image") set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) find_package(Threads REQUIRED) # Helper target for common warnings add_library(project_options INTERFACE) if(MSVC) target_compile_options(project_options INTERFACE /W4) else() target_compile_options(project_options INTERFACE -Wall -Wextra -Wpedantic) endif() # Resolve git revision if possible find_package(Git QUIET) if(GIT_FOUND) execute_process( COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE RK_GIT_SHA OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET ) endif() if(NOT RK_GIT_SHA) set(RK_GIT_SHA "nogit") endif() set(SRC_FILES src/main.cpp src/media_server_app.cpp src/graph_manager.cpp src/plugin_loader.cpp src/ai_scheduler.cpp src/http_server.cpp src/utils/dma_alloc.cpp src/utils/config_expand.cpp ) add_executable(media-server ${SRC_FILES}) set_target_properties(media-server PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) target_include_directories(media-server PRIVATE ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/third_party ) target_link_libraries(media-server PRIVATE project_options Threads::Threads) if(WIN32) target_link_libraries(media-server PRIVATE ws2_32) endif() target_compile_definitions(media-server PRIVATE RK_PROJECT_VERSION="${PROJECT_VERSION}" RK_GIT_SHA="${RK_GIT_SHA}" ) install(TARGETS media-server RUNTIME DESTINATION bin) if(BUILD_SAMPLES) add_subdirectory(samples) endif() add_subdirectory(plugins) include(GNUInstallDirs) install(FILES configs/sample_cam1.json DESTINATION ${CMAKE_INSTALL_DATADIR}/rk3588-media-server)