From 78c1651e7081920fc9d9ad54f5e61a0d817bc954 Mon Sep 17 00:00:00 2001 From: Rylie Pavlik Date: Tue, 10 Dec 2019 17:43:35 -0600 Subject: [PATCH 1/3] Add toolchain files for MinGW on Linux. --- changes/sdk/pr.153.gh.OpenXR-SDK-Source.md | 4 +++ src/cmake/mingw-w64-toolchain-32bit.cmake | 33 ++++++++++++++++++++++ src/cmake/mingw-w64-toolchain.cmake | 33 ++++++++++++++++++++++ 3 files changed, 70 insertions(+) create mode 100644 changes/sdk/pr.153.gh.OpenXR-SDK-Source.md create mode 100644 src/cmake/mingw-w64-toolchain-32bit.cmake create mode 100644 src/cmake/mingw-w64-toolchain.cmake diff --git a/changes/sdk/pr.153.gh.OpenXR-SDK-Source.md b/changes/sdk/pr.153.gh.OpenXR-SDK-Source.md new file mode 100644 index 000000000..15c02baeb --- /dev/null +++ b/changes/sdk/pr.153.gh.OpenXR-SDK-Source.md @@ -0,0 +1,4 @@ +--- +- issue.151.gh.OpenXR-SDK-Source +--- +Improve portability and fix building of loader on MinGW. Toolchain files now provided for cross-building for Windows from Debian. diff --git a/src/cmake/mingw-w64-toolchain-32bit.cmake b/src/cmake/mingw-w64-toolchain-32bit.cmake new file mode 100644 index 000000000..720a89dc7 --- /dev/null +++ b/src/cmake/mingw-w64-toolchain-32bit.cmake @@ -0,0 +1,33 @@ +# Toolchain file for 32-bit MinGW build on *nix +# Developed for use with Debian and its derivatives +# +# Copyright 2019 Collabora, Ltd. +# SPDX-License-Identifier: BSL-1.0 + +set(CMAKE_SYSTEM_NAME "Windows") + +set(TARGET i686-w64-mingw32) +set(PREFIX ${TARGET}-) +set(SUFFIX -posix) # required for threads +set(CMAKE_C_COMPILER ${PREFIX}gcc${SUFFIX}) +set(CMAKE_CXX_COMPILER ${PREFIX}g++${SUFFIX}) +set(CMAKE_RC_COMPILER ${PREFIX}windres) + +set(CMAKE_C_COMPILER_AR ${PREFIX}gcc-ar${SUFFIX}) +set(CMAKE_CXX_COMPILER_AR ${PREFIX}gcc-ar${SUFFIX}) +set(CMAKE_C_COMPILER_RANLIB ${PREFIX}gcc-ranlib${SUFFIX}) +set(CMAKE_CXX_COMPILER_RANLIB ${PREFIX}gcc-ranlib${SUFFIX}) +set(CMAKE_NM ${PREFIX}gcc-nm${SUFFIX}) +set(CMAKE_OBJCOPY ${PREFIX}objcopy) +set(CMAKE_OBJDUMP ${PREFIX}objdump) +set(CMAKE_RANLIB ${PREFIX}ranlib) +set(CMAKE_STRIP ${PREFIX}strip) + +if(NOT CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX /usr/${TARGET}) +endif() + +set(CMAKE_FIND_ROOT_PATH /usr/${TARGET}) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) diff --git a/src/cmake/mingw-w64-toolchain.cmake b/src/cmake/mingw-w64-toolchain.cmake new file mode 100644 index 000000000..4927b211e --- /dev/null +++ b/src/cmake/mingw-w64-toolchain.cmake @@ -0,0 +1,33 @@ +# Toolchain file for 64-bit MinGW build on *nix +# Developed for use with Debian and its derivatives +# +# Copyright 2019 Collabora, Ltd. +# SPDX-License-Identifier: BSL-1.0 + +set(CMAKE_SYSTEM_NAME "Windows") + +set(TARGET x86_64-w64-mingw32) +set(PREFIX ${TARGET}-) +set(SUFFIX -posix) # required for threads +set(CMAKE_C_COMPILER ${PREFIX}gcc${SUFFIX}) +set(CMAKE_CXX_COMPILER ${PREFIX}g++${SUFFIX}) +set(CMAKE_RC_COMPILER ${PREFIX}windres) + +set(CMAKE_C_COMPILER_AR ${PREFIX}gcc-ar${SUFFIX}) +set(CMAKE_CXX_COMPILER_AR ${PREFIX}gcc-ar${SUFFIX}) +set(CMAKE_C_COMPILER_RANLIB ${PREFIX}gcc-ranlib${SUFFIX}) +set(CMAKE_CXX_COMPILER_RANLIB ${PREFIX}gcc-ranlib${SUFFIX}) +set(CMAKE_NM ${PREFIX}gcc-nm${SUFFIX}) +set(CMAKE_OBJCOPY ${PREFIX}objcopy) +set(CMAKE_OBJDUMP ${PREFIX}objdump) +set(CMAKE_RANLIB ${PREFIX}ranlib) +set(CMAKE_STRIP ${PREFIX}strip) + +if(NOT CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX /usr/${TARGET}) +endif() + +set(CMAKE_FIND_ROOT_PATH /usr/${TARGET}) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) From 931baa09d60c2c2ee6324e58d3e0c554941b1029 Mon Sep 17 00:00:00 2001 From: Rylie Pavlik Date: Wed, 6 May 2020 13:59:10 -0500 Subject: [PATCH 2/3] hello_xr: Make sure to link gfxwrapper to gdi32 --- src/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 94674ced9..e0f1c02a3 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -249,6 +249,10 @@ if((OPENGL_FOUND OR OpenGLES_FOUND) ) endif() set_target_properties(openxr-gfxwrapper PROPERTIES FOLDER ${HELPER_FOLDER}) + if(WIN32) + target_link_libraries(openxr-gfxwrapper PUBLIC gdi32) + endif() + message( STATUS "Enabling OpenGL support in hello_xr, loader_test, and conformance, if configured" From 46850442c8865b00cc3ef481fd399aebcdd4ef6f Mon Sep 17 00:00:00 2001 From: Rylie Pavlik Date: Wed, 13 May 2020 16:11:04 -0500 Subject: [PATCH 3/3] hello_xr: Adapt debug callback, to fix OpenGL on MinGW --- src/tests/hello_xr/graphicsplugin_opengl.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/tests/hello_xr/graphicsplugin_opengl.cpp b/src/tests/hello_xr/graphicsplugin_opengl.cpp index ed3cab281..f284cb4fc 100644 --- a/src/tests/hello_xr/graphicsplugin_opengl.cpp +++ b/src/tests/hello_xr/graphicsplugin_opengl.cpp @@ -3,6 +3,12 @@ // SPDX-License-Identifier: Apache-2.0 #include "pch.h" + +#ifdef __MINGW32__ +#define GL_ATTRIBUTE __attribute__((stdcall)) +#else +#define GL_ATTRIBUTE +#endif #include "common.h" #include "geometry.h" #include "graphicsplugin.h" @@ -149,17 +155,15 @@ struct OpenGLGraphicsPlugin : public IGraphicsPlugin { #if !defined(XR_USE_PLATFORM_MACOS) glEnable(GL_DEBUG_OUTPUT); - glDebugMessageCallback( - [](GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, - const void* userParam) { - ((OpenGLGraphicsPlugin*)userParam)->DebugMessageCallback(source, type, id, severity, length, message); - }, - this); + glDebugMessageCallback((GLDEBUGPROC)&OpenGLGraphicsPlugin::DebugMessageCallbackTrampoline, this); #endif // !defined(XR_USE_PLATFORM_MACOS) InitializeResources(); } - + static void GL_ATTRIBUTE DebugMessageCallbackTrampoline(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, + const GLchar* message, const void* userParam) { + ((OpenGLGraphicsPlugin*)userParam)->DebugMessageCallback(source, type, id, severity, length, message); + } void InitializeResources() { glGenFramebuffers(1, &m_swapchainFramebuffer);