diff --git a/ports/openxr-loader/0001-fix-embedded-python-path.patch b/ports/openxr-loader/0001-fix-embedded-python-path.patch new file mode 100644 index 0000000000..3fe7e61e82 --- /dev/null +++ b/ports/openxr-loader/0001-fix-embedded-python-path.patch @@ -0,0 +1,35 @@ +diff --git a/specification/scripts/genxr.py b/specification/scripts/genxr.py +index 906c044..b0a414f 100755 +--- a/specification/scripts/genxr.py ++++ b/specification/scripts/genxr.py +@@ -17,6 +17,12 @@ + import argparse + import re + import sys ++import os ++ ++base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')) ++sys.path.append(os.path.join(base_dir, 'src', 'scripts')) ++sys.path.append(os.path.join(base_dir, 'specification', 'scripts')) ++ + import time + import xml.etree.ElementTree as etree + +diff --git a/src/scripts/src_genxr.py b/src/scripts/src_genxr.py +index 960b6cd..6f49296 100755 +--- a/src/scripts/src_genxr.py ++++ b/src/scripts/src_genxr.py +@@ -14,7 +14,12 @@ + # See the License for the specific language governing permissions and + # limitations under the License. + +-import argparse, cProfile, pdb, string, sys, time ++import argparse, cProfile, pdb, string, sys, time, os ++ ++base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')) ++sys.path.append(os.path.join(base_dir, 'src', 'scripts')) ++sys.path.append(os.path.join(base_dir, 'specification', 'scripts')) ++ + from reg import * + from generator import write + from cgenerator import CGeneratorOptions, COutputGenerator diff --git a/ports/openxr-loader/0002-fix-linux-pkgconfig-dependency.patch b/ports/openxr-loader/0002-fix-linux-pkgconfig-dependency.patch new file mode 100644 index 0000000000..3f9cbc328a --- /dev/null +++ b/ports/openxr-loader/0002-fix-linux-pkgconfig-dependency.patch @@ -0,0 +1,38 @@ +diff --git a/src/cmake/presentation.cmake b/src/cmake/presentation.cmake +index 3970546..c2e7bc3 100644 +--- a/src/cmake/presentation.cmake ++++ b/src/cmake/presentation.cmake +@@ -12,21 +12,17 @@ endif() + + message(STATUS "Using presentation backend: ${PRESENTATION_BACKEND}") + +-find_package(PkgConfig REQUIRED) + + if( PRESENTATION_BACKEND MATCHES "xlib" ) +- pkg_search_module(X11 REQUIRED x11) +- pkg_search_module(XXF86VM REQUIRED xxf86vm) +- pkg_search_module(XRANDR REQUIRED xrandr) +- + add_definitions( -DSUPPORT_X ) + add_definitions( -DOS_LINUX_XLIB ) + set( XLIB_LIBRARIES +- ${X11_LIBRARIES} +- ${XXF86VM_LIBRARIES} +- ${XRANDR_LIBRARIES} ) ++ X11 ++ Xxf86vm ++ Xrandr) + + elseif( PRESENTATION_BACKEND MATCHES "xcb" ) ++ find_package(PkgConfig REQUIRED) + # XCB + XCB GLX is limited to OpenGL 2.1 + # add_definitions( -DOS_LINUX_XCB ) + # XCB + Xlib GLX 1.3 +@@ -49,6 +45,7 @@ elseif( PRESENTATION_BACKEND MATCHES "xcb" ) + ${X11_LIBRARIES} ) + + elseif( PRESENTATION_BACKEND MATCHES "wayland" ) ++ find_package(PkgConfig REQUIRED) + pkg_search_module(WAYLAND_CLIENT REQUIRED wayland-client) + pkg_search_module(WAYLAND_EGL REQUIRED wayland-egl) + pkg_search_module(WAYLAND_SCANNER REQUIRED wayland-scanner) diff --git a/ports/openxr-loader/0003-windows-path-python-fix.patch b/ports/openxr-loader/0003-windows-path-python-fix.patch new file mode 100644 index 0000000000..a68f877220 --- /dev/null +++ b/ports/openxr-loader/0003-windows-path-python-fix.patch @@ -0,0 +1,16 @@ +diff --git a/specification/scripts/generator.py b/specification/scripts/generator.py +index d6a1afe..5f9d0b6 100644 +--- a/specification/scripts/generator.py ++++ b/specification/scripts/generator.py +@@ -516,9 +516,10 @@ class OutputGenerator: + # Generator can be used without writing to a file. + if self.genOpts.filename is not None: + if sys.platform == 'win32': +- directory = Path(self.genOpts.directory) ++ directory = self.genOpts.directory + if not os.path.exists(directory): + os.makedirs(directory) +- self.outFile = io.open(directory / self.genOpts.filename, 'w', encoding='utf-8') ++ self.outFile = io.open(directory + '/' + self.genOpts.filename, 'w', encoding='utf-8') + else: + filename = self.genOpts.directory + '/' + self.genOpts.filename diff --git a/ports/openxr-loader/CONTROL b/ports/openxr-loader/CONTROL new file mode 100644 index 0000000000..3c9379e9bc --- /dev/null +++ b/ports/openxr-loader/CONTROL @@ -0,0 +1,7 @@ +Source: openxr-loader +Version: 0.90.1 +Description: Khronos API for abstracting VR/MR/AR hardware + +Feature: vulkan +Description: Vulkan functionality for OpenXR +Build-Depends: vulkan diff --git a/ports/openxr-loader/portfile.cmake b/ports/openxr-loader/portfile.cmake new file mode 100644 index 0000000000..8b2fb4671b --- /dev/null +++ b/ports/openxr-loader/portfile.cmake @@ -0,0 +1,78 @@ +if (VCPKG_TARGET_ARCHITECTURE MATCHES "^arm*") + message(FATAL_ERROR "OpenXR does not support arm") +endif() + +if (VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore") + # Due to UWP restricting the usage of static CRT OpenXR cannot be built. + message(FATAL_ERROR "OpenXR does not support UWP") +endif() + +include(vcpkg_common_functions) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO KhronosGroup/OpenXR-SDK + REF release-0.90.1 + SHA512 99b16b52511fef740fa7a1e234213310a4490b8d7baf4d1e003b93cf4f37b28abf526f6ed2d1e27e9ee2b4949b1957f15c20d4e0f8d30687806fe782780697af + HEAD_REF master + PATCHES + # embedded python uses ignores PYTHONPATH + 0001-fix-embedded-python-path.patch + # Pkg-config is not available on the Vcpkg CI systems, don't depend on it for the xlib backend + 0002-fix-linux-pkgconfig-dependency.patch + # Python < 3.6 doesn't allow a WindowsPath object to act as a pathlike in os.path functions + 0003-windows-path-python-fix.patch +) + +# Weird behavior inside the OpenXR loader. On Windows they force shared libraries to use static crt, and +# vice-versa. Might be better in future iterations to patch the CMakeLists.txt for OpenXR +if (NOT VCPKG_CMAKE_SYSTEM_NAME OR VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore") + if(VCPKG_LIBRARY_LINKAGE STREQUAL static) + set(DYNAMIC_LOADER OFF) + set(VCPKG_CRT_LINKAGE dynamic) + else() + set(DYNAMIC_LOADER ON) + set(VCPKG_CRT_LINKAGE static) + endif() +endif() + +vcpkg_find_acquire_program(PYTHON3) + +vcpkg_configure_cmake( + SOURCE_PATH ${SOURCE_PATH} + PREFER_NINJA + OPTIONS + -DBUILD_API_LAYERS=OFF + -DBUILD_TESTS=OFF + -DDYNAMIC_LOADER=${DYNAMIC_LOADER} + -DPYTHON_EXECUTABLE=${PYTHON3} +) + +vcpkg_install_cmake() + +function(COPY_BINARIES SOURCE DEST) + # hack, because CMAKE_SHARED_LIBRARY_SUFFIX seems to be unpopulated + if(NOT VCPKG_CMAKE_SYSTEM_NAME OR VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore") + set(SHARED_LIB_SUFFIX ".dll") + else() + set(SHARED_LIB_SUFFIX ".so") + endif() + file(MAKE_DIRECTORY ${DEST}) + file(GLOB_RECURSE SHARED_BINARIES ${SOURCE}/*${SHARED_LIB_SUFFIX}) + file(COPY ${SHARED_BINARIES} DESTINATION ${DEST}) + file(REMOVE_RECURSE ${SHARED_BINARIES}) +endfunction() + +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include) +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/share) +# No CMake files are contained in /share only docs +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/share) + +file(INSTALL ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/openxr-loader RENAME copyright) + +if(VCPKG_LIBRARY_LINKAGE STREQUAL dynamic) + COPY_BINARIES(${CURRENT_PACKAGES_DIR}/lib ${CURRENT_PACKAGES_DIR}/bin) + COPY_BINARIES(${CURRENT_PACKAGES_DIR}/debug/lib ${CURRENT_PACKAGES_DIR}/debug/bin) +endif() + +vcpkg_copy_pdbs()