Files

248 lines
6.8 KiB
CMake

# Copyright 2025-2026, NVIDIA CORPORATION.
# SPDX-License-Identifier: BSL-1.0
#.rst:
# MonadoSetOptions
# ----------------
#
# Provides a function to bulk-configure Monado build options.
#
# This is useful for projects that embed Monado or build minimal configurations,
# as it allows setting all options to OFF by default and then selectively
# enabling only what's needed, without manually listing hundreds of options.
#
# In-tree usage example::
#
# set(MONADO_ROOT ../../..)
# include(${MONADO_ROOT}/cmake/MonadoSetOptions.cmake)
# monado_set_options(
# ENABLE
# XRT_HAVE_VULKAN
# KEEP
# XRT_HAVE_SYSTEM_CJSON
# XRT_FEATURE_SSE2
# )
# add_subdirectory(${MONADO_ROOT} monado)
#
# Out-of-tree usage example::
#
# include(/path/to/monado/cmake/MonadoSetOptions.cmake)
#
# monado_set_options(
# ENABLE
# XRT_HAVE_VULKAN
# XRT_MODULE_COMPOSITOR_MAIN
# KEEP
# XRT_HAVE_SYSTEM_CJSON
# )
#
# add_subdirectory(/path/to/monado monado)
#
# ``ENABLE``
# List of options to explicitly set to ON
#
# ``KEEP``
# List of options to leave unchanged (don't force to OFF).
# Useful for options that auto-detect (like XRT_HAVE_SYSTEM_CJSON,
# XRT_FEATURE_SSE2).
#
# All other known Monado options will be set to OFF.
function(monado_set_options)
set(options "")
set(oneValueArgs "")
set(multiValueArgs ENABLE KEEP)
cmake_parse_arguments(
MSO "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}
)
# Define all known Monado options
set(
_ALL_XRT_OPTIONS
# XRT_HAVE_* - Graphics APIs and system dependencies
XRT_HAVE_BASALT
XRT_HAVE_BLUETOOTH
XRT_HAVE_D3D11
XRT_HAVE_D3D12
XRT_HAVE_DBUS
XRT_HAVE_DXGI
XRT_HAVE_EGL
XRT_HAVE_GST
XRT_HAVE_HIDAPI
XRT_HAVE_JPEG
XRT_HAVE_KIMERA
XRT_HAVE_LIBBSD
XRT_HAVE_LIBUSB
XRT_HAVE_LIBUDEV
XRT_HAVE_LIBUVC
XRT_HAVE_ONNXRUNTIME
XRT_HAVE_OPENCV
XRT_HAVE_OPENGL
XRT_HAVE_OPENGLES
XRT_HAVE_OPENGL_GLX
XRT_HAVE_OPENVR
XRT_HAVE_PERCETTO
XRT_HAVE_REALSENSE
XRT_HAVE_SDL2
XRT_HAVE_SYSTEM_CJSON
XRT_HAVE_SYSTEMD
XRT_HAVE_TRACY
XRT_HAVE_VULKAN
XRT_HAVE_WAYLAND
XRT_HAVE_WAYLAND_DIRECT
XRT_HAVE_WIL
XRT_HAVE_WINRT
XRT_HAVE_XCB
XRT_HAVE_XLIB
XRT_HAVE_XRANDR
# XRT_MODULE_* - Core modules
XRT_MODULE_AUX_VIVE
XRT_MODULE_COMPOSITOR
XRT_MODULE_COMPOSITOR_CLIENT
XRT_MODULE_COMPOSITOR_MAIN
XRT_MODULE_COMPOSITOR_MOCK
XRT_MODULE_COMPOSITOR_MULTI
XRT_MODULE_COMPOSITOR_NULL
XRT_MODULE_COMPOSITOR_RENDER
XRT_MODULE_COMPOSITOR_SHADERS
XRT_MODULE_COMPOSITOR_UTIL
XRT_MODULE_IPC
XRT_MODULE_MERCURY_HANDTRACKING
XRT_MODULE_MONADO_CLI
XRT_MODULE_MONADO_GUI
XRT_MODULE_OPENXR_STATE_TRACKER
# XRT_FEATURE_* - Feature flags
XRT_FEATURE_AHARDWARE_BUFFER
XRT_FEATURE_CLIENT_DEBUG_GUI
XRT_FEATURE_CLIENT_WITHOUT_SERVICE
XRT_FEATURE_COLOR_LOG
XRT_FEATURE_DEBUG_GUI
XRT_FEATURE_OPENXR
XRT_FEATURE_OPENXR_DEBUG_UTILS
XRT_FEATURE_RENDERDOC
XRT_FEATURE_SERVICE
XRT_FEATURE_SERVICE_SYSTEMD
XRT_FEATURE_SLAM
XRT_FEATURE_SSE2
XRT_FEATURE_STEAMVR_PLUGIN
XRT_FEATURE_TRACING
XRT_FEATURE_WINDOW_PEEK
# XRT_FEATURE_OPENXR_* - OpenXR extensions
XRT_FEATURE_OPENXR_ACTIVE_ACTION_SET_PRIORITY
XRT_FEATURE_OPENXR_BODY_TRACKING_BD
XRT_FEATURE_OPENXR_BODY_TRACKING_CALIBRATION_META
XRT_FEATURE_OPENXR_BODY_TRACKING_FB
XRT_FEATURE_OPENXR_BODY_TRACKING_FULL_BODY_META
XRT_FEATURE_OPENXR_DISPLAY_REFRESH_RATE
XRT_FEATURE_OPENXR_FACE_TRACKING2_FB
XRT_FEATURE_OPENXR_FACE_TRACKING_ANDROID
XRT_FEATURE_OPENXR_FACIAL_TRACKING_HTC
XRT_FEATURE_OPENXR_FORCE_FEEDBACK_CURL
XRT_FEATURE_OPENXR_FUTURE_EXT
XRT_FEATURE_OPENXR_HAND_TRACKING_DATA_SOURCE_EXT
XRT_FEATURE_OPENXR_HAND_TRACKING_EXT
XRT_FEATURE_OPENXR_HAPTIC_PCM
XRT_FEATURE_OPENXR_HEADLESS
XRT_FEATURE_OPENXR_INTERACTION_BYTEDANCE
XRT_FEATURE_OPENXR_INTERACTION_EXT_EYE_GAZE
XRT_FEATURE_OPENXR_INTERACTION_EXT_HAND
XRT_FEATURE_OPENXR_INTERACTION_EXT_PALM_POSE
XRT_FEATURE_OPENXR_INTERACTION_FB_PROXIMITY
XRT_FEATURE_OPENXR_INTERACTION_KHR_GENERIC
XRT_FEATURE_OPENXR_INTERACTION_ML2
XRT_FEATURE_OPENXR_INTERACTION_MNDX
XRT_FEATURE_OPENXR_INTERACTION_MSFT_HAND
XRT_FEATURE_OPENXR_INTERACTION_OPPO
XRT_FEATURE_OPENXR_INTERACTION_TOUCH_PLUS
XRT_FEATURE_OPENXR_INTERACTION_TOUCH_PRO
XRT_FEATURE_OPENXR_INTERACTION_VIVE_COSMOS
XRT_FEATURE_OPENXR_INTERACTION_VIVE_FOCUS3
XRT_FEATURE_OPENXR_INTERACTION_WINMR
XRT_FEATURE_OPENXR_LAYER_COLOR_SCALE_BIAS
XRT_FEATURE_OPENXR_LAYER_CUBE
XRT_FEATURE_OPENXR_LAYER_CYLINDER
XRT_FEATURE_OPENXR_LAYER_DEPTH
XRT_FEATURE_OPENXR_LAYER_EQUIRECT1
XRT_FEATURE_OPENXR_LAYER_EQUIRECT2
XRT_FEATURE_OPENXR_LAYER_FB_ALPHA_BLEND
XRT_FEATURE_OPENXR_LAYER_FB_DEPTH_TEST
XRT_FEATURE_OPENXR_LAYER_FB_IMAGE_LAYOUT
XRT_FEATURE_OPENXR_LAYER_FB_PASSTHROUGH
XRT_FEATURE_OPENXR_LAYER_FB_SETTINGS
XRT_FEATURE_OPENXR_OVERLAY
XRT_FEATURE_OPENXR_PERFORMANCE_SETTINGS
XRT_FEATURE_OPENXR_PLANE_DETECTION
XRT_FEATURE_OPENXR_SPACE_LOCAL_FLOOR
XRT_FEATURE_OPENXR_SPACE_UNBOUNDED
XRT_FEATURE_OPENXR_USER_PRESENCE
XRT_FEATURE_OPENXR_VISIBILITY_MASK
XRT_FEATURE_OPENXR_VULKAN_SWAPCHAIN_FORMAT_LIST
XRT_FEATURE_OPENXR_XDEV_SPACE
# XRT_INSTALL_* - Installation options
XRT_INSTALL_ABSOLUTE_SYSTEMD_UNIT_FILES
XRT_INSTALL_SYSTEMD_UNIT_FILES
# XRT_BUILD_DRIVER_* - Device drivers
XRT_BUILD_DRIVER_ANDROID
XRT_BUILD_DRIVER_ARDUINO
XRT_BUILD_DRIVER_BLUBUR_S1
XRT_BUILD_DRIVER_DAYDREAM
XRT_BUILD_DRIVER_DEPTHAI
XRT_BUILD_DRIVER_EUROC
XRT_BUILD_DRIVER_HANDTRACKING
XRT_BUILD_DRIVER_HDK
XRT_BUILD_DRIVER_HYDRA
XRT_BUILD_DRIVER_ILLIXR
XRT_BUILD_DRIVER_NS
XRT_BUILD_DRIVER_OHMD
XRT_BUILD_DRIVER_OPENGLOVES
XRT_BUILD_DRIVER_PSMV
XRT_BUILD_DRIVER_PSSENSE
XRT_BUILD_DRIVER_PSVR
XRT_BUILD_DRIVER_QWERTY
XRT_BUILD_DRIVER_REALSENSE
XRT_BUILD_DRIVER_REMOTE
XRT_BUILD_DRIVER_RIFT
XRT_BUILD_DRIVER_RIFT_S
XRT_BUILD_DRIVER_ROKID
XRT_BUILD_DRIVER_SIMULATED
XRT_BUILD_DRIVER_SIMULAVR
XRT_BUILD_DRIVER_SOLARXR
XRT_BUILD_DRIVER_STEAMVR_LIGHTHOUSE
XRT_BUILD_DRIVER_SURVIVE
XRT_BUILD_DRIVER_TWRAP
XRT_BUILD_DRIVER_ULV2
XRT_BUILD_DRIVER_ULV5
XRT_BUILD_DRIVER_VF
XRT_BUILD_DRIVER_VIVE
XRT_BUILD_DRIVER_WMR
XRT_BUILD_DRIVER_XREAL_AIR
# Additional options
BUILD_TESTING
XRT_BUILD_SAMPLES
)
# Create a list of options to keep unchanged
set(_keep_options ${MSO_KEEP})
# Create a list of options to enable
set(_enable_options ${MSO_ENABLE})
# Process all options
foreach(_option ${_ALL_XRT_OPTIONS})
# Check if this option should be kept unchanged
list(FIND _keep_options ${_option} _keep_index)
if(NOT _keep_index EQUAL -1)
# Skip this option
continue()
endif()
# Check if this option should be enabled
list(FIND _enable_options ${_option} _enable_index)
if(NOT _enable_index EQUAL -1)
set(${_option} ON PARENT_SCOPE)
else()
set(${_option} OFF PARENT_SCOPE)
endif()
endforeach()
endfunction()