The open source OpenXR runtime

cmake: Switch to a new way of setting options more in line with expectations.

If you explicitly request an option, and it's not available due to dependencies,
we now error out instead of silently changing the value.

Changed files
+269 -91
cmake
doc
src
xrt
state_trackers
+4
.cmake-format.py
··· 20 20 "kwargs": {"MANIFEST_TEMPLATE": 1, "OUT_FILE": 1, "RUNTIME_TARGET": 1}, 21 21 "pargs": {"flags": [], "nargs": "*"}, 22 22 }, 23 + "option_with_deps": { 24 + "kwargs": {"DEFAULT": 1, "DEPENDS": "+"}, 25 + "pargs": {"flags": [], "nargs": "2+"}, 26 + }, 23 27 } 24 28 25 29 with section("format"):
+81 -81
CMakeLists.txt
··· 42 42 ### 43 43 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") 44 44 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/sanitizers") 45 - include(CMakeDependentOption) 45 + include(OptionWithDeps) 46 46 include(SPIR-V) 47 47 include(GNUInstallDirs) 48 48 if(NOT GIT_DESC) ··· 187 187 # This one is named differently because that's what CTest uses 188 188 option(BUILD_TESTING "Enable building of the test suite?" ON) 189 189 190 - # cmake-format: off 190 + if(CMAKE_SYSTEM_NAME STREQUAL "Linux") 191 + set(XRT_HAVE_LIBUDEV ON) 192 + set(XRT_HAVE_INTERNAL_HID ON) 193 + else() 194 + option_with_deps( 195 + XRT_HAVE_LIBUDEV 196 + "Enable libudev (used for device probing on Linux)" 197 + ON 198 + "UDEV_FOUND" 199 + OFF 200 + ) 201 + endif() 191 202 203 + # cmake-format: off 192 204 option(XRT_FEATURE_COLOR_LOG "Enable logging in color on supported platforms" ON) 193 - cmake_dependent_option(XRT_HAVE_PERCETTO "Enable percetto support" ON "PERCETTO_FOUND" OFF) 194 - cmake_dependent_option(XRT_FEATURE_TRACING "Enable debug tracing on supported platforms" OFF "XRT_HAVE_PERCETTO" OFF) 205 + option_with_deps(CMAKE_INTERPROCEDURAL_OPTIMIZATION "Enable inter-procedural (link-time) optimization" DEFAULT OFF DEPENDS HAS_IPO) 195 206 196 - cmake_dependent_option(CMAKE_INTERPROCEDURAL_OPTIMIZATION "Enable inter-procedural (link-time) optimization" OFF "HAS_IPO" OFF) 197 - cmake_dependent_option(XRT_HAVE_WAYLAND "Enable Wayland support" ON "WAYLAND_FOUND AND WAYLAND_SCANNER_FOUND AND WAYLAND_PROTOCOLS_FOUND AND LIBDRM_FOUND" OFF) 198 - cmake_dependent_option(XRT_HAVE_WAYLAND_DIRECT "Enable Wayland direct support" ON "XRT_HAVE_WAYLAND AND LIBDRM_FOUND AND WAYLAND_PROTOCOLS_VERSION VERSION_GREATER_EQUAL 1.22" OFF) 199 - cmake_dependent_option(XRT_HAVE_XLIB "Enable xlib support" ON "X11_FOUND" OFF) 200 - cmake_dependent_option(XRT_HAVE_XRANDR "Enable xlib-xrandr support" ON "XRANDR_FOUND" OFF) 201 - cmake_dependent_option(XRT_HAVE_XCB "Enable xcb support" ON "XCB_FOUND" OFF) 207 + option_with_deps(XRT_HAVE_PERCETTO "Enable percetto support" DEPENDS PERCETTO_FOUND) 208 + option_with_deps(XRT_HAVE_WAYLAND "Enable Wayland support" DEPENDS WAYLAND_FOUND WAYLAND_SCANNER_FOUND WAYLAND_PROTOCOLS_FOUND LIBDRM_FOUND) 209 + option_with_deps(XRT_HAVE_WAYLAND_DIRECT "Enable Wayland direct support" DEPENDS XRT_HAVE_WAYLAND LIBDRM_FOUND "WAYLAND_PROTOCOLS_VERSION VERSION_GREATER_EQUAL 1.22") 210 + option_with_deps(XRT_HAVE_XLIB "Enable xlib support" DEPENDS X11_FOUND) 211 + option_with_deps(XRT_HAVE_XRANDR "Enable xlib-xrandr support" DEPENDS XRANDR_FOUND) 212 + option_with_deps(XRT_HAVE_XCB "Enable xcb support" DEPENDS XCB_FOUND) 213 + option_with_deps(XRT_HAVE_VULKAN "Enable Vulkan Graphics API support (also needed for compositor)" DEPENDS VULKAN_FOUND) 214 + option_with_deps(XRT_HAVE_OPENGL "Enable OpenGL Graphics API support" DEPENDS OPENGL_WITHOUT_GLX_FOUND) 215 + option_with_deps(XRT_HAVE_OPENGL_GLX "Enable OpenGL Graphics API support on X11 (GLX)" DEPENDS XRT_HAVE_OPENGL OpenGL_GLX_FOUND) 216 + option_with_deps(XRT_HAVE_OPENGLES "Enable OpenGL-ES Graphics API support" DEPENDS OpenGLES_FOUND) 217 + option_with_deps(XRT_HAVE_EGL "Enable OpenGL(-ES) on EGL Graphics API support" DEPENDS EGL_FOUND "XRT_HAVE_OPENGL OR XRT_HAVE_OPENGLES") 218 + option_with_deps(XRT_HAVE_DBUS "Enable dbus support (for BLE support)" DEPENDS DBUS_FOUND) 219 + option_with_deps(XRT_HAVE_LIBBSD "Enable libbsd support" DEPENDS LIBBSD_FOUND) 220 + option_with_deps(XRT_FEATURE_TRACING "Enable debug tracing on supported platforms" DEFAULT OFF DEPENDS XRT_HAVE_PERCETTO) 221 + option_with_deps(XRT_FEATURE_COMPOSITOR_MAIN "Build main compositor host functionality" DEPENDS XRT_HAVE_VULKAN "XRT_HAVE_WAYLAND OR XRT_HAVE_XCB OR ANDROID OR WIN32") 222 + option_with_deps(XRT_FEATURE_OPENXR "Build OpenXR runtime target" DEPENDS XRT_FEATURE_COMPOSITOR_MAIN) 223 + option_with_deps(XRT_FEATURE_IPC "Enable the build of the IPC layer" DEPENDS "NOT WIN32") 224 + option_with_deps(XRT_FEATURE_SERVICE "Enable separate service module for OpenXR runtime" DEPENDS XRT_FEATURE_IPC XRT_FEATURE_OPENXR) 202 225 203 - cmake_dependent_option(XRT_HAVE_VULKAN "Enable Vulkan Graphics API support (also needed for compositor)" ON "VULKAN_FOUND" OFF) 204 - cmake_dependent_option(XRT_HAVE_OPENGL "Enable OpenGL Graphics API support" ON "OPENGL_WITHOUT_GLX_FOUND" OFF) 205 - cmake_dependent_option(XRT_HAVE_OPENGL_GLX "Enable OpenGL Graphics API support on X11 (GLX)" ON "XRT_HAVE_OPENGL; OpenGL_GLX_FOUND" OFF) 206 - cmake_dependent_option(XRT_HAVE_OPENGLES "Enable OpenGL-ES Graphics API support" ON "OpenGLES_FOUND" OFF) 207 - cmake_dependent_option(XRT_HAVE_EGL "Enable OpenGL(-ES) on EGL Graphics API support" ON "EGL_FOUND; XRT_HAVE_OPENGL OR XRT_HAVE_OPENGLES" OFF) 226 + option_with_deps(XRT_HAVE_SYSTEMD "Enable systemd support (for socket activation of service)" DEPENDS Systemd_FOUND XRT_FEATURE_SERVICE) 227 + option_with_deps(XRT_INSTALL_SYSTEMD_UNIT_FILES "Install user unit files for systemd socket activation on installation" DEPENDS XRT_HAVE_SYSTEMD) 228 + option_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_INSTALL_SYSTEMD_UNIT_FILES) 208 229 209 - cmake_dependent_option(XRT_HAVE_DBUS "Enable dbus support (for BLE support)" ON "DBUS_FOUND" OFF) 210 - cmake_dependent_option(XRT_FEATURE_COMPOSITOR_MAIN "Build main compositor host functionality" ON "XRT_HAVE_VULKAN; XRT_HAVE_WAYLAND OR XRT_HAVE_XCB OR ANDROID OR WIN32" OFF) 211 - cmake_dependent_option(XRT_HAVE_LIBBSD "Enable libbsd support" ON "LIBBSD_FOUND" OFF) 212 - cmake_dependent_option(XRT_FEATURE_OPENXR "Build OpenXR runtime target" ON "XRT_FEATURE_COMPOSITOR_MAIN" OFF) 213 - cmake_dependent_option(XRT_FEATURE_IPC "Enable the build of the IPC layer" ON "NOT WIN32" OFF) 214 - cmake_dependent_option(XRT_FEATURE_SERVICE "Enable separate service module for OpenXR runtime" ON "XRT_FEATURE_IPC AND XRT_FEATURE_OPENXR" OFF) 215 - cmake_dependent_option(XRT_HAVE_SYSTEMD "Enable systemd support (for socket activation of service)" ON "Systemd_FOUND AND XRT_FEATURE_SERVICE" OFF) 216 - cmake_dependent_option(XRT_INSTALL_SYSTEMD_UNIT_FILES "Install user unit files for systemd socket activation on installation" ON "XRT_HAVE_SYSTEMD" OFF) 217 - cmake_dependent_option(XRT_INSTALL_ABSOLUTE_SYSTEMD_UNIT_FILES "Use an absolute path to monado-system in installed user unit files for systemd socket activation" ON "XRT_INSTALL_SYSTEMD_UNIT_FILES" OFF) 218 - cmake_dependent_option(XRT_FEATURE_STEAMVR_PLUGIN "Build SteamVR plugin" ON "NOT ANDROID" OFF) 230 + option_with_deps(XRT_FEATURE_STEAMVR_PLUGIN "Build SteamVR plugin" DEPENDS "NOT ANDROID") 231 + option_with_deps(XRT_FEATURE_RENDERDOC "Enable RenderDoc API" DEPENDS "RT_LIBRARY OR WIN32") 232 + 233 + 234 + option_with_deps(XRT_HAVE_LIBUSB "Enable libusb (used for most drivers)" DEPENDS LIBUSB1_FOUND) 235 + option_with_deps(XRT_HAVE_HIDAPI "Enable libhidapi (used for PSVR)" DEPENDS HIDAPI_FOUND) 236 + option_with_deps(XRT_HAVE_JPEG "Enable jpeg code (used for some video drivers)" DEPENDS JPEG_FOUND) 237 + option_with_deps(XRT_HAVE_OPENCV "Enable OpenCV backend" DEPENDS OpenCV_FOUND) 238 + option_with_deps(XRT_HAVE_LIBUVC "Enable libuvc video driver" DEPENDS LIBUVC_FOUND XRT_HAVE_LIBUSB) 239 + option_with_deps(XRT_HAVE_FFMPEG "Enable ffmpeg testing video driver" DEPENDS FFMPEG_FOUND) 240 + option_with_deps(XRT_HAVE_SDL2 "Enable use of SDL2" DEPENDS SDL2_FOUND XRT_HAVE_OPENGL) 241 + option_with_deps(XRT_HAVE_SYSTEM_CJSON "Enable cJSON from system, instead of bundled source" DEPENDS CJSON_FOUND) 242 + option_with_deps(XRT_HAVE_GST "Enable gstreamer" DEPENDS GST_FOUND) 243 + option_with_deps(XRT_HAVE_REALSENSE "Enable RealSense support" DEPENDS realsense2_FOUND) 244 + option_with_deps(XRT_HAVE_ONNXRUNTIME "Enable ONNX runtime support" DEPENDS ONNXRUNTIME_FOUND) 245 + option_with_deps(XRT_HAVE_KIMERA_SLAM "Enable Kimera support" DEPENDS kimera_vio_FOUND) 246 + option_with_deps(XRT_HAVE_BASALT_SLAM "Enable Basalt support" DEPENDS basalt_FOUND) 247 + option_with_deps(XRT_HAVE_SLAM "Enable SLAM tracking support" DEPENDS SLAM XRT_HAVE_OPENCV) 248 + option_with_deps(XRT_BUILD_DRIVER_PSVR "Enable PSVR HMD driver" DEPENDS XRT_HAVE_HIDAPI) 249 + option_with_deps(XRT_BUILD_DRIVER_REALSENSE "Enable RealSense device driver" DEPENDS XRT_HAVE_REALSENSE) 250 + option_with_deps(XRT_BUILD_DRIVER_VIVE "Enable driver for HTC Vive, Vive Pro, Valve Index, and their controllers" DEPENDS ZLIB_FOUND XRT_HAVE_LINUX) 251 + option_with_deps(XRT_BUILD_DRIVER_OHMD "Enable OpenHMD driver" DEPENDS OPENHMD_FOUND) 252 + option_with_deps(XRT_BUILD_DRIVER_HANDTRACKING "Enable Camera Hand Tracking driver" DEPENDS XRT_HAVE_ONNXRUNTIME XRT_HAVE_OPENCV XRT_HAVE_V4L2) 253 + option_with_deps(XRT_BUILD_DRIVER_DAYDREAM "Enable the Google Daydream View controller driver (BLE, via D-Bus)" DEPENDS XRT_HAVE_DBUS) 254 + option_with_deps(XRT_BUILD_DRIVER_ARDUINO "Enable Arduino input device with BLE via via D-Bus" DEPENDS XRT_HAVE_DBUS) 255 + option_with_deps(XRT_BUILD_DRIVER_ILLIXR "Enable ILLIXR driver" DEPENDS ILLIXR_PATH) 256 + option(XRT_BUILD_DRIVER_DUMMY "Enable dummy driver" ON) 257 + option_with_deps(XRT_BUILD_DRIVER_ULV2 "Enable Ultraleap v2 driver" DEPENDS LeapV2_FOUND) 258 + option_with_deps(XRT_BUILD_DRIVER_REMOTE "Enable remote debugging driver" DEPENDS "XRT_HAVE_LINUX OR ANDROID") 259 + option_with_deps(XRT_BUILD_DRIVER_WMR "Enable Windows Mixed Reality driver" DEPENDS "NOT WIN32") 260 + 261 + option(XRT_BUILD_SAMPLES "Enable compiling sample code implementations that will not be linked into any final targets" ON) 262 + 263 + option_with_deps(XRT_BUILD_DRIVER_HDK "Enable HDK driver" DEPENDS XRT_HAVE_INTERNAL_HID) 264 + option_with_deps(XRT_BUILD_DRIVER_PSMV "Enable Playstation Move driver" DEPENDS XRT_HAVE_INTERNAL_HID) 265 + option_with_deps(XRT_BUILD_DRIVER_HYDRA "Enable Hydra driver" DEPENDS XRT_HAVE_INTERNAL_HID) 266 + option_with_deps(XRT_BUILD_DRIVER_NS "Enable North Star driver" DEPENDS XRT_HAVE_INTERNAL_HID) 267 + option_with_deps(XRT_BUILD_DRIVER_VF "Build video frame driver (for video file support, uses gstreamer)" DEPENDS XRT_HAVE_GST) 268 + option_with_deps(XRT_BUILD_DRIVER_DEPTHAI "DepthAI" DEPENDS depthai_FOUND) 269 + option_with_deps(XRT_BUILD_DRIVER_SURVIVE "Enable libsurvive driver" DEPENDS SURVIVE_FOUND) 270 + option_with_deps(XRT_BUILD_DRIVER_ANDROID "Enable Android sensors driver" DEPENDS ANDROID) 271 + option_with_deps(XRT_BUILD_DRIVER_QWERTY "Enable Qwerty driver" DEPENDS XRT_HAVE_SDL2) 272 + option_with_deps(XRT_BUILD_DRIVER_EUROC "Enable EuRoC dataset driver for SLAM evaluation" DEPENDS XRT_HAVE_OPENCV) 273 + 274 + # cmake-format: on 219 275 220 276 if(NOT DEFINED XRT_FEATURE_OPENXR_LAYER_DEPTH) 221 277 set(XRT_FEATURE_OPENXR_LAYER_DEPTH ON) ··· 233 289 set(XRT_FEATURE_OPENXR_LAYER_EQUIRECT1 ON) 234 290 endif() 235 291 236 - cmake_dependent_option(XRT_FEATURE_RENDERDOC "Enable RenderDoc API" OFF "RT_LIBRARY OR WIN32" OFF) 237 - 238 292 # Most users won't touch these. 239 293 mark_as_advanced(XRT_FEATURE_COMPOSITOR_MAIN XRT_FEATURE_OPENXR) 240 - 241 - 242 - if(CMAKE_SYSTEM_NAME STREQUAL "Linux") 243 - set(XRT_HAVE_LIBUDEV ON) 244 - set(XRT_HAVE_INTERNAL_HID ON) 245 - else() 246 - cmake_dependent_option(XRT_HAVE_LIBUDEV "Enable libudev (used for device probing on Linux)" ON "UDEV_FOUND" OFF) 247 - endif() 248 - 249 - cmake_dependent_option(XRT_HAVE_LIBUSB "Enable libusb (used for most drivers)" ON "LIBUSB1_FOUND" OFF) 250 - cmake_dependent_option(XRT_HAVE_HIDAPI "Enable libhidapi (used for PSVR)" ON "HIDAPI_FOUND" OFF) 251 - cmake_dependent_option(XRT_HAVE_JPEG "Enable jpeg code (used for some video drivers)" ON "JPEG_FOUND" OFF) 252 - cmake_dependent_option(XRT_HAVE_OPENCV "Enable OpenCV backend" ON "OpenCV_FOUND" OFF) 253 - cmake_dependent_option(XRT_HAVE_LIBUVC "Enable libuvc video driver" ON "LIBUVC_FOUND AND XRT_HAVE_LIBUSB" OFF) 254 - cmake_dependent_option(XRT_HAVE_FFMPEG "Enable ffmpeg testing video driver" ON "FFMPEG_FOUND" OFF) 255 - cmake_dependent_option(XRT_HAVE_SDL2 "Enable use of SDL2" ON "SDL2_FOUND AND XRT_HAVE_OPENGL" OFF) 256 - cmake_dependent_option(XRT_HAVE_SYSTEM_CJSON "Enable cJSON from system, instead of bundled source" ON "CJSON_FOUND" OFF) 257 - cmake_dependent_option(XRT_HAVE_GST "Enable gstreamer" ON "GST_FOUND" OFF) 258 - cmake_dependent_option(XRT_HAVE_REALSENSE "Enable RealSense support" ON "realsense2_FOUND" OFF) 259 - cmake_dependent_option(XRT_HAVE_ONNXRUNTIME "Enable ONNX runtime support" ON "ONNXRUNTIME_FOUND" OFF) 260 - cmake_dependent_option(XRT_HAVE_KIMERA_SLAM "Enable Kimera support" ON "kimera_vio_FOUND" OFF) 261 - cmake_dependent_option(XRT_HAVE_BASALT_SLAM "Enable Basalt support" ON "basalt_FOUND" OFF) 262 - cmake_dependent_option(XRT_HAVE_SLAM "Enable SLAM tracking support" ON "SLAM;XRT_HAVE_OPENCV" OFF) 263 - cmake_dependent_option(XRT_BUILD_DRIVER_PSVR "Enable PSVR HMD driver" ON "XRT_HAVE_HIDAPI" OFF) 264 - cmake_dependent_option(XRT_BUILD_DRIVER_REALSENSE "Enable RealSense device driver" ON "XRT_HAVE_REALSENSE" OFF) 265 - cmake_dependent_option(XRT_BUILD_DRIVER_VIVE "Enable driver for HTC Vive, Vive Pro, Valve Index, and their controllers" ON "ZLIB_FOUND AND XRT_HAVE_LINUX" OFF) 266 - cmake_dependent_option(XRT_BUILD_DRIVER_OHMD "Enable OpenHMD driver" ON "OPENHMD_FOUND" OFF) 267 - cmake_dependent_option(XRT_BUILD_DRIVER_HANDTRACKING "Enable Camera Hand Tracking driver" ON "XRT_HAVE_ONNXRUNTIME AND XRT_HAVE_OPENCV AND XRT_HAVE_V4L2" OFF) 268 - cmake_dependent_option(XRT_BUILD_DRIVER_DAYDREAM "Enable the Google Daydream View controller driver (BLE, via D-Bus)" ON "XRT_HAVE_DBUS" OFF) 269 - cmake_dependent_option(XRT_BUILD_DRIVER_ARDUINO "Enable Arduino input device with BLE via via D-Bus" ON "XRT_HAVE_DBUS" OFF) 270 - cmake_dependent_option(XRT_BUILD_DRIVER_ILLIXR "Enable ILLIXR driver" ON "ILLIXR_PATH" OFF) 271 - option(XRT_BUILD_DRIVER_DUMMY "Enable dummy driver" ON) 272 - cmake_dependent_option(XRT_BUILD_DRIVER_ULV2 "Enable Ultraleap v2 driver" ON "LeapV2_FOUND" OFF) 273 - cmake_dependent_option(XRT_BUILD_DRIVER_REMOTE "Enable remote debugging driver" ON "XRT_HAVE_LINUX OR ANDROID" OFF) 274 - cmake_dependent_option(XRT_BUILD_DRIVER_WMR "Enable Windows Mixed Reality driver" ON "NOT WIN32" OFF) 275 - 276 - option(XRT_BUILD_SAMPLES "Enable compiling sample code implementations that will not be linked into any final targets" ON) 277 - 278 - # These all use the Monado internal hid wrapper. 279 - cmake_dependent_option(XRT_BUILD_DRIVER_HDK "Enable HDK driver" ON "XRT_HAVE_INTERNAL_HID" OFF) 280 - cmake_dependent_option(XRT_BUILD_DRIVER_PSMV "Enable Playstation Move driver" ON "XRT_HAVE_INTERNAL_HID" OFF) 281 - cmake_dependent_option(XRT_BUILD_DRIVER_HYDRA "Enable Hydra driver" ON "XRT_HAVE_INTERNAL_HID" OFF) 282 - cmake_dependent_option(XRT_BUILD_DRIVER_NS "Enable North Star driver" ON "XRT_HAVE_INTERNAL_HID" OFF) 283 - cmake_dependent_option(XRT_BUILD_DRIVER_VF "Build video frame driver (for video file support, uses gstreamer)" ON "XRT_HAVE_GST" OFF) 284 - cmake_dependent_option(XRT_BUILD_DRIVER_DEPTHAI "DepthAI" ON "depthai_FOUND" OFF) 285 - 286 - cmake_dependent_option(XRT_BUILD_DRIVER_SURVIVE "Enable libsurvive driver" ON "SURVIVE_FOUND" OFF) 287 - 288 - cmake_dependent_option(XRT_BUILD_DRIVER_ANDROID "Enable Android sensors driver" ON "ANDROID" OFF) 289 - cmake_dependent_option(XRT_BUILD_DRIVER_QWERTY "Enable Qwerty driver" ON "XRT_HAVE_SDL2" OFF) 290 - cmake_dependent_option(XRT_BUILD_DRIVER_EUROC "Enable EuRoC dataset driver for SLAM evaluation" ON "XRT_HAVE_OPENCV" OFF) 291 - 292 - # cmake-format: on 293 - 294 294 # You can set this from a superproject to add a driver 295 295 # All drivers must be listed in here to be included in the generated header! 296 296 list(
+166
cmake/OptionWithDeps.cmake
··· 1 + # Copyright 2022, Collabora, Ltd. 2 + # Copyright 2000-2022 Kitware, Inc., Insight Software Consortium 3 + # 4 + # SPDX-License-Identifier: BSD-3-Clause 5 + # 6 + # CMake was initially developed by Kitware with the following sponsorship: 7 + # * National Library of Medicine at the National Institutes of Health 8 + # as part of the Insight Segmentation and Registration Toolkit (ITK). 9 + # 10 + # * US National Labs (Los Alamos, Livermore, Sandia) ASC Parallel 11 + # Visualization Initiative. 12 + # 13 + # * National Alliance for Medical Image Computing (NAMIC) is funded by the 14 + # National Institutes of Health through the NIH Roadmap for Medical Research, 15 + # Grant U54 EB005149. 16 + # 17 + # * Kitware, Inc. 18 + # 19 + # (Based on CMakeDependentOption) 20 + 21 + #[=======================================================================[.rst: 22 + OptionWithDeps 23 + -------------- 24 + 25 + Macro to provide an option dependent on other options. 26 + 27 + This macro presents an option to the user only if a set of other 28 + conditions are true. If it is already specified by the user but the 29 + conditions are not true, it triggers an error. 30 + 31 + This is based on cmake_dependent_options but meets common expectations better: 32 + if you explicitly try to enable something that is not available, you get an error 33 + instead of just having it silently disabled. 34 + 35 + .. command:: option_with_deps 36 + 37 + .. code-block:: cmake 38 + 39 + option_with_deps(<option> "<help_text>" [DEFAULT <default>] DEPENDS [<depends>...]) 40 + 41 + Describes a build option that has dependencies. If the option is requested, 42 + but the depends are not satisfied, an error is issued. DEPENDS is a list of 43 + conditions to check: all must be true to make the option available. 44 + Otherwise, a local variable named ``<option>`` is set to ``OFF``. 45 + 46 + When ``<option>`` is available, the given ``<help_text>`` and initial 47 + ``<default>`` are used. Otherwise, any value set by the user is preserved for 48 + when ``<depends>`` is satisfied in the future. 49 + 50 + Note that the ``<option>`` variable only has a value which satisfies the 51 + ``<depends>`` condition within the scope of the caller because it is a local 52 + variable. 53 + 54 + Elements of ``<depends>`` cannot contain parentheses nor "AND" (each item is 55 + implicitly "ANDed" together). Be sure to quote OR and NOT expressions, and avoid 56 + complex expressions (such as with escaped quotes, etc) since they may fail, 57 + especially before CMake 3.18. 58 + 59 + Example invocation: 60 + 61 + .. code-block:: cmake 62 + 63 + option_with_deps(USE_FOO "Use Foo" DEPENDS "USE_BAR" "NOT USE_ZOT") 64 + 65 + If ``USE_BAR`` is true and ``USE_ZOT`` is false, this provides an option called 66 + ``USE_FOO`` that defaults to ON. Otherwise, it sets ``USE_FOO`` to OFF and 67 + hides the option from the user. If the status of ``USE_BAR`` or ``USE_ZOT`` 68 + ever changes, any value for the ``USE_FOO`` option is saved so that when the 69 + option is re-enabled it retains its old value. 70 + 71 + #]=======================================================================] 72 + 73 + function(option_with_deps option doc) 74 + set(options) 75 + set(oneValueArgs DEFAULT) 76 + set(multiValueArgs DEPENDS) 77 + cmake_parse_arguments(_option_deps "${options}" "${oneValueArgs}" 78 + "${multiValueArgs}" ${ARGN}) 79 + 80 + if(NOT DEFINED _option_deps_DEFAULT) 81 + set(_option_deps_DEFAULT ON) 82 + endif() 83 + 84 + # Check for invalid/bad depends args 85 + foreach(d ${_option_deps_DEPENDS}) 86 + if("${d}" MATCHES "[(]") 87 + message( 88 + FATAL_ERROR "option_with_deps does not support parens in deps") 89 + endif() 90 + if("${d}" MATCHES "\\bAND\\b") 91 + message( 92 + FATAL_ERROR 93 + "option_with_deps treats every deps item as being implicitly 'ANDed' together" 94 + ) 95 + endif() 96 + if("${d}" STREQUAL "OR") 97 + message(FATAL_ERROR "option_with_deps needs OR expressions quoted") 98 + endif() 99 + if("${d}" STREQUAL "NOT") 100 + message(FATAL_ERROR "option_with_deps needs NOT expressions quoted") 101 + endif() 102 + endforeach() 103 + 104 + # This is a case we removed from the original CMakeDependentOption module 105 + if(NOT (${option}_ISSET MATCHES "^${option}_ISSET$")) 106 + message( 107 + FATAL_ERROR 108 + "Probably too old of CMake version to cope with this module") 109 + endif() 110 + 111 + # Check the actual deps, determine if the option is available 112 + set(_avail ON) 113 + foreach(d ${_option_deps_DEPENDS}) 114 + if(${CMAKE_VERSION} VERSION_GREATER_EQUAL 3.18) 115 + cmake_language( 116 + EVAL 117 + CODE 118 + " 119 + if(${d}) 120 + else() 121 + set(_avail OFF) 122 + set(_cond ${d}) 123 + endif()") 124 + else() 125 + # cmake_language(EVAL CODE was added in 3.18 so evaluate it the "old" way before then. 126 + # turn spaces into semicolons so we have a list of arguments, signalling to CMAKE 127 + # to interpret the "if()" differently 128 + string(REGEX REPLACE " +" ";" CMAKE_DEPENDENT_OPTION_DEP "${d}") 129 + if(${CMAKE_DEPENDENT_OPTION_DEP}) 130 + 131 + else() 132 + set(_avail OFF) 133 + set(_cond ${d}) 134 + endif() 135 + endif() 136 + endforeach() 137 + 138 + # Error if option was requested but not available 139 + if("${${option}}" AND NOT "${_avail}") 140 + message( 141 + FATAL_ERROR 142 + "${option} specified but not available: failed check ${_cond}") 143 + endif() 144 + 145 + # Handle remaining cases 146 + set(_already_defined OFF) 147 + if(DEFINED ${option}) 148 + set(_already_defined ON) 149 + endif() 150 + if(${_avail}) 151 + # Set a cache variable: the value here will not override an already-set value. 152 + option(${option} "${doc}" "${_option_deps_DEFAULT}") 153 + 154 + if(NOT _already_defined) 155 + # Needed to force this for some reason 156 + set(${option} 157 + "${${option}}" 158 + CACHE BOOL "${doc}" FORCE) 159 + endif() 160 + else() 161 + # Don't set a cache variable for something that's not available 162 + set(${option} 163 + OFF 164 + PARENT_SCOPE) 165 + endif() 166 + endfunction()
+13 -8
doc/CMakeLists.txt
··· 1 - # Copyright 2018-2020, Collabora, Ltd. 1 + # Copyright 2018-2022, Collabora, Ltd. 2 2 # SPDX-License-Identifier: BSL-1.0 3 3 4 4 # check if Doxygen is installed 5 5 find_package(Doxygen) 6 6 7 - # cmake-format: off 8 - 9 - cmake_dependent_option(BUILD_DOC "Build documentation" ON "DOXYGEN_FOUND" OFF) 10 - cmake_dependent_option(BUILD_DOC_WARN_UNDOCUMENTED "Warn on undocumented entities when building documentation" OFF "DOXYGEN_FOUND" OFF) 11 - cmake_dependent_option(BUILD_DOC_EXTRACT_ALL "Extract all entities for documentation, not just documented ones (conflicts with BUILD_DOC_WARN_UNDOCUMENTED)" ON "DOXYGEN_FOUND AND NOT BUILD_DOC_WARN_UNDOCUMENTED" OFF) 12 - 13 - # cmake-format: on 7 + option_with_deps(BUILD_DOC "Build documentation" DEPENDS DOXYGEN_FOUND) 8 + option_with_deps( 9 + BUILD_DOC_WARN_UNDOCUMENTED "Warn on undocumented entities when building documentation" 10 + DEFAULT OFF 11 + DEPENDS DOXYGEN_FOUND 12 + ) 13 + option_with_deps( 14 + BUILD_DOC_EXTRACT_ALL 15 + "Extract all entities for documentation, not just documented ones (conflicts with BUILD_DOC_WARN_UNDOCUMENTED)" 16 + DEFAULT OFF 17 + DEPENDS DOXYGEN_FOUND "NOT BUILD_DOC_WARN_UNDOCUMENTED" 18 + ) 14 19 15 20 if(BUILD_DOC) 16 21 if(BUILD_DOC_WARN_UNDOCUMENTED)
+5 -2
src/xrt/state_trackers/oxr/CMakeLists.txt
··· 88 88 PUBLIC aux_os 89 89 ) 90 90 91 - if(DEFINED XRT_FEATURE_RENDERDOC) 92 - target_link_libraries(st_oxr PRIVATE xrt-external-renderdoc) 91 + if(XRT_FEATURE_RENDERDOC) 92 + target_link_libraries(st_oxr PUBLIC xrt-external-renderdoc) 93 + if(XRT_HAVE_LINUX) 94 + target_link_libraries(st_oxr PRIVATE ${CMAKE_DL_LIBS}) 95 + endif() 93 96 endif() 94 97 95 98 target_include_directories(