aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBradley Austin Davis <bdavis@saintandreas.org>2019-07-15 14:42:45 -0700
committerVictor Romero <romerosanchezv@gmail.com>2019-07-15 14:42:44 -0700
commit0c8139dbe8ef08ddf38c7f38e094c3cbc4c8bce9 (patch)
tree99910a893fda43db0d9b88afe976c55eddcd47bb
parent40200c829a7a4636ce75ae355dd47d2e458bca75 (diff)
downloadvcpkg-0c8139dbe8ef08ddf38c7f38e094c3cbc4c8bce9.tar.gz
vcpkg-0c8139dbe8ef08ddf38c7f38e094c3cbc4c8bce9.zip
[openxr-loader] Initial port (#6339)
* [openxr] add initial port * [openxr-loader] Set executable suffix * [openxr-loader] Use correct checks for Windows * [openxr-loader] Add failure messages for unsupported platforms
-rw-r--r--ports/openxr-loader/0001-fix-embedded-python-path.patch35
-rw-r--r--ports/openxr-loader/0002-fix-linux-pkgconfig-dependency.patch38
-rw-r--r--ports/openxr-loader/0003-windows-path-python-fix.patch16
-rw-r--r--ports/openxr-loader/CONTROL7
-rw-r--r--ports/openxr-loader/portfile.cmake78
5 files changed, 174 insertions, 0 deletions
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 000000000..3fe7e61e8
--- /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 000000000..3f9cbc328
--- /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 000000000..a68f87722
--- /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 000000000..3c9379e9b
--- /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 000000000..8b2fb4671
--- /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()