# 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()