File CMakeLists.txt
Go to the documentation of this file
if(NOT CMAKE_SYSTEM_NAME STREQUAL "Linux")
message(WARNING "boba_streaming_server is currently available only on Linux hosts")
set(USE_BOBA_STREAMING_SERVER OFF PARENT_SCOPE)
return()
endif()
enable_language(CUDA)
find_package(CUDAToolkit REQUIRED)
find_package(OpenXR CONFIG REQUIRED)
# Reuse ILLIXR's existing NVENC/CUDA implementation to encode Boba's host RGBA
# rings as the same side-by-side AV1 format decoded by the native Quest client.
set(PLUGIN_NAME plugin.boba_streaming_server${ILLIXR_BUILD_SUFFIX})
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CUDA_STANDARD 17)
set(CMAKE_CUDA_STANDARD_REQUIRED ON)
find_path(NVENC_INCLUDE_DIR nvEncodeAPI.h
HINTS
$ENV{VIDEO_CODEC_SDK_PATH}/Interface
$ENV{VIDEO_CODEC_SDK_PATH}/include/ffnvcodec
${VIDEO_CODEC_SDK_PATH}/Interface
${VIDEO_CODEC_SDK_PATH}/include/ffnvcodec
/usr/local/cuda/include
/opt/nvidia/video-codec-sdk/Interface)
if(NOT NVENC_INCLUDE_DIR)
message(FATAL_ERROR "NVENC headers not found. Set VIDEO_CODEC_SDK_PATH to the NVIDIA Video Codec SDK root.")
endif()
add_library(${PLUGIN_NAME} SHARED
plugin.cpp
plugin.hpp
rgba_convert.cu
${CMAKE_SOURCE_DIR}/plugins/offload_rendering_server/nvenc/nvenc_encoder.cpp
${CMAKE_SOURCE_DIR}/plugins/offload_rendering_server/nvenc/nvenc_encoder.hpp
${CMAKE_SOURCE_DIR}/plugins/offload_rendering_server/nvenc/color_convert.cu
${CMAKE_SOURCE_DIR}/include/illixr/data_format/frame.hpp
${CMAKE_SOURCE_DIR}/include/illixr/data_format/serialization/frame.hpp
${CMAKE_SOURCE_DIR}/include/illixr/data_format/stereo_frame.hpp
${CMAKE_SOURCE_DIR}/include/illixr/quest3_params.hpp
${CMAKE_SOURCE_DIR}/utils/serialization/frame.cpp
${CMAKE_SOURCE_DIR}/utils/serialization/head_pose.cpp
${CMAKE_SOURCE_DIR}/utils/serialization/misc.cpp)
target_compile_definitions(${PLUGIN_NAME} PRIVATE
USING_OPENXR
NVENC_ENCODER
ILLIXR_BOBA_ENCODER
USE_AV1
COMBINED_ENCODING)
target_include_directories(${PLUGIN_NAME} PUBLIC
${CMAKE_SOURCE_DIR}/include
${CMAKE_SOURCE_DIR}/plugins
${NVENC_INCLUDE_DIR}
${CUDAToolkit_INCLUDE_DIRS})
target_link_libraries(${PLUGIN_NAME} PRIVATE
OpenXR::headers
Boost::serialization
CUDA::cuda_driver
CUDA::cudart
Eigen3::Eigen
Threads::Threads
spdlog::spdlog
${CMAKE_DL_LIBS})
set_target_properties(${PLUGIN_NAME} PROPERTIES
CUDA_SEPARABLE_COMPILATION ON
CUDA_RESOLVE_DEVICE_SYMBOLS ON
CUDA_ARCHITECTURES "120")
install(TARGETS ${PLUGIN_NAME} DESTINATION lib)