diff options
author | Julian Eisel <eiseljulian@gmail.com> | 2020-03-04 18:39:00 +0300 |
---|---|---|
committer | Julian Eisel <eiseljulian@gmail.com> | 2020-03-04 18:45:07 +0300 |
commit | a22573e243d7eeda7c10c9afc59377d474c74e5e (patch) | |
tree | cd50df07df955f1186c604aedc2222c1c0479638 /build_files/cmake | |
parent | e7f1de5e110a925cfa11bb7824c4fe2695e274ba (diff) |
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
Diffstat (limited to 'build_files/cmake')
-rw-r--r-- | build_files/cmake/Modules/FindXR-OpenXR-SDK.cmake | 73 | ||||
-rw-r--r-- | build_files/cmake/config/blender_full.cmake | 3 | ||||
-rw-r--r-- | build_files/cmake/config/blender_lite.cmake | 1 | ||||
-rw-r--r-- | build_files/cmake/config/blender_release.cmake | 3 | ||||
-rw-r--r-- | build_files/cmake/platform/platform_apple.cmake | 8 | ||||
-rw-r--r-- | build_files/cmake/platform/platform_unix.cmake | 8 | ||||
-rw-r--r-- | build_files/cmake/platform/platform_win32.cmake | 12 |
7 files changed, 108 insertions, 0 deletions
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 +) diff --git a/build_files/cmake/config/blender_full.cmake b/build_files/cmake/config/blender_full.cmake index f5cfedc8ea7..a997d7c0e68 100644 --- a/build_files/cmake/config/blender_full.cmake +++ b/build_files/cmake/config/blender_full.cmake @@ -61,3 +61,6 @@ if(UNIX AND NOT APPLE) set(WITH_X11_XINPUT ON CACHE BOOL "" FORCE) set(WITH_X11_XF86VMODE ON CACHE BOOL "" FORCE) endif() +if(NOT APPLE) + set(WITH_XR_OPENXR ON CACHE BOOL "" FORCE) +endif() diff --git a/build_files/cmake/config/blender_lite.cmake b/build_files/cmake/config/blender_lite.cmake index 77336dd20b9..7c94ce9d672 100644 --- a/build_files/cmake/config/blender_lite.cmake +++ b/build_files/cmake/config/blender_lite.cmake @@ -44,6 +44,7 @@ set(WITH_OPENAL OFF CACHE BOOL "" FORCE) set(WITH_OPENCOLLADA OFF CACHE BOOL "" FORCE) set(WITH_OPENCOLORIO OFF CACHE BOOL "" FORCE) set(WITH_OPENIMAGEDENOISE OFF CACHE BOOL "" FORCE) +set(WITH_XR_OPENXR OFF CACHE BOOL "" FORCE) set(WITH_OPENIMAGEIO OFF CACHE BOOL "" FORCE) set(WITH_OPENMP OFF CACHE BOOL "" FORCE) set(WITH_OPENSUBDIV OFF CACHE BOOL "" FORCE) diff --git a/build_files/cmake/config/blender_release.cmake b/build_files/cmake/config/blender_release.cmake index 1a610ee45da..01a59e451aa 100644 --- a/build_files/cmake/config/blender_release.cmake +++ b/build_files/cmake/config/blender_release.cmake @@ -65,3 +65,6 @@ if(UNIX AND NOT APPLE) set(WITH_X11_XINPUT ON CACHE BOOL "" FORCE) set(WITH_X11_XF86VMODE ON CACHE BOOL "" FORCE) endif() +if(NOT APPLE) + set(WITH_XR_OPENXR ON CACHE BOOL "" FORCE) +endif() diff --git a/build_files/cmake/platform/platform_apple.cmake b/build_files/cmake/platform/platform_apple.cmake index 123eb3ef7a0..11889fc7a87 100644 --- a/build_files/cmake/platform/platform_apple.cmake +++ b/build_files/cmake/platform/platform_apple.cmake @@ -421,6 +421,14 @@ if(WITH_OPENMP) endif() endif() +if(WITH_XR_OPENXR) + find_package(OpenXR-SDK) + if(NOT OPENXR_SDK_FOUND) + message(WARNING "OpenXR-SDK was not found, disabling WITH_XR_OPENXR") + set(WITH_XR_OPENXR OFF) + endif() +endif() + set(EXETYPE MACOSX_BUNDLE) set(CMAKE_C_FLAGS_DEBUG "-fno-strict-aliasing -g") diff --git a/build_files/cmake/platform/platform_unix.cmake b/build_files/cmake/platform/platform_unix.cmake index 3b40f7c329b..dcb6b9d34f9 100644 --- a/build_files/cmake/platform/platform_unix.cmake +++ b/build_files/cmake/platform/platform_unix.cmake @@ -428,6 +428,14 @@ if(WITH_TBB) find_package_wrapper(TBB) endif() +if(WITH_XR_OPENXR) + find_package(XR-OpenXR-SDK) + if(NOT XR_OPENXR_SDK_FOUND) + message(WARNING "OpenXR-SDK not found, disabling WITH_XR_OPENXR") + set(WITH_XR_OPENXR OFF) + endif() +endif() + if(EXISTS ${LIBDIR}) without_system_libs_end() endif() diff --git a/build_files/cmake/platform/platform_win32.cmake b/build_files/cmake/platform/platform_win32.cmake index 7ba7e3999e4..452deb497b2 100644 --- a/build_files/cmake/platform/platform_win32.cmake +++ b/build_files/cmake/platform/platform_win32.cmake @@ -713,3 +713,15 @@ if(WINDOWS_PYTHON_DEBUG) </Project>") endif() endif() + +if(WITH_XR_OPENXR) + if(EXISTS ${LIBDIR}/xr_openxr_sdk) + set(XR_OPENXR_SDK ${LIBDIR}/xr_openxr_sdk) + set(XR_OPENXR_SDK_LIBPATH ${LIBDIR}/xr_openxr_sdk/lib) + set(XR_OPENXR_SDK_INCLUDE_DIR ${XR_OPENXR_SDK}/include) + set(XR_OPENXR_SDK_LIBRARIES optimized ${XR_OPENXR_SDK_LIBPATH}/openxr_loader.lib debug ${XR_OPENXR_SDK_LIBPATH}/openxr_loader_d.lib) + else() + message(WARNING "OpenXR-SDK was not found, disabling WITH_XR_OPENXR") + set(WITH_XR_OPENXR OFF) + endif() +endif() |