Something went wrong. Try again.
The open source OpenXR runtime
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298# Copyright 2025-2026, NVIDIA CORPORATION.# Copyright 2026, Beyley Cardellio# 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).## If an option is listed as both ENABLE and KEEP, it is treated as ENABLE.## ``KEEP_SET``# List of option sets to leave unchanged (don't force to OFF).# Useful for large groups of options that auto-detect or have# good defaults.## Currently available sets are:# - OPENXR_FEATURES: covers XRT_FEATURE_OPENXR_* (but not XRT_FEATURE_OPENXR itself)# - DRIVERS: covers XRT_BUILD_DRIVER_*## If an option is included in a set and in ENABLE, it is treated as ENABLE.## All other known Monado options will be set to OFF.
function(monado_set_options) set(options "") set(oneValueArgs "") set(multiValueArgs ENABLE KEEP KEEP_SET) cmake_parse_arguments( MSO "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
set( _DRIVER_XRT_OPTIONS # XRT_BUILD_DRIVER_* - Device drivers XRT_BUILD_DRIVER_ANDROID XRT_BUILD_DRIVER_ARDUINO XRT_BUILD_DRIVER_BLUBUR_S1 XRT_BUILD_DRIVER_CONTACTGLOVE 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 )
set( _OPENXR_FEATURE_XRT_OPTIONS # 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_CONTACTGLOVE2 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_INVERTED_ALPHA 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_VARJO_QUAD_VIEWS XRT_FEATURE_OPENXR_VISIBILITY_MASK XRT_FEATURE_OPENXR_VULKAN_SWAPCHAIN_FORMAT_LIST XRT_FEATURE_OPENXR_XDEV_SPACE )
set( _DEPENDENCY_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_LIBUDEV XRT_HAVE_LIBUSB XRT_HAVE_LIBUVC XRT_HAVE_ONNXRUNTIME XRT_HAVE_OPENCV XRT_HAVE_OPENGL XRT_HAVE_OPENGL_GLX XRT_HAVE_OPENGLES 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 )
# Define all known Monado options set( _ALL_XRT_OPTIONS ${_DEPENDENCY_XRT_OPTIONS} # XRT_MODULE_* - Core modules XRT_MODULE_AUX_RENDER XRT_MODULE_AUX_SHADERS 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_UTIL XRT_MODULE_CONSTELLATION_TRACKING XRT_MODULE_IPC XRT_MODULE_MERCURY_HANDTRACKING XRT_MODULE_MONADO_CLI XRT_MODULE_MONADO_GUI XRT_MODULE_OPENVR_STATE_TRACKER 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_NO_COMPOSITOR_FOR_HEADLESS_SESSIONS XRT_FEATURE_OPENVR 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 ${_OPENXR_FEATURE_XRT_OPTIONS} # XRT_INSTALL_* - Installation options XRT_INSTALL_ABSOLUTE_SYSTEMD_UNIT_FILES XRT_INSTALL_SYSTEMD_UNIT_FILES ${_DRIVER_XRT_OPTIONS} # Additional options BUILD_TESTING XRT_BUILD_SAMPLES )
# Create a list of options to keep unchanged set(_keep_options ${MSO_KEEP})
foreach(_set ${MSO_KEEP_SET}) if(_set STREQUAL "OPENXR_FEATURES") list(APPEND _keep_options ${_OPENXR_FEATURE_XRT_OPTIONS}) elseif(_set STREQUAL "DRIVERS") list(APPEND _keep_options ${_DRIVER_XRT_OPTIONS}) elseif(_set STREQUAL "DEPENDENCIES") list(APPEND _keep_options ${_DEPENDENCY_XRT_OPTIONS}) else() message(FATAL_ERROR "Attempted to keep option set ${_set} that does not exist!") endif() endforeach()
# 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 enabled list(FIND _enable_options ${_option} _enable_index) if(NOT _enable_index EQUAL -1) set(${_option} ON PARENT_SCOPE) continue() endif()
# 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() else() set(${_option} OFF PARENT_SCOPE) endif() endforeach()endfunction()