The open source OpenXR runtime
at main 561 lines 16 kB view raw
1# Copyright 2019-2025, Collabora, Ltd. 2# 3# SPDX-License-Identifier: BSL-1.0 4 5set(ENABLED_HEADSET_DRIVERS) 6set(ENABLED_DRIVERS) 7 8add_library(drv_includes INTERFACE) 9target_include_directories(drv_includes INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}) 10 11if(XRT_BUILD_DRIVER_ARDUINO) 12 add_library( 13 drv_arduino STATIC arduino/arduino_device.c arduino/arduino_interface.h 14 arduino/arduino_prober.c 15 ) 16 target_link_libraries(drv_arduino PRIVATE xrt-interfaces aux_util aux_os aux_os_ble) 17 list(APPEND ENABLED_DRIVERS arduino) 18endif() 19 20add_library(drv_cemu STATIC ht_ctrl_emu/ht_ctrl_emu.cpp ht_ctrl_emu/ht_ctrl_emu_interface.h) 21target_link_libraries(drv_cemu PRIVATE xrt-interfaces aux_generated_bindings_helpers aux_util) 22list(APPEND ENABLED_HEADSET_DRIVERS drv_cemu) 23 24if(XRT_BUILD_DRIVER_BLUBUR_S1) 25 add_library( 26 drv_blubur_s1 STATIC blubur_s1/blubur_s1_hmd.c blubur_s1/blubur_s1_interface.h 27 blubur_s1/blubur_s1_prober.c 28 ) 29 target_link_libraries(drv_blubur_s1 PRIVATE xrt-interfaces aux_util aux_os) 30 list(APPEND ENABLED_DRIVERS blubur_s1) 31endif() 32 33if(XRT_BUILD_DRIVER_DAYDREAM) 34 add_library( 35 drv_daydream STATIC daydream/daydream_device.c daydream/daydream_device.h 36 daydream/daydream_interface.h daydream/daydream_prober.c 37 ) 38 target_link_libraries(drv_daydream PRIVATE xrt-interfaces aux_util aux_os aux_os_ble) 39 list(APPEND ENABLED_DRIVERS daydream) 40endif() 41 42if(XRT_BUILD_DRIVER_DEPTHAI) 43 add_library(drv_depthai STATIC depthai/depthai_driver.cpp depthai/depthai_interface.h) 44 target_link_libraries( 45 drv_depthai 46 PRIVATE 47 xrt-interfaces 48 aux_os 49 aux_util 50 aux_tracking 51 ${OpenCV_LIBRARIES} 52 depthai::core 53 XLink 54 ) 55 target_include_directories(drv_depthai PRIVATE ${OpenCV_INCLUDE_DIRS}) 56 list(APPEND ENABLED_DRIVERS depthai) 57endif() 58 59if(XRT_BUILD_DRIVER_SIMULATED) 60 add_library( 61 drv_simulated STATIC simulated/simulated_controller.c simulated/simulated_hmd.c 62 simulated/simulated_interface.h simulated/simulated_prober.c 63 ) 64 target_link_libraries(drv_simulated PRIVATE xrt-interfaces aux_util) 65 list(APPEND ENABLED_HEADSET_DRIVERS simulated) 66endif() 67 68if(XRT_BUILD_DRIVER_TWRAP) 69 add_library(drv_twrap STATIC twrap/twrap_slam.c twrap/twrap_interface.h) 70 target_link_libraries(drv_twrap PRIVATE xrt-interfaces aux_util) 71endif() 72 73if(XRT_BUILD_DRIVER_QWERTY) 74 add_library( 75 drv_qwerty STATIC 76 qwerty/qwerty_device.c 77 qwerty/qwerty_device.h 78 qwerty/qwerty_interface.h 79 qwerty/qwerty_prober.c 80 qwerty/qwerty_sdl.c 81 ) 82 target_link_libraries(drv_qwerty PRIVATE xrt-interfaces aux_util SDL2::SDL2) 83 list(APPEND ENABLED_DRIVERS qwerty) 84 85 add_library(drv_qwerty_includes INTERFACE) 86 target_include_directories(drv_qwerty_includes INTERFACE qwerty) 87endif() 88 89if(XRT_BUILD_DRIVER_HDK) 90 set(HDK_SOURCE_FILES) 91 92 add_library( 93 drv_hdk STATIC hdk/hdk_device.cpp hdk/hdk_device.h hdk/hdk_interface.h 94 hdk/hdk_prober.c 95 ) 96 target_link_libraries(drv_hdk PRIVATE xrt-interfaces aux_math) 97 list(APPEND ENABLED_HEADSET_DRIVERS hdk) 98endif() 99 100if(XRT_BUILD_DRIVER_HYDRA) 101 set(HYDRA_SOURCE_FILES) 102 103 add_library(drv_hydra STATIC hydra/hydra_driver.c hydra/hydra_interface.h) 104 target_link_libraries(drv_hydra PRIVATE xrt-interfaces aux_os aux_util) 105 list(APPEND ENABLED_DRIVERS hydra) 106endif() 107 108if(XRT_BUILD_DRIVER_NS) 109 add_library( 110 drv_ns STATIC 111 north_star/distortion_3d/utility_northstar.h 112 north_star/distortion_3d/deformation_northstar.h 113 north_star/distortion_3d/deformation_northstar.cpp 114 north_star/ns_hmd.h 115 north_star/ns_hmd.c 116 north_star/ns_interface.h 117 ) 118 target_link_libraries(drv_ns PRIVATE xrt-interfaces aux_math xrt-external-cjson) 119 list(APPEND ENABLED_HEADSET_DRIVERS ns) 120endif() 121 122if(XRT_BUILD_DRIVER_XREAL_AIR) 123 add_library( 124 drv_xreal_air STATIC xreal_air/xreal_air_hmd.h xreal_air/xreal_air_hmd.c 125 xreal_air/xreal_air_interface.h xreal_air/xreal_air_packet.c 126 ) 127 target_link_libraries( 128 drv_xreal_air PRIVATE xrt-interfaces HIDAPI::hidapi aux_util xrt-external-cjson 129 ) 130 target_include_directories(drv_xreal_air PRIVATE ${HIDAPI_INCLUDE_DIRS}) 131 list(APPEND ENABLED_HEADSET_DRIVERS xreal_air) 132endif() 133 134if(XRT_BUILD_DRIVER_ULV2) 135 add_library(drv_ulv2 STATIC ultraleap_v2/ulv2_driver.cpp ultraleap_v2/ulv2_interface.h) 136 target_link_libraries(drv_ulv2 PRIVATE xrt-interfaces aux_util aux_math LeapV2::LeapV2) 137endif() 138 139if(XRT_BUILD_DRIVER_ULV5) 140 add_library(drv_ulv5 STATIC ultraleap_v5/ulv5_driver.cpp ultraleap_v5/ulv5_interface.h) 141 target_link_libraries(drv_ulv5 PRIVATE xrt-interfaces aux_util aux_math LeapSDK::LeapC) 142endif() 143 144if(XRT_BUILD_DRIVER_OHMD) 145 add_library( 146 drv_ohmd STATIC ohmd/oh_device.c ohmd/oh_device.h ohmd/oh_interface.h 147 ohmd/oh_prober.c 148 ) 149 target_link_libraries(drv_ohmd PRIVATE xrt-interfaces OpenHMD::OpenHMD aux_util aux_math) 150 list(APPEND ENABLED_HEADSET_DRIVERS openhmd) 151endif() 152 153if(XRT_BUILD_DRIVER_OPENGLOVES) 154 add_library( 155 drv_opengloves STATIC 156 opengloves/opengloves_interface.h 157 opengloves/opengloves_device.c 158 opengloves/opengloves_prober.c 159 opengloves/opengloves_device.h 160 opengloves/communication/serial/opengloves_serial.h 161 opengloves/communication/serial/opengloves_serial.c 162 opengloves/encoding/alpha_encoding.h 163 opengloves/encoding/alpha_encoding.cpp 164 opengloves/encoding/encoding.h 165 opengloves/communication/bluetooth/opengloves_bt_serial.h 166 opengloves/communication/bluetooth/opengloves_bt_serial.c 167 opengloves/communication/opengloves_communication.h 168 opengloves/communication/serial/opengloves_prober_serial.h 169 opengloves/communication/serial/opengloves_prober_serial.c 170 opengloves/communication/bluetooth/opengloves_prober_bt.h 171 opengloves/communication/bluetooth/opengloves_prober_bt.c 172 ) 173 target_link_libraries(drv_opengloves PRIVATE xrt-interfaces aux_util aux_os bluetooth) 174 list(APPEND ENABLED_DRIVERS opengloves) 175 176endif() 177 178if(XRT_BUILD_DRIVER_PSMV) 179 add_library(drv_psmv STATIC psmv/psmv_driver.c psmv/psmv_interface.h) 180 target_link_libraries( 181 drv_psmv 182 PRIVATE xrt-interfaces aux_util 183 PUBLIC aux_os aux_tracking 184 ) 185 list(APPEND ENABLED_DRIVERS psmv) 186endif() 187 188if(XRT_BUILD_DRIVER_PSSENSE) 189 add_library(drv_pssense STATIC pssense/pssense_driver.c pssense/pssense_interface.h) 190 target_link_libraries(drv_pssense PRIVATE aux_os aux_util) 191 list(APPEND ENABLED_DRIVERS pssense) 192endif() 193 194if(XRT_BUILD_DRIVER_PSVR) 195 add_library( 196 drv_psvr STATIC 197 psvr/psvr_device.c 198 psvr/psvr_device.h 199 psvr/psvr_interface.h 200 psvr/psvr_packet.c 201 psvr/psvr_prober.c 202 ) 203 target_link_libraries(drv_psvr PRIVATE xrt-interfaces HIDAPI::hidapi aux_util) 204 target_include_directories(drv_psvr PRIVATE ${HIDAPI_INCLUDE_DIRS}) 205 list(APPEND ENABLED_HEADSET_DRIVERS psvr) 206endif() 207 208if(XRT_BUILD_DRIVER_REALSENSE) 209 add_library( 210 drv_realsense STATIC 211 realsense/rs_ddev.c 212 realsense/rs_hdev.c 213 realsense/rs_prober.c 214 realsense/rs_driver.h 215 realsense/rs_interface.h 216 ) 217 target_link_libraries(drv_realsense PRIVATE xrt-interfaces realsense2::realsense2 aux_util) 218 list(APPEND ENABLED_HEADSET_DRIVERS rs) 219endif() 220 221if(XRT_BUILD_DRIVER_REMOTE) 222 add_library( 223 drv_remote STATIC 224 remote/r_device.c 225 remote/r_hmd.c 226 remote/r_hub.c 227 remote/r_interface.h 228 remote/r_internal.h 229 ) 230 target_link_libraries(drv_remote PRIVATE xrt-interfaces aux_util aux_vive) 231 if(WIN32) 232 target_link_libraries(drv_remote PRIVATE ws2_32) 233 endif() 234 list(APPEND ENABLED_HEADSET_DRIVERS remote) 235endif() 236 237if(XRT_BUILD_DRIVER_ROKID) 238 add_library(drv_rokid STATIC rokid/rokid_hmd.c rokid/rokid_interface.h) 239 target_link_libraries( 240 drv_rokid 241 PRIVATE 242 xrt-interfaces 243 aux_util 244 aux_os 245 aux_math 246 ${LIBUSB1_LIBRARIES} 247 ) 248 target_include_directories(drv_rokid PUBLIC ${LIBUSB1_INCLUDE_DIRS}) 249 list(APPEND ENABLED_HEADSET_DRIVERS rokid) 250endif() 251 252if(XRT_BUILD_DRIVER_RIFT) 253 add_library(drv_rift STATIC rift/rift_hmd.c rift/rift_distortion.c rift/rift_prober.c) 254 target_include_directories(drv_rift SYSTEM PRIVATE) 255 target_link_libraries( 256 drv_rift 257 PRIVATE 258 xrt-interfaces 259 aux_util 260 aux_util_sink 261 aux_math 262 xrt-external-cjson 263 xrt-external-tinyceres 264 ) 265 list(APPEND ENABLED_HEADSET_DRIVERS rift) 266endif() 267 268if(XRT_BUILD_DRIVER_RIFT_S) 269 add_library( 270 drv_rift_s STATIC 271 rift_s/rift_s_interface.h 272 rift_s/rift_s_camera.c 273 rift_s/rift_s_camera.h 274 rift_s/rift_s_controller.c 275 rift_s/rift_s_controller.h 276 rift_s/rift_s_firmware.c 277 rift_s/rift_s_firmware.h 278 rift_s/rift_s_hmd.c 279 rift_s/rift_s_hmd.h 280 rift_s/rift_s_protocol.c 281 rift_s/rift_s_protocol.h 282 rift_s/rift_s_radio.c 283 rift_s/rift_s_radio.h 284 rift_s/rift_s_tracker.c 285 rift_s/rift_s_tracker.h 286 rift_s/rift_s_util.cpp 287 rift_s/rift_s_util.h 288 rift_s/rift_s.c 289 rift_s/rift_s.h 290 ) 291 target_link_libraries( 292 drv_rift_s 293 PRIVATE 294 xrt-interfaces 295 aux_util 296 aux_util_sink 297 aux_math 298 xrt-external-cjson 299 xrt-external-tinyceres 300 ) 301 if(XRT_BUILD_DRIVER_HANDTRACKING) 302 target_link_libraries(drv_rift_s PRIVATE drv_ht) 303 endif() 304 list(APPEND ENABLED_HEADSET_DRIVERS rift-s) 305endif() 306 307set(VIVE_CONFIG_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/vive") 308if(XRT_BUILD_DRIVER_VIVE) 309 add_library( 310 drv_vive STATIC 311 vive/vive_device.h 312 vive/vive_device.c 313 vive/vive_prober.h 314 vive/vive_prober.c 315 vive/vive_protocol.c 316 vive/vive_protocol.h 317 vive/vive_controller.h 318 vive/vive_controller.c 319 vive/vive_lighthouse.h 320 vive/vive_lighthouse.c 321 vive/vive_source.h 322 vive/vive_source.c 323 ) 324 target_link_libraries( 325 drv_vive 326 PRIVATE 327 xrt-interfaces 328 aux_os 329 aux_util 330 aux_math 331 xrt-external-cjson 332 aux_vive 333 ) 334 target_link_libraries(drv_vive PRIVATE ${ZLIB_LIBRARIES}) 335 target_include_directories(drv_vive PRIVATE ${ZLIB_INCLUDE_DIRS}) 336 list(APPEND ENABLED_HEADSET_DRIVERS vive) 337endif() 338 339if(XRT_HAVE_V4L2) 340 add_library(drv_v4l2 STATIC v4l2/v4l2_driver.h v4l2/v4l2_driver.c) 341 target_link_libraries(drv_v4l2 PRIVATE xrt-interfaces aux_os aux_util) 342 list(APPEND ENABLED_DRIVERS v4l2) 343endif() 344 345if(XRT_BUILD_DRIVER_VF) 346 add_library(drv_vf STATIC vf/vf_driver.c) 347 target_link_libraries(drv_vf PRIVATE xrt-interfaces aux_os aux_util ${GST_LIBRARIES}) 348 target_include_directories(drv_vf PRIVATE ${GST_INCLUDE_DIRS}) 349 list(APPEND ENABLED_DRIVERS vf) 350endif() 351 352if(XRT_BUILD_DRIVER_HANDTRACKING) 353 add_library(drv_ht STATIC ht/ht_driver.c ht/ht_interface.h) 354 target_link_libraries( 355 drv_ht 356 PRIVATE 357 xrt-interfaces 358 aux_os 359 aux_util 360 aux_math 361 t_ht_mercury 362 hand_async 363 ) 364 365 target_include_directories(drv_ht PRIVATE ${OpenCV_INCLUDE_DIRS}) 366 list(APPEND ENABLED_DRIVERS ht) 367endif() 368 369if(XRT_BUILD_DRIVER_SURVIVE) 370 add_library(drv_survive STATIC survive/survive_driver.c survive/survive_interface.h) 371 target_link_libraries( 372 drv_survive 373 PRIVATE 374 xrt-interfaces 375 aux_os 376 aux_util 377 aux_math 378 aux_vive 379 PkgConfig::SURVIVE 380 ) 381 list(APPEND ENABLED_HEADSET_DRIVERS survive) 382endif() 383 384if(XRT_BUILD_DRIVER_ANDROID) 385 add_library( 386 drv_android STATIC android/android_prober.c android/android_prober.h 387 android/android_sensors.c android/android_sensors.h 388 ) 389 target_link_libraries( 390 drv_android 391 PRIVATE 392 xrt-interfaces 393 aux_util 394 aux_os 395 aux_android 396 ${ANDROID_LIBRARY} 397 ) 398 target_link_libraries(drv_android PRIVATE xrt-external-cardboard) 399 list(APPEND ENABLED_DRIVERS android) 400endif() 401 402if(XRT_BUILD_DRIVER_ILLIXR) 403 add_library( 404 drv_illixr STATIC 405 illixr/illixr_device.cpp 406 illixr/illixr_interface.h 407 illixr/illixr_prober.c 408 illixr/illixr_component.cpp 409 illixr/illixr_component.h 410 ) 411 target_link_libraries(drv_illixr PUBLIC ${CMAKE_DL_LIBS} xrt-interfaces aux_util aux_os) 412 target_include_directories(drv_illixr PUBLIC ${ILLIXR_PATH}) 413 list(APPEND ENABLED_HEADSET_DRIVERS illixr) 414endif() 415 416add_library(drv_multi STATIC multi_wrapper/multi.c multi_wrapper/multi.h) 417target_link_libraries(drv_multi PUBLIC xrt-interfaces aux_util) 418list(APPEND ENABLED_HEADSET_DRIVERS drv_multi) 419 420if(XRT_BUILD_DRIVER_WMR) 421 add_library( 422 drv_wmr STATIC 423 wmr/wmr_camera.h 424 wmr/wmr_common.h 425 wmr/wmr_config.c 426 wmr/wmr_config.h 427 wmr/wmr_controller_base.c 428 wmr/wmr_controller_base.h 429 wmr/wmr_controller_og.c 430 wmr/wmr_controller_hp.c 431 wmr/wmr_controller.c 432 wmr/wmr_controller.h 433 wmr/wmr_bt_controller.c 434 wmr/wmr_bt_controller.h 435 wmr/wmr_hmd.c 436 wmr/wmr_hmd.h 437 wmr/wmr_hmd_controller.c 438 wmr/wmr_hmd_controller.h 439 wmr/wmr_interface.h 440 wmr/wmr_prober.c 441 wmr/wmr_protocol.c 442 wmr/wmr_protocol.h 443 wmr/wmr_controller_protocol.c 444 wmr/wmr_controller_protocol.h 445 wmr/wmr_source.c 446 wmr/wmr_source.h 447 ) 448 target_link_libraries( 449 drv_wmr 450 PRIVATE 451 xrt-interfaces 452 aux_util 453 aux_util_sink # TODO remove this when converted to builders. 454 aux_math 455 aux_tracking 456 xrt-external-cjson 457 ) 458 list(APPEND ENABLED_HEADSET_DRIVERS wmr) 459 460 # Can only build camera support with libusb 461 if(XRT_HAVE_LIBUSB) 462 target_sources(drv_wmr PRIVATE wmr/wmr_camera.c) 463 target_include_directories(drv_wmr PUBLIC ${LIBUSB1_INCLUDE_DIRS}) 464 target_link_libraries(drv_wmr PRIVATE ${LIBUSB1_LIBRARIES}) 465 endif() 466 467 if(XRT_BUILD_DRIVER_HANDTRACKING) 468 target_link_libraries(drv_wmr PRIVATE drv_ht) 469 target_link_libraries(drv_wmr PRIVATE drv_cemu) 470 endif() 471endif() 472 473if(XRT_BUILD_DRIVER_EUROC) 474 add_library( 475 drv_euroc STATIC 476 euroc/euroc_player.cpp 477 euroc/euroc_driver.h 478 euroc/euroc_device.c 479 euroc/euroc_interface.h 480 euroc/euroc_runner.c 481 ) 482 target_link_libraries( 483 drv_euroc PRIVATE xrt-interfaces aux_util aux_tracking ${OpenCV_LIBRARIES} 484 ) 485 target_include_directories(drv_euroc PRIVATE ${OpenCV_INCLUDE_DIRS}) 486 list(APPEND ENABLED_DRIVERS euroc) 487endif() 488 489if(XRT_BUILD_DRIVER_SIMULAVR) 490 add_library(drv_svr STATIC simula/svr_hmd.c simula/svr_interface.h) 491 target_link_libraries(drv_svr PRIVATE xrt-interfaces aux_math xrt-external-cjson) 492 list(APPEND ENABLED_HEADSET_DRIVERS svr) 493endif() 494 495if(XRT_BUILD_DRIVER_STEAMVR_LIGHTHOUSE) 496 add_library(drv_vp2 STATIC vp2/vp2_hid.c vp2/vp2_hid.h) 497 target_link_libraries(drv_vp2 PRIVATE aux_os aux_util aux_math aux_vive) 498endif() 499 500if(XRT_BUILD_DRIVER_STEAMVR_LIGHTHOUSE) 501 add_library( 502 drv_steamvr_lh STATIC 503 steamvr_lh/steamvr_lh.cpp 504 steamvr_lh/device.cpp 505 steamvr_lh/interfaces/driver_manager.cpp 506 steamvr_lh/interfaces/iobuffer.cpp 507 steamvr_lh/interfaces/resources.cpp 508 steamvr_lh/interfaces/settings.cpp 509 steamvr_lh/interfaces/blockqueue.cpp 510 steamvr_lh/interfaces/paths.cpp 511 ) 512 target_link_libraries( 513 drv_steamvr_lh 514 PRIVATE 515 aux_util 516 aux_math 517 aux_vive 518 drv_vp2 519 drv_includes 520 xrt-interfaces 521 xrt-external-openvr 522 xrt-external-cjson 523 xrt-external-vdf 524 ${CMAKE_DL_LIBS} 525 ) 526 list(APPEND ENABLED_HEADSET_DRIVERS steamvr_lh) 527endif() 528 529if(XRT_BUILD_DRIVER_SOLARXR) 530 add_library( 531 drv_solarxr STATIC 532 solarxr/protocol.c 533 solarxr/protocol.h 534 solarxr/solarxr_device.c 535 solarxr/solarxr_interface.h 536 solarxr/solarxr_ipc_message.h 537 solarxr/solarxr_ipc_socket.c 538 solarxr/solarxr_ipc_socket.h 539 ) 540 target_link_libraries(drv_solarxr PRIVATE xrt-interfaces aux_util ipc_shared) 541 list(APPEND ENABLED_DRIVERS solarxr) 542endif() 543 544if(XRT_BUILD_SAMPLES) 545 # We build the sample driver to make sure it stays valid, 546 # but it never gets linked into a final target. 547 add_library( 548 drv_sample STATIC sample/sample_hmd.c sample/sample_interface.h 549 sample/sample_prober.c 550 ) 551 target_link_libraries(drv_sample PRIVATE xrt-interfaces aux_util) 552endif() 553 554if(ENABLED_HEADSET_DRIVERS) 555 set(ENABLED_DRIVERS ${ENABLED_HEADSET_DRIVERS} ${ENABLED_DRIVERS}) 556 list(SORT ENABLED_DRIVERS) 557 string(REPLACE ";" " " ENABLED_DRIVERS "${ENABLED_DRIVERS}") 558 message(STATUS "Enabled drivers: ${ENABLED_DRIVERS}") 559else() 560 message(FATAL_ERROR "You must enable at least one headset driver to build Monado.") 561endif()