The open source OpenXR runtime
at main 38 kB view raw
1# Copyright 2018-2024, Collabora, Ltd. 2# SPDX-License-Identifier: BSL-1.0 3 4cmake_minimum_required(VERSION 3.22) 5project( 6 XRT 7 VERSION 25.0.0 8 LANGUAGES C CXX 9 DESCRIPTION "Monado(XRT) by Collabora et al" 10 ) 11 12# CMake 3.11 introduced CMP0072 - Prefer GLVND 13if(POLICY CMP0072) 14 cmake_policy(SET CMP0072 NEW) 15endif() 16 17# CMake 3.14 introduced CMP0083 - Control generation of Position Independent Executable (PIE) 18if(POLICY CMP0083) 19 cmake_policy(SET CMP0083 NEW) 20endif() 21 22set(_default_absolute ON) 23if(WIN32) 24 set(_default_absolute OFF) 25endif() 26option( 27 XRT_OPENXR_INSTALL_ABSOLUTE_RUNTIME_PATH 28 "Use the absolute path to the runtime in the installed manifest, rather than a bare filename." 29 OFF 30 ) 31option( 32 XRT_OPENXR_INSTALL_MANIFEST_RELATIVE_RUNTIME_PATH 33 "If XRT_OPENXR_INSTALL_ABSOLUTE_RUNTIME_PATH is off, use a relative path from the manifest to the runtime." 34 ON 35 ) 36if(NOT WIN32 AND NOT ANDROID) 37 option( 38 XRT_OPENXR_INSTALL_ACTIVE_RUNTIME 39 "Make Monado the system-wide default OpenXR runtime on install (requires superuser permissions)" 40 OFF 41 ) 42endif() 43 44set(CMAKE_C_STANDARD 11) 45set(CMAKE_C_STANDARD_REQUIRED ON) 46 47set(CMAKE_CXX_STANDARD 20) 48set(CMAKE_CXX_STANDARD_REQUIRED ON) 49 50# Generates a `compile_commands.json` to help IDE intergration 51set(CMAKE_EXPORT_COMPILE_COMMANDS ON) 52 53### 54# Dependencies 55### 56list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") 57list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/sanitizers") 58include(OptionWithDeps) 59include(SPIR-V) 60include(GNUInstallDirs) 61include(MergeJSON) 62if(NOT GIT_DESC) 63 include(GetGitRevisionDescription) 64 git_describe(GIT_DESC "--always") 65endif() 66if(NOT ${CMAKE_VERSION} VERSION_LESS 3.9) 67 include(CheckIPOSupported) 68 check_ipo_supported(RESULT HAS_IPO) 69endif() 70 71# Android SDK doesn't look for 3.8 and 3.9, which is what new distros ship with. 72set(Python_ADDITIONAL_VERSIONS 3.8 3.9) 73if(NOT CMAKE_VERSION VERSION_LESS 3.12) 74 find_package(Python3 REQUIRED Interpreter) 75 set(PYTHON_EXECUTABLE Python3::Interpreter) 76else() 77 find_program(PYTHON_EXECUTABLE python3) 78 if(PYTHON_EXECUTABLE MATCHES "WindowsApps") 79 # If you receive this error, you will have to install Python 3 or try harder to tell CMake where it is. 80 message( 81 FATAL_ERROR 82 "Found WindowsApps alias for Python. Make sure Python3 is installed, then choose 'Manage App Execution Aliases' in Start and disable the aliases for Python." 83 ) 84 endif() 85endif() 86 87# 88# For backwards compatibility with both version schemes, 89# we find any Eigen3 package (in config mode) and check 90# the version manually rather than using find_package 91# version constraints. 92# 93find_package(Eigen3 REQUIRED NO_MODULE) 94if(Eigen3_VERSION VERSION_LESS "3.3") 95 message(FATAL_ERROR "Eigen3 version ${Eigen3_VERSION} is too old, need at least 3.3") 96endif() 97 98find_package(Vulkan MODULE) 99find_package(HIDAPI MODULE) 100find_package(bluetooth MODULE) 101find_package(OpenHMD MODULE) 102find_package( 103 OpenCV 104 COMPONENTS 105 core 106 calib3d 107 highgui 108 imgproc 109 imgcodecs 110 features2d 111 video 112 CONFIG 113 ) 114find_package(Libusb1 MODULE) 115find_package(JPEG MODULE) 116find_package(realsense2 CONFIG) 117find_package(depthai CONFIG) 118find_package(SDL2 CONFIG) 119find_package(ZLIB MODULE) 120find_package(cJSON MODULE) 121find_package(LeapV2 MODULE) 122find_package(LeapSDK 5 CONFIG) 123find_package(ONNXRuntime MODULE) 124if(NOT WIN32) 125 find_package(EGL MODULE) 126 find_package(Percetto MODULE) 127 find_package(Systemd MODULE) 128 find_package(OpenGLES MODULE COMPONENTS V3) 129 find_library(RT_LIBRARY rt) 130endif() 131if(NOT ANDROID AND NOT MSVC) 132 find_package(PkgConfig MODULE) 133endif() 134if(ANDROID) 135 find_library(ANDROID_LIBRARY android) 136 find_library(ANDROID_LOG_LIBRARY log) 137endif() 138# D3D is disabled on MINGW as WIL is lacking official support. 139# If necessary, please refer to https://github.com/microsoft/wil/pull/467 140if(WIN32 AND NOT MINGW) 141 find_package(wil CONFIG) 142 set(D3D11_LIBRARY d3d11) 143 set(D3D12_LIBRARY d3d12) 144 set(DXGI_LIBRARY dxgi) 145 set(WINDOWSAPP_LIBRARY WindowsApp) 146endif() 147 148#https://github.com/arsenm/sanitizers-cmake 149find_package(Sanitizers MODULE) 150 151add_library(xrt-pthreads INTERFACE) 152if(WIN32 AND NOT MINGW) 153 find_package(pthreads_windows REQUIRED) 154 target_link_libraries(xrt-pthreads INTERFACE PThreads4W::PThreads4W_CXXEXC) 155else() 156 set(CMAKE_THREAD_PREFER_PTHREAD ON) 157 find_package(Threads) 158 target_link_libraries(xrt-pthreads INTERFACE Threads::Threads) 159 target_compile_definitions(xrt-pthreads INTERFACE _GNU_SOURCE) 160endif() 161 162if(PKGCONFIG_FOUND AND NOT ANDROID) 163 # @TODO Turn into a find_package LIBUVC file. 164 pkg_check_modules(LIBUVC libuvc) 165endif() 166 167find_package(OpenGL) 168set(OPENGL_WITHOUT_GLX_FOUND ${OPENGL_FOUND}) 169if(CMAKE_SYSTEM_NAME STREQUAL "Linux") 170 set(XRT_HAVE_LINUX YES) 171 # Compositor backend 172 find_package(X11) 173 174 find_package(udev REQUIRED) 175 set(XRT_HAVE_V4L2 TRUE) 176 if(PKGCONFIG_FOUND) 177 pkg_check_modules(XRANDR xrandr) 178 179 pkg_check_modules(XCB xcb xcb-randr x11-xcb) 180 181 pkg_search_module(WAYLAND wayland-client) 182 pkg_search_module(WAYLAND_SCANNER wayland-scanner) 183 pkg_search_module(WAYLAND_PROTOCOLS wayland-protocols) 184 pkg_search_module(LIBDRM IMPORTED_TARGET libdrm) 185 endif() 186 find_package(OpenGL COMPONENTS GLX) 187 pkg_search_module(DBUS dbus-1) 188 pkg_search_module(LIBBSD libbsd) 189endif() 190 191if(XRT_HAVE_LINUX OR MINGW) 192 pkg_check_modules(GST gstreamer-1.0 gstreamer-app-1.0 gstreamer-video-1.0) 193 pkg_check_modules(SURVIVE IMPORTED_TARGET survive) 194endif() 195 196# Find openvr library 197find_library(OPENVR_LIBRARIES NAMES openvr_api) 198if(OPENVR_LIBRARIES) 199 set(OPENVR_FOUND on) 200 message(STATUS "Found OpenVR: " ${OPENVR_LIBRARIES}) 201else() 202 set(OPENVR_FOUND off) 203 message(STATUS "OpenVR not found") 204endif() 205 206# ILLIXR 207set(ILLIXR_PATH 208 "" 209 CACHE PATH "Path to ILLIXR headers" 210 ) 211 212# This one is named differently because that's what CTest uses 213option(BUILD_TESTING "Enable building of the test suite?" ON) 214 215if(CMAKE_SYSTEM_NAME STREQUAL "Linux") 216 set(XRT_HAVE_INTERNAL_HID ON) 217endif() 218 219# cmake-format: off 220option_with_deps(CMAKE_INTERPROCEDURAL_OPTIMIZATION "Enable inter-procedural (link-time) optimization" DEFAULT OFF DEPENDS HAS_IPO) 221option(XRT_HAVE_TRACY "Enable Tracy support for tracing, make sure to set XRT_FEATURE_TRACING as well." OFF) 222 223# Graphics deps to use (sorted in each group, groups thematic and ordered to handle internal deps: e.g. EGL and SDL2 need OpenGL/GLES) 224option_with_deps(XRT_HAVE_OPENGL "Enable OpenGL Graphics API support" DEPENDS OPENGL_WITHOUT_GLX_FOUND) 225option_with_deps(XRT_HAVE_OPENGL_GLX "Enable OpenGL Graphics API support on X11 (GLX)" DEPENDS XRT_HAVE_OPENGL OpenGL_GLX_FOUND) 226option_with_deps(XRT_HAVE_OPENGLES "Enable OpenGL-ES Graphics API support" DEPENDS OpenGLES_FOUND) 227 228option_with_deps(XRT_HAVE_EGL "Enable OpenGL(-ES) on EGL Graphics API support" DEPENDS EGL_FOUND "XRT_HAVE_OPENGL OR XRT_HAVE_OPENGLES") 229option_with_deps(XRT_HAVE_SDL2 "Enable use of SDL2" DEPENDS SDL2_FOUND XRT_HAVE_OPENGL) 230 231option_with_deps(XRT_HAVE_DXGI "Use DXGI APIs for some Windows-specific functionality" DEPENDS DXGI_LIBRARY) 232option_with_deps(XRT_HAVE_WIL "Use WIL for Windows-specific functionality" DEPENDS wil_FOUND) 233option_with_deps(XRT_HAVE_WINRT "Use WinRT APIs for some Windows-specific functionality" DEPENDS WINDOWSAPP_LIBRARY) 234 235option_with_deps(XRT_HAVE_VULKAN "Enable Vulkan Graphics API support (also needed for compositor)" DEPENDS VULKAN_FOUND) 236option_with_deps(XRT_HAVE_D3D11 "Enable Direct3D 11 Graphics API support" DEPENDS D3D11_LIBRARY XRT_HAVE_VULKAN XRT_HAVE_DXGI XRT_HAVE_WIL) 237option_with_deps(XRT_HAVE_D3D12 "Enable Direct3D 12 Graphics API support" DEPENDS D3D12_LIBRARY XRT_HAVE_D3D11 XRT_HAVE_VULKAN XRT_HAVE_DXGI XRT_HAVE_WIL) 238option_with_deps(XRT_HAVE_WAYLAND "Enable Wayland support" DEPENDS WAYLAND_FOUND WAYLAND_SCANNER_FOUND WAYLAND_PROTOCOLS_FOUND LIBDRM_FOUND) 239option_with_deps(XRT_HAVE_WAYLAND_DIRECT "Enable Wayland direct support" DEPENDS XRT_HAVE_WAYLAND LIBDRM_FOUND "WAYLAND_PROTOCOLS_VERSION VERSION_GREATER_EQUAL 1.22") 240option_with_deps(XRT_HAVE_XCB "Enable xcb support" DEPENDS XCB_FOUND) 241option_with_deps(XRT_HAVE_XLIB "Enable xlib support" DEPENDS X11_FOUND) 242option_with_deps(XRT_HAVE_XRANDR "Enable xlib-xrandr support" DEPENDS XRANDR_FOUND) 243 244# System deps to use (sorted) 245option_with_deps(XRT_HAVE_OPENCV "Enable OpenCV backend" DEPENDS OpenCV_FOUND) 246option_with_deps(XRT_HAVE_DBUS "Enable dbus support (for BLE support)" DEPENDS DBUS_FOUND) 247option_with_deps(XRT_HAVE_LIBBSD "Enable libbsd support" DEPENDS LIBBSD_FOUND) 248option_with_deps(XRT_HAVE_LIBUDEV "Enable libudev (used for device probing on Linux)" DEPENDS UDEV_FOUND) 249option_with_deps(XRT_HAVE_PERCETTO "Enable percetto support" DEPENDS PERCETTO_FOUND) 250option_with_deps(XRT_HAVE_SYSTEMD "Enable systemd support" DEPENDS Systemd_FOUND) 251 252# Only use system cJSON if it includes https://github.com/DaveGamble/cJSON/pull/377 253option_with_deps(XRT_HAVE_SYSTEM_CJSON "Enable cJSON from system, instead of bundled source" DEPENDS CJSON_FOUND "cJSON_VERSION VERSION_GREATER_EQUAL 1.7.13") 254 255# Hand tracking deps 256option_with_deps(XRT_HAVE_ONNXRUNTIME "Enable ONNX runtime support" DEPENDS ONNXRUNTIME_FOUND) 257 258option(XRT_MODULE_IPC "Enable the build of the IPC layer" ON) 259option(XRT_MODULE_COMPOSITOR "Enable the compositor at all" ON) 260option_with_deps(XRT_MODULE_COMPOSITOR_MAIN "Build main compositor host functionality" DEPENDS 261 XRT_MODULE_COMPOSITOR 262 XRT_HAVE_VULKAN 263 ) 264option_with_deps(XRT_MODULE_COMPOSITOR_NULL "Build testing null compositor" DEPENDS XRT_MODULE_COMPOSITOR XRT_HAVE_VULKAN) 265option_with_deps(XRT_MODULE_MERCURY_HANDTRACKING "Enable Mercury hand tracking" DEPENDS XRT_HAVE_OPENCV XRT_HAVE_ONNXRUNTIME) 266 267option(XRT_MODULE_MONADO_CLI "Build monado-cli" ON) 268option_with_deps(XRT_MODULE_MONADO_GUI "Build monado-gui" DEPENDS XRT_HAVE_SDL2) 269option(XRT_MODULE_AUX_VIVE "Build aux_vive" ON) 270option(XRT_MODULE_OPENXR_STATE_TRACKER "Build OpenXR State Tracker" ON) 271 272# Feature configuration (sorted) 273option_with_deps(XRT_FEATURE_AHARDWARE_BUFFER "Enable AHardwareBuffer for XrSwapchain images on Android (API-level 26+) platforms" DEPENDS ANDROID) 274option_with_deps(XRT_FEATURE_COLOR_LOG "Enable logging in color on supported platforms" DEPENDS XRT_HAVE_LINUX) 275option_with_deps(XRT_FEATURE_OPENXR "Build OpenXR runtime target" DEPENDS XRT_MODULE_OPENXR_STATE_TRACKER "XRT_MODULE_COMPOSITOR_MAIN OR XRT_MODULE_COMPOSITOR_NULL") 276set(XRT_FEATURE_OPENXR_DEBUG_UTILS OFF) # Has never been enabled 277option_with_deps(XRT_FEATURE_RENDERDOC "Enable RenderDoc API" DEPENDS "RT_LIBRARY OR WIN32 OR ANDROID") 278option_with_deps(XRT_FEATURE_SERVICE "Enable separate service module for OpenXR runtime" DEPENDS XRT_MODULE_IPC XRT_FEATURE_OPENXR) 279option_with_deps(XRT_FEATURE_SERVICE_SYSTEMD "Enable systemd socket activation of the service" DEPENDS XRT_HAVE_SYSTEMD XRT_FEATURE_SERVICE) 280option_with_deps(XRT_FEATURE_SLAM "Enable SLAM tracking support" DEPENDS XRT_HAVE_OPENCV XRT_HAVE_LINUX) 281option(XRT_FEATURE_SSE2 "Build using SSE2 instructions, if building for 32-bit x86" ON) 282option_with_deps(XRT_FEATURE_STEAMVR_PLUGIN "Build SteamVR plugin" DEPENDS "NOT ANDROID") 283option_with_deps(XRT_FEATURE_TRACING "Enable debug tracing on supported platforms" DEFAULT OFF DEPENDS "XRT_HAVE_PERCETTO OR XRT_HAVE_TRACY") 284option_with_deps(XRT_FEATURE_WINDOW_PEEK "Enable a window that displays the content of the HMD on screen" DEPENDS XRT_HAVE_SDL2) 285option_with_deps(XRT_FEATURE_DEBUG_GUI "Enable debug window to be used" DEPENDS XRT_HAVE_SDL2) 286 287if (XRT_FEATURE_SERVICE) 288 # Disable the client debug gui by default for out-of-proc - 289 # too many clients have problems with depending on SDL/GStreamer/etc and we rarely use it in this configuration 290 option_with_deps(XRT_FEATURE_CLIENT_DEBUG_GUI "Allow clients to have their own instances of the debug gui" DEFAULT OFF DEPENDS XRT_FEATURE_DEBUG_GUI) 291else() 292 # Enable the client debug gui by default for in-proc - 293 # In in-proc, the client debug gui is the same as the server debug gui, and we use it a lot in this configuration 294 option_with_deps(XRT_FEATURE_CLIENT_DEBUG_GUI "Allow clients to have their own instances of the debug gui" DEFAULT ON DEPENDS XRT_FEATURE_DEBUG_GUI) 295 296 # This is an advanced feature, for if you want the client module without the service. 297 # Typically only used in derived runtimes or to build the client and service with different build options 298 # (such as Android C++ standard library) that do not affect the IPC ABI. 299 option_with_deps(XRT_FEATURE_CLIENT_WITHOUT_SERVICE "Enable building OpenXR runtime as IPC client without simultaneously building the service" DEFAULT OFF DEPENDS XRT_MODULE_IPC XRT_FEATURE_OPENXR "NOT XRT_FEATURE_SERVICE") 300endif() 301 302# Do not manually set XRT_FEATURE_IPC_CLIENT, it is always computed 303if(XRT_FEATURE_SERVICE OR XRT_FEATURE_CLIENT_WITHOUT_SERVICE) 304 set(XRT_FEATURE_IPC_CLIENT ON) 305else() 306 set(XRT_FEATURE_IPC_CLIENT OFF) 307endif() 308 309# systemd detailed config 310option_with_deps(XRT_INSTALL_SYSTEMD_UNIT_FILES "Install user unit files for systemd socket activation on installation" DEPENDS XRT_HAVE_SYSTEMD) 311option_with_deps(XRT_INSTALL_ABSOLUTE_SYSTEMD_UNIT_FILES "Use an absolute path to monado-system in installed user unit files for systemd socket activation" DEPENDS XRT_HAVE_SYSTEMD) 312 313# Driver deps to use (sorted, though there are some internal dependencies) 314option_with_deps(XRT_HAVE_BLUETOOTH "Enable Bluetooth (legacy, non-ble)" DEPENDS BLUETOOTH_FOUND) 315option_with_deps(XRT_HAVE_GST "Enable gstreamer" DEPENDS GST_FOUND) 316option_with_deps(XRT_HAVE_HIDAPI "Enable libhidapi (used for PSVR)" DEPENDS HIDAPI_FOUND) 317option_with_deps(XRT_HAVE_JPEG "Enable jpeg code (used for some video drivers)" DEPENDS JPEG_FOUND) 318option_with_deps(XRT_HAVE_LIBUSB "Enable libusb (used for most drivers)" DEPENDS LIBUSB1_FOUND) 319option_with_deps(XRT_HAVE_LIBUVC "Enable libuvc video driver" DEPENDS LIBUVC_FOUND XRT_HAVE_LIBUSB) 320option_with_deps(XRT_HAVE_REALSENSE "Enable RealSense support" DEPENDS realsense2_FOUND) 321option_with_deps(XRT_HAVE_OPENVR "Enable OpenVR support" DEPENDS OPENVR_FOUND) 322 323# Drivers to build (sorted) 324option_with_deps(XRT_BUILD_DRIVER_ANDROID "Enable Android sensors driver" DEPENDS ANDROID) 325option_with_deps(XRT_BUILD_DRIVER_ARDUINO "Enable Arduino input device with BLE" DEPENDS XRT_HAVE_DBUS) 326option_with_deps(XRT_BUILD_DRIVER_BLUBUR_S1 "Enable 3Glasses Blubur S1 device driver" DEPENDS XRT_HAVE_INTERNAL_HID) 327option_with_deps(XRT_BUILD_DRIVER_DAYDREAM "Enable the Google Daydream View controller driver (BLE)" DEPENDS XRT_HAVE_DBUS) 328option_with_deps(XRT_BUILD_DRIVER_DEPTHAI "DepthAI" DEPENDS depthai_FOUND) 329option_with_deps(XRT_BUILD_DRIVER_EUROC "Enable EuRoC dataset driver for SLAM evaluation" DEPENDS XRT_HAVE_OPENCV "NOT MSVC") 330option_with_deps(XRT_BUILD_DRIVER_HANDTRACKING "Enable Camera Hand Tracking driver" DEPENDS XRT_MODULE_MERCURY_HANDTRACKING) 331option_with_deps(XRT_BUILD_DRIVER_TWRAP "Enable Tracking Wrapper drivers" "NOT ANDROID") # only depends on imu 332option_with_deps(XRT_BUILD_DRIVER_HDK "Enable HDK driver" DEPENDS XRT_HAVE_INTERNAL_HID) 333option_with_deps(XRT_BUILD_DRIVER_HYDRA "Enable Hydra driver" DEPENDS XRT_HAVE_INTERNAL_HID) 334option_with_deps(XRT_BUILD_DRIVER_ILLIXR "Enable ILLIXR driver" DEPENDS ILLIXR_PATH) 335option_with_deps(XRT_BUILD_DRIVER_NS "Enable North Star driver" "NOT ANDROID") 336option_with_deps(XRT_BUILD_DRIVER_OHMD "Enable OpenHMD driver" DEPENDS OPENHMD_FOUND) 337option_with_deps(XRT_BUILD_DRIVER_OPENGLOVES "Enable OpenGloves driver" DEPENDS XRT_HAVE_LIBUDEV XRT_HAVE_BLUETOOTH) 338option_with_deps(XRT_BUILD_DRIVER_PSMV "Enable Playstation Move driver" DEPENDS XRT_HAVE_INTERNAL_HID "NOT MSVC") 339option_with_deps(XRT_BUILD_DRIVER_PSSENSE "Enable PlayStation Sense driver" DEPENDS XRT_HAVE_INTERNAL_HID) 340option_with_deps(XRT_BUILD_DRIVER_PSVR "Enable PSVR HMD driver" DEPENDS XRT_HAVE_HIDAPI) 341option_with_deps(XRT_BUILD_DRIVER_QWERTY "Enable Qwerty driver" DEPENDS XRT_HAVE_SDL2) 342option_with_deps(XRT_BUILD_DRIVER_REALSENSE "Enable RealSense device driver" DEPENDS XRT_HAVE_REALSENSE) 343option_with_deps(XRT_BUILD_DRIVER_REMOTE "Enable remote debugging driver" DEPENDS "XRT_HAVE_LINUX OR ANDROID OR WIN32") 344option_with_deps(XRT_BUILD_DRIVER_RIFT "Enable Oculus Rift (DK2) device driver") 345option_with_deps(XRT_BUILD_DRIVER_RIFT_S "Enable Oculus Rift S device driver" DEPENDS XRT_HAVE_V4L2) 346option_with_deps(XRT_BUILD_DRIVER_ROKID "Enable Rokid driver" DEPENDS "XRT_HAVE_LIBUSB") 347option_with_deps(XRT_BUILD_DRIVER_STEAMVR_LIGHTHOUSE "Enable SteamVR Lighthouse driver" DEPENDS XRT_HAVE_LINUX XRT_MODULE_AUX_VIVE) 348option_with_deps(XRT_BUILD_DRIVER_SURVIVE "Enable libsurvive driver" DEPENDS SURVIVE_FOUND XRT_MODULE_AUX_VIVE) 349option_with_deps(XRT_BUILD_DRIVER_ULV2 "Enable Ultraleap v2 driver" DEPENDS LeapV2_FOUND) 350option_with_deps(XRT_BUILD_DRIVER_ULV5 "Enable Ultraleap v5 driver" DEPENDS LeapSDK_FOUND) 351option_with_deps(XRT_BUILD_DRIVER_VF "Build video frame driver (for video file support, uses gstreamer)" DEPENDS XRT_HAVE_GST) 352option_with_deps(XRT_BUILD_DRIVER_VIVE "Enable driver for HTC Vive, Vive Pro, Valve Index, and their controllers" DEPENDS ZLIB_FOUND XRT_HAVE_LINUX XRT_MODULE_AUX_VIVE) 353option_with_deps(XRT_BUILD_DRIVER_WMR "Enable Windows Mixed Reality driver" DEPENDS LINUX) 354option_with_deps(XRT_BUILD_DRIVER_XREAL_AIR "Enable Xreal Air HMD driver" DEPENDS XRT_HAVE_HIDAPI) 355option_with_deps(XRT_BUILD_DRIVER_SIMULAVR "Enable simula driver" DEPENDS XRT_HAVE_REALSENSE) 356option_with_deps(XRT_BUILD_DRIVER_SOLARXR "Enable SolarXR driver" DEPENDS XRT_HAVE_LINUX XRT_MODULE_IPC) 357option(XRT_BUILD_DRIVER_SIMULATED "Enable simulated driver" ON) 358 359option(XRT_BUILD_SAMPLES "Enable compiling sample code implementations that will not be linked into any final targets" ON) 360set(XRT_IPC_MSG_SOCK_FILENAME monado_comp_ipc CACHE STRING "Service socket filename") 361set(XRT_IPC_SERVICE_PID_FILENAME monado.pid CACHE STRING "Service pidfile filename") 362set(XRT_OXR_RUNTIME_SUFFIX monado CACHE STRING "OpenXR client library suffix") 363 364# Most users won't touch these. 365mark_as_advanced(XRT_MODULE_COMPOSITOR_MAIN XRT_MODULE_COMPOSITOR_NULL XRT_FEATURE_OPENXR) 366 367# Misc extension support. 368option(XRT_FEATURE_OPENXR_ACTIVE_ACTION_SET_PRIORITY "Enable XR_EXT_active_action_set_priority" ON) 369option(XRT_FEATURE_OPENXR_BODY_TRACKING_FB "Enable XR_FB_body_tracking" OFF) 370option(XRT_FEATURE_OPENXR_DISPLAY_REFRESH_RATE "Enable XR_FB_display_refresh_rate" ON) 371option(XRT_FEATURE_OPENXR_FACE_TRACKING_ANDROID "Enable XR_ANDROID_face_tracking" OFF) 372option(XRT_FEATURE_OPENXR_FACE_TRACKING2_FB "Enable XR_FB_face_tracking2" OFF) 373option(XRT_FEATURE_OPENXR_FACIAL_TRACKING_HTC "Enable XR_HTC_facial_tracking" OFF) 374option(XRT_FEATURE_OPENXR_FORCE_FEEDBACK_CURL "Enable XR_MNDX_force_feedback_curl" ON) 375option(XRT_FEATURE_OPENXR_FUTURE_EXT "Enable XR_EXT_future" ON) 376option(XRT_FEATURE_OPENXR_HAND_TRACKING_EXT "Enable XR_EXT_hand_tracking" ON) 377option_with_deps(XRT_FEATURE_OPENXR_HAND_TRACKING_DATA_SOURCE_EXT DEPENDS XRT_FEATURE_OPENXR_HAND_TRACKING_EXT) 378option(XRT_FEATURE_OPENXR_HAPTIC_PCM "Enable XR_FB_haptic_pcm" OFF) 379option(XRT_FEATURE_OPENXR_HEADLESS "Enable XR_MND_headless" ON) 380option(XRT_FEATURE_OPENXR_OVERLAY "Enable XR_EXTX_overlay" ON) 381option(XRT_FEATURE_OPENXR_PERFORMANCE_SETTINGS "Enable XR_EXT_performance_settings" OFF) 382option(XRT_FEATURE_OPENXR_PLANE_DETECTION "Enable XR_EXT_plane_detection" OFF) 383option(XRT_FEATURE_OPENXR_USER_PRESENCE "Enable XR_EXT_user_presence" ON) 384option(XRT_FEATURE_OPENXR_VISIBILITY_MASK "Enable XR_KHR_visibility_mask" ON) 385option(XRT_FEATURE_OPENXR_VULKAN_SWAPCHAIN_FORMAT_LIST "Enable XR_KHR_vulkan_swapchain_format_list" ON) 386option(XRT_FEATURE_OPENXR_XDEV_SPACE "Enable XR_MNDX_xdev_space" ON) 387option_with_deps(XRT_FEATURE_OPENXR_BODY_TRACKING_FULL_BODY_META "Enable XR_META_body_tracking_full_body" DEPENDS XRT_FEATURE_OPENXR_BODY_TRACKING_FB) 388option_with_deps(XRT_FEATURE_OPENXR_BODY_TRACKING_CALIBRATION_META "Enable XR_META_body_tracking_calibration" DEPENDS XRT_FEATURE_OPENXR_BODY_TRACKING_FULL_BODY_META) 389 390# Interaction extension support. 391option(XRT_FEATURE_OPENXR_INTERACTION_EXT_EYE_GAZE "Enable XR_EXT_eye_gaze_interaction" ON) 392option(XRT_FEATURE_OPENXR_INTERACTION_EXT_HAND "Enable XR_EXT_hand_interaction" ON) 393option(XRT_FEATURE_OPENXR_INTERACTION_EXT_PALM_POSE "Enable XR_EXT_palm_pose" OFF) 394option(XRT_FEATURE_OPENXR_INTERACTION_ML2 "Enable XR_ML_ml2_controller_interaction" ON) 395option(XRT_FEATURE_OPENXR_INTERACTION_MNDX "Enable XR_MNDX_ball_on_a_stick_controller, XR_MNDX_hydra and XR_MNDX_system_buttons" ON) 396option(XRT_FEATURE_OPENXR_INTERACTION_MSFT_HAND "Enable XR_MSFT_hand_interaction" OFF) 397option(XRT_FEATURE_OPENXR_INTERACTION_OPPO "Enable XR_OPPO_controller_interaction" ON) 398option(XRT_FEATURE_OPENXR_INTERACTION_WINMR "Enable XR_EXT_hp_mixed_reality_controller and XR_EXT_samsung_odyssey_controller" ON) 399option(XRT_FEATURE_OPENXR_INTERACTION_BYTEDANCE "Enable XR_BD_controller_interaction" ON) 400option(XRT_FEATURE_OPENXR_INTERACTION_VIVE_COSMOS "Enable XR_HTC_vive_cosmos_controller_interaction" ON) 401option(XRT_FEATURE_OPENXR_INTERACTION_VIVE_FOCUS3 "Enable XR_HTC_vive_focus3_controller_interaction" ON) 402option(XRT_FEATURE_OPENXR_INTERACTION_FB_PROXIMITY "Enable XR_FB_touch_controller_proximity" ON) 403option(XRT_FEATURE_OPENXR_INTERACTION_TOUCH_PRO "Enable XR_FB_touch_controller_pro" ON) 404option(XRT_FEATURE_OPENXR_INTERACTION_TOUCH_PLUS "Enable XR_META_touch_controller_plus" ON) 405 406# Defaults for OpenXR layer support 407option(XRT_FEATURE_OPENXR_LAYER_DEPTH "Enable XR_KHR_composition_layer_depth" ON) 408option(XRT_FEATURE_OPENXR_LAYER_COLOR_SCALE_BIAS "Enable XR_KHR_composition_layer_color_scale_bias" OFF) 409option(XRT_FEATURE_OPENXR_LAYER_CUBE "Enable XR_KHR_composition_layer_cube" OFF) 410option(XRT_FEATURE_OPENXR_LAYER_CYLINDER "Enable XR_KHR_composition_layer_cylinder" ON) 411option(XRT_FEATURE_OPENXR_LAYER_EQUIRECT2 "Enable XR_KHR_composition_layer_equirect2" ON) 412option(XRT_FEATURE_OPENXR_LAYER_EQUIRECT1 "Enable XR_KHR_composition_layer_equirect" OFF) 413option(XRT_FEATURE_OPENXR_LAYER_FB_ALPHA_BLEND "Enable XR_FB_composition_layer_alpha_blend" OFF) 414option(XRT_FEATURE_OPENXR_LAYER_FB_IMAGE_LAYOUT "Enable XR_FB_composition_layer_image_layout" OFF) 415option(XRT_FEATURE_OPENXR_LAYER_FB_SETTINGS "Enable XR_FB_composition_layer_settings" OFF) 416option(XRT_FEATURE_OPENXR_LAYER_FB_DEPTH_TEST "Enable XR_FB_composition_layer_depth_test" OFF) 417option(XRT_FEATURE_OPENXR_LAYER_FB_PASSTHROUGH "Enable XR_FB_passthrough" OFF) 418 419# Defaults for OpenXR spaces 420option(XRT_FEATURE_OPENXR_SPACE_LOCAL_FLOOR "Enable XR_EXT_local_floor" ON) 421option(XRT_FEATURE_OPENXR_SPACE_UNBOUNDED "Enable XR_MSFT_unbounded_reference_space" ON) 422 423# cmake-format: on 424 425# You can set this from a superproject to add a driver 426# All drivers must be listed in here to be included in the generated header! 427list( 428 APPEND 429 AVAILABLE_DRIVERS 430 "ANDROID" 431 "ARDUINO" 432 "BLUBUR_S1" 433 "DAYDREAM" 434 "SIMULATED" 435 "HANDTRACKING" 436 "HDK" 437 "HYDRA" 438 "ILLIXR" 439 "NS" 440 "OHMD" 441 "OPENGLOVES" 442 "PSMV" 443 "PSSENSE" 444 "PSVR" 445 "REALSENSE" 446 "REMOTE" 447 "RIFT" 448 "RIFT_S" 449 "ROKID" 450 "SURVIVE" 451 "V4L2" 452 "ULV2" 453 "ULV5" 454 "VF" 455 "DEPTHAI" 456 "VIVE" 457 "QWERTY" 458 "WMR" 459 "EUROC" 460 "SIMULAVR" 461 "TWRAP" 462 "XREAL_AIR" 463 "STEAMVR_LIGHTHOUSE" 464 "SOLARXR" 465 ) 466 467# Package name needs to be known by the native code itself. 468# Can be overridden from outside/command line 469if(ANDROID AND NOT XRT_ANDROID_PACKAGE) 470 if(XRT_FEATURE_SERVICE) 471 set(XRT_ANDROID_PACKAGE "org.freedesktop.monado.openxr_runtime.out_of_process") 472 else() 473 set(XRT_ANDROID_PACKAGE "org.freedesktop.monado.openxr_runtime.in_process") 474 endif() 475endif() 476 477### 478# Flags 479### 480 481if(XRT_HAVE_TRACY AND XRT_HAVE_PERCETTO) 482 message(FATAL_ERROR "Max one tracing backend, XRT_HAVE_TRACY and XRT_HAVE_PERCETTO enabled") 483endif() 484 485if(XRT_HAVE_XLIB AND NOT XRT_HAVE_XRANDR) 486 message(WARNING "XRT_HAVE_XLIB requires XRT_HAVE_XRANDR but XRT_HAVE_XRANDR is disabled") 487endif() 488 489if(XRT_HAVE_OPENGLES AND NOT XRT_HAVE_EGL) 490 message(FATAL_ERROR "XRT_HAVE_OPENGLES requires XRT_HAVE_EGL but XRT_HAVE_EGL is disabled") 491endif() 492 493if(XRT_HAVE_SDL2) 494 if(NOT TARGET SDL2::SDL2 AND DEFINED SDL2_LIBRARIES) 495 add_library(SDL2::SDL2 INTERFACE IMPORTED) 496 target_include_directories(SDL2::SDL2 SYSTEM INTERFACE "${SDL2_INCLUDE_DIRS}") 497 target_link_libraries(SDL2::SDL2 INTERFACE "${SDL2_LIBRARIES}") 498 endif() 499endif() 500 501# Vulkan flags for the shared Vulkan code. 502if(XRT_HAVE_XCB) 503 set(VK_USE_PLATFORM_XCB_KHR TRUE) 504endif() 505if(XRT_HAVE_XCB 506 AND XRT_HAVE_XLIB 507 AND XRT_HAVE_XRANDR 508 ) 509 set(VK_USE_PLATFORM_XLIB_XRANDR_EXT TRUE) 510endif() 511if(XRT_HAVE_WAYLAND) 512 set(VK_USE_PLATFORM_WAYLAND_KHR TRUE) 513endif() 514if(ANDROID) 515 set(VK_USE_PLATFORM_ANDROID_KHR TRUE) 516endif() 517if(WIN32) 518 set(VK_USE_PLATFORM_WIN32_KHR TRUE) 519endif() 520if(XRT_HAVE_VULKAN AND NOT ANDROID) 521 set(VK_USE_PLATFORM_DISPLAY_KHR TRUE) 522endif() 523 524include(CompilerFlags.cmake) 525 526# Default to PIC code 527if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.14.0") 528 include(CheckPIESupported) 529 check_pie_supported() 530endif() 531set(CMAKE_POSITION_INDEPENDENT_CODE ON) 532 533# Describe IPO setting 534if(CMAKE_INTERPROCEDURAL_OPTIMIZATION) 535 message(STATUS "Inter-procedural optimization enabled") 536endif() 537 538# Make sure we have pretty colours 539option(DISABLE_COLORED_OUTPUT "Always produce ANSI-colored output (GNU/Clang only)." OFF) 540 541if(NOT DISABLE_COLORED_OUTPUT) 542 if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") 543 add_compile_options(-fdiagnostics-color=always) 544 elseif( 545 "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL 546 "AppleClang" 547 ) 548 add_compile_options(-fcolor-diagnostics) 549 endif() 550endif() 551 552### 553# Descend into the source 554### 555 556add_subdirectory(src) 557add_subdirectory(doc) 558 559if(BUILD_TESTING) 560 include(CTest) 561 add_subdirectory(tests) 562endif() 563 564### 565# Keep these lists sorted 566### 567# cmake-format: off 568message(STATUS "#####----- Config -----#####") 569message(STATUS "# GIT_DESC: ${GIT_DESC}") 570message(STATUS "#") 571message(STATUS "# BLUETOOTH: ${XRT_HAVE_BLUETOOTH}") 572message(STATUS "# D3D11: ${XRT_HAVE_D3D11}") 573message(STATUS "# D3D12: ${XRT_HAVE_D3D12}") 574message(STATUS "# DBUS: ${XRT_HAVE_DBUS}") 575message(STATUS "# EGL: ${XRT_HAVE_EGL}") 576message(STATUS "# GST (GStreamer): ${XRT_HAVE_GST}") 577message(STATUS "# HIDAPI: ${XRT_HAVE_HIDAPI}") 578message(STATUS "# JPEG: ${XRT_HAVE_JPEG}") 579message(STATUS "# LIBBSD: ${XRT_HAVE_LIBBSD}") 580message(STATUS "# LIBUSB: ${XRT_HAVE_LIBUSB}") 581message(STATUS "# LIBUVC: ${XRT_HAVE_LIBUVC}") 582message(STATUS "# ONNXRUNTIME: ${XRT_HAVE_ONNXRUNTIME}") 583message(STATUS "# OPENCV: ${XRT_HAVE_OPENCV}") 584message(STATUS "# OPENGL: ${XRT_HAVE_OPENGL}") 585message(STATUS "# OPENGLES: ${XRT_HAVE_OPENGLES}") 586message(STATUS "# OPENGL_GLX: ${XRT_HAVE_OPENGL_GLX}") 587message(STATUS "# PERCETTO: ${XRT_HAVE_PERCETTO}") 588message(STATUS "# REALSENSE: ${XRT_HAVE_REALSENSE}") 589message(STATUS "# OPENVR: ${XRT_HAVE_OPENVR}") 590message(STATUS "# SDL2: ${XRT_HAVE_SDL2}") 591message(STATUS "# SYSTEM_CJSON: ${XRT_HAVE_SYSTEM_CJSON}") 592message(STATUS "# SYSTEMD: ${XRT_HAVE_SYSTEMD}") 593message(STATUS "# TRACY: ${XRT_HAVE_TRACY}") 594message(STATUS "# VULKAN: ${XRT_HAVE_VULKAN}") 595message(STATUS "# WAYLAND: ${XRT_HAVE_WAYLAND}") 596message(STATUS "# WAYLAND_DIRECT: ${XRT_HAVE_WAYLAND_DIRECT}") 597message(STATUS "# XCB: ${XRT_HAVE_XCB}") 598message(STATUS "# XLIB: ${XRT_HAVE_XLIB}") 599message(STATUS "# XRANDR: ${XRT_HAVE_XRANDR}") 600message(STATUS "#") 601message(STATUS "# MODULE_AUX_VIVE: ${XRT_MODULE_AUX_VIVE}") 602message(STATUS "# MODULE_COMPOSITOR: ${XRT_MODULE_COMPOSITOR}") 603message(STATUS "# MODULE_COMPOSITOR_MAIN: ${XRT_MODULE_COMPOSITOR_MAIN}") 604message(STATUS "# MODULE_COMPOSITOR_NULL: ${XRT_MODULE_COMPOSITOR_NULL}") 605message(STATUS "# MODULE_MERCURY_HANDTRACKING: ${XRT_MODULE_MERCURY_HANDTRACKING}") 606message(STATUS "# MODULE_IPC: ${XRT_MODULE_IPC}") 607message(STATUS "# MODULE_MONADO_GUI: ${XRT_MODULE_MONADO_GUI}") 608message(STATUS "# MODULE_MONADO_CLI: ${XRT_MODULE_MONADO_CLI}") 609message(STATUS "# MODULE_OPENXR_STATE_TRACKER: ${XRT_MODULE_OPENXR_STATE_TRACKER}") 610message(STATUS "#") 611message(STATUS "# FEATURE_AHARDWARE_BUFFER: ${XRT_FEATURE_AHARDWARE_BUFFER}") 612message(STATUS "# FEATURE_CLIENT_DEBUG_GUI: ${XRT_FEATURE_CLIENT_DEBUG_GUI}") 613message(STATUS "# FEATURE_COLOR_LOG: ${XRT_FEATURE_COLOR_LOG}") 614message(STATUS "# FEATURE_DEBUG_GUI: ${XRT_FEATURE_DEBUG_GUI}") 615message(STATUS "# FEATURE_OPENXR: ${XRT_FEATURE_OPENXR}") 616message(STATUS "# FEATURE_OPENXR_ACTIVE_ACTION_SET_PRIORITY: ${XRT_FEATURE_OPENXR_ACTIVE_ACTION_SET_PRIORITY}") 617message(STATUS "# FEATURE_OPENXR_BODY_TRACKING_FB: ${XRT_FEATURE_OPENXR_BODY_TRACKING_FB}") 618message(STATUS "# FEATURE_OPENXR_BODY_TRACKING_CALIBRATION_META: ${XRT_FEATURE_OPENXR_BODY_TRACKING_CALIBRATION_META}") 619message(STATUS "# FEATURE_OPENXR_BODY_TRACKING_FULL_BODY_META: ${XRT_FEATURE_OPENXR_BODY_TRACKING_FULL_BODY_META}") 620message(STATUS "# FEATURE_OPENXR_FACE_TRACKING2_FB: ${XRT_FEATURE_OPENXR_FACE_TRACKING2_FB}") 621message(STATUS "# FEATURE_OPENXR_DEBUG_UTILS: ${XRT_FEATURE_OPENXR_DEBUG_UTILS}") 622message(STATUS "# FEATURE_OPENXR_DISPLAY_REFRESH_RATE: ${XRT_FEATURE_OPENXR_DISPLAY_REFRESH_RATE}") 623message(STATUS "# FEATURE_OPENXR_FACIAL_TRACKING_HTC: ${XRT_FEATURE_OPENXR_FACIAL_TRACKING_HTC}") 624message(STATUS "# FEATURE_OPENXR_FORCE_FEEDBACK_CURL: ${XRT_FEATURE_OPENXR_FORCE_FEEDBACK_CURL}") 625message(STATUS "# FEATURE_OPENXR_FUTURE_EXT: ${XRT_FEATURE_OPENXR_FUTURE_EXT}") 626message(STATUS "# FEATURE_OPENXR_HAND_TRACKING_EXT: ${XRT_FEATURE_OPENXR_HAND_TRACKING_EXT}") 627message(STATUS "# FEATURE_OPENXR_HAND_TRACKING_DATA_SOURCE_EXT: ${XRT_FEATURE_OPENXR_HAND_TRACKING_DATA_SOURCE_EXT}") 628message(STATUS "# FEATURE_OPENXR_HAPTIC_PCM: ${XRT_FEATURE_OPENXR_HAPTIC_PCM}") 629message(STATUS "# FEATURE_OPENXR_HEADLESS: ${XRT_FEATURE_OPENXR_HEADLESS}") 630message(STATUS "# FEATURE_OPENXR_INTERACTION_EXT_EYE_GAZE: ${XRT_FEATURE_OPENXR_INTERACTION_EXT_EYE_GAZE}") 631message(STATUS "# FEATURE_OPENXR_INTERACTION_EXT_HAND: ${XRT_FEATURE_OPENXR_INTERACTION_EXT_HAND}") 632message(STATUS "# FEATURE_OPENXR_INTERACTION_EXT_PALM_POSE: ${XRT_FEATURE_OPENXR_INTERACTION_EXT_PALM_POSE}") 633message(STATUS "# FEATURE_OPENXR_INTERACTION_ML2: ${XRT_FEATURE_OPENXR_INTERACTION_ML2}") 634message(STATUS "# FEATURE_OPENXR_INTERACTION_MNDX: ${XRT_FEATURE_OPENXR_INTERACTION_MNDX}") 635message(STATUS "# FEATURE_OPENXR_INTERACTION_MSFT_HAND: ${XRT_FEATURE_OPENXR_INTERACTION_MSFT_HAND}") 636message(STATUS "# FEATURE_OPENXR_INTERACTION_OPPO: ${XRT_FEATURE_OPENXR_INTERACTION_OPPO}") 637message(STATUS "# FEATURE_OPENXR_INTERACTION_WINMR: ${XRT_FEATURE_OPENXR_INTERACTION_WINMR}") 638message(STATUS "# FEATURE_OPENXR_LAYER_COLOR_SCALE_BIAS: ${XRT_FEATURE_OPENXR_LAYER_COLOR_SCALE_BIAS}") 639message(STATUS "# FEATURE_OPENXR_LAYER_CUBE: ${XRT_FEATURE_OPENXR_LAYER_CUBE}") 640message(STATUS "# FEATURE_OPENXR_LAYER_CYLINDER: ${XRT_FEATURE_OPENXR_LAYER_CYLINDER}") 641message(STATUS "# FEATURE_OPENXR_LAYER_DEPTH: ${XRT_FEATURE_OPENXR_LAYER_DEPTH}") 642message(STATUS "# FEATURE_OPENXR_LAYER_EQUIRECT1: ${XRT_FEATURE_OPENXR_LAYER_EQUIRECT1}") 643message(STATUS "# FEATURE_OPENXR_LAYER_EQUIRECT2: ${XRT_FEATURE_OPENXR_LAYER_EQUIRECT2}") 644message(STATUS "# FEATURE_OPENXR_LAYER_FB_ALPHA_BLEND: ${XRT_FEATURE_OPENXR_LAYER_FB_ALPHA_BLEND}") 645message(STATUS "# FEATURE_OPENXR_LAYER_FB_DEPTH_TEST: ${XRT_FEATURE_OPENXR_LAYER_FB_DEPTH_TEST}") 646message(STATUS "# FEATURE_OPENXR_LAYER_FB_IMAGE_LAYOUT ${XRT_FEATURE_OPENXR_LAYER_FB_IMAGE_LAYOUT}") 647message(STATUS "# FEATURE_OPENXR_LAYER_FB_SETTINGS: ${XRT_FEATURE_OPENXR_LAYER_FB_SETTINGS}") 648message(STATUS "# FEATURE_OPENXR_LAYER_FB_PASSTHROUGH: ${XRT_FEATURE_OPENXR_LAYER_FB_PASSTHROUGH}") 649message(STATUS "# FEATURE_OPENXR_OVERLAY: ${XRT_FEATURE_OPENXR_OVERLAY}") 650message(STATUS "# FEATURE_OPENXR_PERFORMANCE_SETTINGS: ${XRT_FEATURE_OPENXR_PERFORMANCE_SETTINGS}") 651message(STATUS "# FEATURE_OPENXR_PLANE_DETECTION: ${XRT_FEATURE_OPENXR_PLANE_DETECTION}") 652message(STATUS "# FEATURE_OPENXR_USER_PRESENCE: ${XRT_FEATURE_OPENXR_USER_PRESENCE}") 653message(STATUS "# FEATURE_OPENXR_SPACE_LOCAL_FLOOR: ${XRT_FEATURE_OPENXR_SPACE_LOCAL_FLOOR}") 654message(STATUS "# FEATURE_OPENXR_SPACE_UNBOUNDED: ${XRT_FEATURE_OPENXR_SPACE_UNBOUNDED}") 655message(STATUS "# FEATURE_OPENXR_VISIBILITY_MASK: ${XRT_FEATURE_OPENXR_VISIBILITY_MASK}") 656message(STATUS "# FEATURE_OPENXR_VULKAN_SWAPCHAIN_FORMAT_LIST: ${XRT_FEATURE_OPENXR_VULKAN_SWAPCHAIN_FORMAT_LIST}") 657message(STATUS "# FEATURE_OPENXR_XDEV_SPACE: ${XRT_FEATURE_OPENXR_XDEV_SPACE}") 658message(STATUS "# FEATURE_RENDERDOC: ${XRT_FEATURE_RENDERDOC}") 659message(STATUS "# FEATURE_SERVICE: ${XRT_FEATURE_SERVICE}") 660message(STATUS "# FEATURE_SERVICE_SYSTEMD: ${XRT_FEATURE_SERVICE_SYSTEMD}") 661message(STATUS "# FEATURE_SLAM: ${XRT_FEATURE_SLAM}") 662message(STATUS "# FEATURE_SSE2: ${XRT_FEATURE_SSE2}") 663message(STATUS "# FEATURE_STEAMVR_PLUGIN: ${XRT_FEATURE_STEAMVR_PLUGIN}") 664message(STATUS "# FEATURE_TRACING: ${XRT_FEATURE_TRACING}") 665message(STATUS "# FEATURE_WINDOW_PEEK: ${XRT_FEATURE_WINDOW_PEEK}") 666message(STATUS "#") 667message(STATUS "# DRIVER_ANDROID: ${XRT_BUILD_DRIVER_ANDROID}") 668message(STATUS "# DRIVER_ARDUINO: ${XRT_BUILD_DRIVER_ARDUINO}") 669message(STATUS "# DRIVER_BLUBUR_S1: ${XRT_BUILD_DRIVER_BLUBUR_S1}") 670message(STATUS "# DRIVER_DAYDREAM: ${XRT_BUILD_DRIVER_DAYDREAM}") 671message(STATUS "# DRIVER_DEPTHAI: ${XRT_BUILD_DRIVER_DEPTHAI}") 672message(STATUS "# DRIVER_EUROC: ${XRT_BUILD_DRIVER_EUROC}") 673message(STATUS "# DRIVER_HANDTRACKING: ${XRT_BUILD_DRIVER_HANDTRACKING}") 674message(STATUS "# DRIVER_HDK: ${XRT_BUILD_DRIVER_HDK}") 675message(STATUS "# DRIVER_HYDRA: ${XRT_BUILD_DRIVER_HYDRA}") 676message(STATUS "# DRIVER_ILLIXR: ${XRT_BUILD_DRIVER_ILLIXR}") 677message(STATUS "# DRIVER_NS: ${XRT_BUILD_DRIVER_NS}") 678message(STATUS "# DRIVER_OHMD: ${XRT_BUILD_DRIVER_OHMD}") 679message(STATUS "# DRIVER_OPENGLOVES: ${XRT_BUILD_DRIVER_OPENGLOVES}") 680message(STATUS "# DRIVER_PSMV: ${XRT_BUILD_DRIVER_PSMV}") 681message(STATUS "# DRIVER_PSSENSE: ${XRT_BUILD_DRIVER_PSSENSE}") 682message(STATUS "# DRIVER_PSVR: ${XRT_BUILD_DRIVER_PSVR}") 683message(STATUS "# DRIVER_QWERTY: ${XRT_BUILD_DRIVER_QWERTY}") 684message(STATUS "# DRIVER_REALSENSE: ${XRT_BUILD_DRIVER_REALSENSE}") 685message(STATUS "# DRIVER_REMOTE: ${XRT_BUILD_DRIVER_REMOTE}") 686message(STATUS "# DRIVER_RIFT: ${XRT_BUILD_DRIVER_RIFT}") 687message(STATUS "# DRIVER_RIFT_S: ${XRT_BUILD_DRIVER_RIFT_S}") 688message(STATUS "# DRIVER_ROKID: ${XRT_BUILD_DRIVER_ROKID}") 689message(STATUS "# DRIVER_SIMULATED: ${XRT_BUILD_DRIVER_SIMULATED}") 690message(STATUS "# DRIVER_SIMULAVR: ${XRT_BUILD_DRIVER_SIMULAVR}") 691message(STATUS "# DRIVER_SURVIVE: ${XRT_BUILD_DRIVER_SURVIVE}") 692message(STATUS "# DRIVER_TWRAP: ${XRT_BUILD_DRIVER_TWRAP}") 693message(STATUS "# DRIVER_ULV2: ${XRT_BUILD_DRIVER_ULV2}") 694message(STATUS "# DRIVER_ULV5: ${XRT_BUILD_DRIVER_ULV5}") 695message(STATUS "# DRIVER_VF: ${XRT_BUILD_DRIVER_VF}") 696message(STATUS "# DRIVER_VIVE: ${XRT_BUILD_DRIVER_VIVE}") 697message(STATUS "# DRIVER_WMR: ${XRT_BUILD_DRIVER_WMR}") 698message(STATUS "# DRIVER_XREAL_AIR: ${XRT_BUILD_DRIVER_XREAL_AIR}") 699message(STATUS "# DRIVER_STEAMVR_LIGHTHOUSE: ${XRT_BUILD_DRIVER_STEAMVR_LIGHTHOUSE}") 700message(STATUS "# DRIVER_SOLARXR: ${XRT_BUILD_DRIVER_SOLARXR}") 701message(STATUS "#####----- Config -----#####") 702# cmake-format: on 703 704if(XRT_FEATURE_SERVICE AND NOT XRT_FEATURE_OPENXR) 705 message(FATAL_ERROR "XRT_FEATURE_SERVICE requires XRT_FEATURE_OPENXR to be enabled") 706endif() 707if(XRT_FEATURE_SERVICE AND NOT XRT_MODULE_IPC) 708 message(FATAL_ERROR "XRT_FEATURE_SERVICE requires XRT_MODULE_IPC to be enabled") 709endif() 710if(XRT_FEATURE_OPENXR_DEBUG_UTILS) 711 message(FATAL_ERROR "XRT_FEATURE_OPENXR_DEBUG_UTILS is not fully implemented") 712endif() 713if(XRT_MODULE_COMPOSITOR_MAIN AND NOT XRT_SILENCE_CMAKE_LAYER_ERRORS) 714 if(XRT_FEATURE_OPENXR_LAYER_CUBE) 715 message( 716 FATAL_ERROR "Main compositor doesn't support cube layer " 717 "(set XRT_SILENCE_CMAKE_LAYER_ERRORS to silence)" 718 ) 719 endif() 720 if(XRT_FEATURE_OPENXR_LAYER_EQUIRECT1) 721 message( 722 FATAL_ERROR "Main compositor doesn't support equirect1 layer " 723 "(set XRT_SILENCE_CMAKE_LAYER_ERRORS to silence)" 724 ) 725 endif() 726endif()