From 7fd2486c1e80dc5ab58e653fdd8844c5e09d4f20 Mon Sep 17 00:00:00 2001 From: Bryce Hutchings Date: Mon, 3 Aug 2020 17:04:00 -0700 Subject: [PATCH] Clean up WIN32/WindowsStore in CMake projects. This simplifies things in most places by removing WindowsStore-specific code or fixing areas that assume "Windows" system when they should assume WIN32 (which includes WindowsStore). As a consequence, more projects can be built for UWP. Finally, this fixes build issues when building ARM/ARM64 for Win32 related to bad OpenGL and Vulkan detection in CMake. --- src/CMakeLists.txt | 20 +++++++++++-------- src/tests/CMakeLists.txt | 4 ---- src/tests/hello_xr/CMakeLists.txt | 2 +- src/tests/list/CMakeLists.txt | 2 -- src/tests/loader_test/CMakeLists.txt | 2 +- src/tests/loader_test/loader_test_utils.cpp | 6 +++--- .../loader_test/test_runtimes/CMakeLists.txt | 2 +- 7 files changed, 18 insertions(+), 20 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 82ad33a1..dbedf374 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -31,9 +31,15 @@ include(StdFilesystemFlags) ### Dependencies -# Skip detection of OpenGL/Vulkan for UWP "WindowsStore" build, otherwise the OpenGL package will be found for UWP -# apps but gl.h isn't compatible. Similarly, there is no ARM/ARM64 support in the Windows Vulkan SDK. -if(NOT CMAKE_SYSTEM_NAME STREQUAL "WindowsStore") +# CMake will detect OpenGL/Vulkan which are not compatible with UWP and ARM/ARM64 on Windows so skip it in these cases. +string(TOUPPER "${CMAKE_GENERATOR_PLATFORM}" CMAKE_GENERATOR_PLATFORM_UPPER) +if(CMAKE_SYSTEM_NAME STREQUAL "WindowsStore" OR (WIN32 AND CMAKE_GENERATOR_PLATFORM_UPPER MATCHES "ARM.*")) + set(OPENGL_INCOMPATIBLE TRUE) + set(VULKAN_INCOMPATIBLE TRUE) + message(STATUS "OpenGL/Vulkan disabled due to incompatibility") +endif() + +if(NOT OPENGL_INCOMPATIBLE) set(OpenGL_GL_PREFERENCE GLVND) find_package(OpenGL) @@ -43,7 +49,9 @@ if(NOT CMAKE_SYSTEM_NAME STREQUAL "WindowsStore") elseif(BUILD_ALL_EXTENSIONS) message(FATAL_ERROR "OpenGL not found") endif() +endif() +if(NOT VULKAN_INCOMPATIBLE) if(NOT CMAKE_VERSION VERSION_LESS 3.7.0) # Find the Vulkan headers find_package(VulkanHeaders) @@ -77,7 +85,7 @@ endif() if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/api_layers/CMakeLists.txt") option(BUILD_API_LAYERS "Build API layers" ON) endif() -if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/tests/CMakeLists.txt" AND NOT CMAKE_SYSTEM_NAME STREQUAL "WindowsStore") +if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/tests/CMakeLists.txt") option(BUILD_TESTS "Build tests" ON) endif() if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/conformance/CMakeLists.txt") @@ -127,10 +135,6 @@ endif() # Several files use these compile-time platform switches if(WIN32) add_definitions(-DXR_USE_PLATFORM_WIN32) - # TODO remove once work is done to get more stuff building for UWP. - if (CMAKE_SYSTEM_NAME STREQUAL "WindowsStore") - set(BUILD_TESTS OFF) - endif() elseif(PRESENTATION_BACKEND MATCHES "xlib") add_definitions(-DXR_USE_PLATFORM_XLIB) elseif(PRESENTATION_BACKEND MATCHES "xcb") diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt index 632785f0..046c5637 100644 --- a/src/tests/CMakeLists.txt +++ b/src/tests/CMakeLists.txt @@ -18,10 +18,6 @@ # add_subdirectory(list) -if(OPENGL_FOUND AND NOT TARGET openxr-gfxwrapper) - return() -endif() - add_subdirectory(hello_xr) if(BUILD_LOADER) add_subdirectory(loader_test) diff --git a/src/tests/hello_xr/CMakeLists.txt b/src/tests/hello_xr/CMakeLists.txt index a29c4399..9eebb4bc 100644 --- a/src/tests/hello_xr/CMakeLists.txt +++ b/src/tests/hello_xr/CMakeLists.txt @@ -68,7 +68,7 @@ target_link_libraries(hello_xr openxr_loader) if(TARGET openxr-gfxwrapper) target_link_libraries(hello_xr openxr-gfxwrapper) endif() -if(CMAKE_SYSTEM_NAME STREQUAL "Windows") +if(WIN32) if(MSVC) target_compile_definitions(hello_xr PRIVATE _CRT_SECURE_NO_WARNINGS) target_compile_options(hello_xr PRIVATE /Zc:wchar_t /Zc:forScope /W4 /WX) diff --git a/src/tests/list/CMakeLists.txt b/src/tests/list/CMakeLists.txt index a793f950..c2906df0 100644 --- a/src/tests/list/CMakeLists.txt +++ b/src/tests/list/CMakeLists.txt @@ -41,8 +41,6 @@ if(MSVC) endif() set_target_properties(runtime_list PROPERTIES FOLDER ${TESTS_FOLDER}) -set_target_properties(runtime_list PROPERTIES OUTPUT_NAME openxr_runtime_list) - install(TARGETS runtime_list RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/src/tests/loader_test/CMakeLists.txt b/src/tests/loader_test/CMakeLists.txt index 7564c831..ee21b355 100644 --- a/src/tests/loader_test/CMakeLists.txt +++ b/src/tests/loader_test/CMakeLists.txt @@ -47,7 +47,7 @@ if(VulkanHeaders_FOUND) ) endif() -if(CMAKE_SYSTEM_NAME STREQUAL "Windows") +if(WIN32) if(MSVC) target_compile_definitions(loader_test PRIVATE _CRT_SECURE_NO_WARNINGS) target_compile_options(loader_test PRIVATE /Zc:wchar_t /Zc:forScope /W4 /WX) diff --git a/src/tests/loader_test/loader_test_utils.cpp b/src/tests/loader_test/loader_test_utils.cpp index e50d7dfb..93cf3fce 100644 --- a/src/tests/loader_test/loader_test_utils.cpp +++ b/src/tests/loader_test/loader_test_utils.cpp @@ -34,12 +34,12 @@ #if defined(XR_OS_WINDOWS) bool LoaderTestSetEnvironmentVariable(const std::string &variable, const std::string &value) { - return TRUE == SetEnvironmentVariable(variable.c_str(), value.c_str()); + return TRUE == SetEnvironmentVariableA(variable.c_str(), value.c_str()); } bool LoaderTestGetEnvironmentVariable(const std::string &variable, std::string &value) { char buf_data[4096]; - uint32_t num_chars = GetEnvironmentVariable(variable.c_str(), buf_data, 4095); + uint32_t num_chars = GetEnvironmentVariableA(variable.c_str(), buf_data, 4095); if (0 == num_chars) { return false; } @@ -49,7 +49,7 @@ bool LoaderTestGetEnvironmentVariable(const std::string &variable, std::string & } bool LoaderTestUnsetEnvironmentVariable(const std::string &variable) { - return TRUE == SetEnvironmentVariable(variable.c_str(), ""); + return TRUE == SetEnvironmentVariableA(variable.c_str(), ""); } #elif defined(XR_OS_LINUX) diff --git a/src/tests/loader_test/test_runtimes/CMakeLists.txt b/src/tests/loader_test/test_runtimes/CMakeLists.txt index aea06dd0..6f326dab 100644 --- a/src/tests/loader_test/test_runtimes/CMakeLists.txt +++ b/src/tests/loader_test/test_runtimes/CMakeLists.txt @@ -60,7 +60,7 @@ macro(gen_xr_runtime_json filename libfile) ) endmacro() -if(CMAKE_SYSTEM_NAME STREQUAL "Windows") +if(WIN32) target_compile_definitions(test_runtime PRIVATE _CRT_SECURE_NO_WARNINGS) # Turn off transitional "changed behavior" warning message for Visual Studio versions prior to 2015. # The changed behavior is that constructor initializers are now fixed to clear the struct members.