From a22573e243d7eeda7c10c9afc59377d474c74e5e Mon Sep 17 00:00:00 2001 From: Julian Eisel Date: Wed, 4 Mar 2020 16:39:00 +0100 Subject: Build System: Add OpenXR-SDK dependency and WITH_XR_OPENXR build option The OpenXR-SDK contains utilities for using the OpenXR standard (https://www.khronos.org/openxr/). Namely C-headers and a so called "loader" to manage runtime linking to OpenXR platforms ("runtimes") installed on the user's system. The WITH_XR_OPENXR build option is disabled by default for now, as there is no code using it yet. On macOS it will remain disabled for now, it's untested and there's no OpenXR runtime in sight for it. Some points on the OpenXR-SDK dependency: * The repository is located at https://github.com/KhronosGroup/OpenXR-SDK (Apache 2). * Notes on updating the dependency: https://wiki.blender.org/wiki/Source/OpenXR_SDK_Dependency * It contains a bunch of generated files, for which the sources are in a separate repository (https://github.com/KhronosGroup/OpenXR-SDK-Source). * We could use that other repo by default, but I'd rather go with the simpler solution and allow people to opt in if they want advanced dev features. * We currently use the OpenXR loader lib from it and the headers. * To use the injected OpenXR API-layers from the SDK (e.g. API validation layers), the SDK needs to be compiled from this other repository. The extra "XR_" prefix in the build option is to avoid mix-ups of OpenXR with OpenEXR. Most of this comes from the 2019 GSoC project, "Core Support of Virtual Reality Headsets through OpenXR" (https://wiki.blender.org/wiki/User:Severin/GSoC-2019/). Differential Revision: https://developer.blender.org/D6188 Reviewed by: Campbell Barton, Sergey Sharybin, Bastien Montagne, Ray Molenkamp --- build_files/cmake/Modules/FindXR-OpenXR-SDK.cmake | 73 +++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 build_files/cmake/Modules/FindXR-OpenXR-SDK.cmake (limited to 'build_files/cmake/Modules') diff --git a/build_files/cmake/Modules/FindXR-OpenXR-SDK.cmake b/build_files/cmake/Modules/FindXR-OpenXR-SDK.cmake new file mode 100644 index 00000000000..71b40ec1bde --- /dev/null +++ b/build_files/cmake/Modules/FindXR-OpenXR-SDK.cmake @@ -0,0 +1,73 @@ +# - Find OpenXR-SDK libraries +# Find the native OpenXR-SDK includes and libraries +# +# Note that there is a distinction between the OpenXR standard and the SDK. The +# latter provides utilities to use the standard but is not part of it. Most +# importantly, it contains C headers and a loader library, which manages +# dynamic linking to OpenXR runtimes like Monado, Windows Mixed Reality or +# Oculus. See the repository for more details: +# https://github.com/KhronosGroup/OpenXR-SDK +# +# This module defines +# XR_OPENXR_SDK_INCLUDE_DIRS, where to find OpenXR-SDK headers, Set when +# XR_OPENXR_SDK_INCLUDE_DIR is found. +# XR_OPENXR_SDK_LIBRARIES, libraries to link against to use OpenXR. +# XR_OPENXR_SDK_ROOT_DIR, the base directory to search for OpenXR-SDK. +# This can also be an environment variable. +# XR_OPENXR_SDK_FOUND, if false, do not try to use OpenXR-SDK. +# +# also defined, but not for general use are +# XR_OPENXR_SDK_LOADER_LIBRARY, where to find the OpenXR-SDK loader library. + +#============================================================================= +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= + +# If XR_OPENXR_SDK_ROOT_DIR was defined in the environment, use it. +IF(NOT XR_OPENXR_SDK_ROOT_DIR AND NOT $ENV{XR_OPENXR_SDK_ROOT_DIR} STREQUAL "") + SET(XR_OPENXR_SDK_ROOT_DIR $ENV{XR_OPENXR_SDK_ROOT_DIR}) +ENDIF() + +SET(_xr_openxr_sdk_SEARCH_DIRS + ${XR_OPENXR_SDK_ROOT_DIR} + /opt/lib/xr-openxr-sdk +) + +FIND_PATH(XR_OPENXR_SDK_INCLUDE_DIR + NAMES + openxr/openxr.h + HINTS + ${_xr_openxr_sdk_SEARCH_DIRS} + PATH_SUFFIXES + include +) + +FIND_LIBRARY(XR_OPENXR_SDK_LOADER_LIBRARY + NAMES + openxr_loader + HINTS + ${_xr_openxr_sdk_SEARCH_DIRS} + PATH_SUFFIXES + lib64 lib +) + +# handle the QUIETLY and REQUIRED arguments and set XR_OPENXR_SDK_FOUND to TRUE if +# all listed variables are TRUE +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(XR_OPENXR_SDK DEFAULT_MSG + XR_OPENXR_SDK_LOADER_LIBRARY XR_OPENXR_SDK_INCLUDE_DIR) + +IF(XR_OPENXR_SDK_FOUND) + SET(XR_OPENXR_SDK_LIBRARIES ${XR_OPENXR_SDK_LOADER_LIBRARY}) + SET(XR_OPENXR_SDK_INCLUDE_DIRS ${XR_OPENXR_SDK_INCLUDE_DIR}) +ENDIF(XR_OPENXR_SDK_FOUND) + +MARK_AS_ADVANCED( + XR_OPENXR_SDK_INCLUDE_DIR + XR_OPENXR_SDK_LOADER_LIBRARY +) -- cgit v1.2.3