1717# Author:
1818#
1919
20+ if (POLICY CMP0075)
21+ cmake_policy (SET CMP0075 NEW )
22+ endif ()
23+
2024# Entire project uses C++14
2125set (CMAKE_CXX_STANDARD 14)
2226set (CMAKE_POSITION_INDEPENDENT_CODE ON )
2327set (CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR} /cmake" )
2428
2529include (GNUInstallDirs )
30+ include (StdFilesystemFlags )
2631
2732### Dependencies
2833set (OpenGL_GL_PREFERENCE GLVND)
29- if (NOT CMAKE_SYSTEM_NAME STREQUAL "WindowsStore" )
34+ if (NOT CMAKE_SYSTEM_NAME STREQUAL "WindowsStore" )
3035 # OpenGL package will be found for UWP apps but gl.h excludes UWP apps so it isn't actually usable.
31- find_package (OpenGL )
36+ find_package (OpenGL )
3237endif ()
3338
3439if (OPENGL_FOUND)
3540 add_definitions (-DXR_USE_GRAPHICS_API_OPENGL )
3641 message (STATUS "Enabling OpenGL support" )
37- elseif (BUILD_ALL_EXTENSIONS)
38- if (NOT CMAKE_SYSTEM_NAME STREQUAL "WindowsStore" )
39- message (FATAL_ERROR "OpenGL not found" )
40- endif ()
42+ elseif (BUILD_ALL_EXTENSIONS AND NOT CMAKE_SYSTEM_NAME STREQUAL "WindowsStore" )
43+ message (FATAL_ERROR "OpenGL not found" )
4144endif ()
4245
4346if (NOT CMAKE_VERSION VERSION_LESS 3.7.0)
@@ -63,6 +66,7 @@ option(
6366 "Enable exception handling in the loader. Leave this on unless your standard library is built to not throw."
6467 ON
6568)
69+
6670if (CMAKE_SYSTEM_NAME STREQUAL "Windows" )
6771 option (DYNAMIC_LOADER "Build the loader as a .dll library" OFF )
6872else ()
@@ -82,6 +86,8 @@ include(CMakeDependentOption)
8286cmake_dependent_option (
8387 BUILD_WITH_SYSTEM_JSONCPP "Use system jsoncpp instead of vendored source" ON "JSONCPP_FOUND" OFF
8488)
89+ cmake_dependent_option (BUILD_WITH_STD_FILESYSTEM "Use std::[experimental::]filesystem." ON
90+ "HAVE_FILESYSTEM_WITHOUT_LIB OR HAVE_FILESYSTEM_NEEDING_LIB" OFF )
8591
8692# Several files use these compile-time OS switches
8793if (WIN32 )
@@ -91,9 +97,9 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
9197endif ()
9298
9399# /EHsc (support for C++ exceptions) is default in most configurations but seems missing when building arm/arm64.
94- IF (MSVC )
95- SET (CMAKE_CXX_FLAGS "/EHsc" )
96- ENDIF ( MSVC )
100+ if (MSVC )
101+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc" )
102+ endif ( )
97103
98104# This is a little helper library for setting up OpenGL
99105if (OPENGL_FOUND AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR} /common/gfxwrapper_opengl.c" )
@@ -195,8 +201,26 @@ function(compile_glsl run_target_name)
195201endfunction ()
196202
197203if (WIN32 )
198- add_definitions (-DXR_USE_GRAPHICS_API_D3D11 )
199- add_definitions (-DXR_USE_GRAPHICS_API_D3D12 )
204+ # This is too simple of detection to be worth separating into a find module
205+ find_library (D3D_DXGI_LIBRARY dxgi )
206+ find_library (D3D_COMPILER_LIBRARY d3dcompiler )
207+ find_path (D3D_D3D11_INCLUDE_DIR d3d11.h )
208+ find_library (D3D_D3D11_LIBRARY d3d11 )
209+ if (D3D_D3D11_INCLUDE_DIR AND D3D_D3D11_LIBRARY AND D3D_DXGI_LIBRARY AND D3D_COMPILER_LIBRARY)
210+ set (D3D_D3D11_FOUND ON )
211+ set (D3D_D3D11_LIBRARIES ${D3D_D3D11_LIBRARY} ${D3D_DXGI_LIBRARY} ${D3D_COMPILER_LIBRARY} )
212+ add_definitions (-DXR_USE_GRAPHICS_API_D3D11 )
213+ endif ()
214+
215+ find_path (D3D_D3D12_INCLUDE_DIR d3d12.h )
216+ find_library (D3D_D3D12_LIBRARY d3d12 )
217+ if (D3D_D3D12_INCLUDE_DIR AND D3D_D3D12_LIBRARY AND D3D_DXGI_LIBRARY)
218+ set (D3D_D3D12_FOUND ON )
219+ set (D3D_D3D12_LIBRARIES ${D3D_D3D12_LIBRARY} ${D3D_DXGI_LIBRARY} ${D3D_COMPILER_LIBRARY} )
220+ add_definitions (-DXR_USE_GRAPHICS_API_D3D12 )
221+ endif ()
222+
223+ find_path (D3D_DIRECTXCOLORS_INCLUDE_DIR DirectXColors.h )
200224endif ()
201225
202226# Check for the existence of the secure_getenv or __secure_getenv commands
@@ -217,7 +241,7 @@ include(${CMAKE_CURRENT_SOURCE_DIR}/version.cmake)
217241
218242# Path separators ( : or ; ) are not handled well in CMake.
219243# This seems like a reasonable approach.
220- if (WIN32 )
244+ if (CMAKE_HOST_SYSTEM_NAME STREQUAL Windows )
221245 set (CODEGEN_PYTHON_PATH
222246 "${PROJECT_SOURCE_DIR} /specification/scripts;${PROJECT_SOURCE_DIR} /src/scripts;$ENV{PYTHONPATH} "
223247 )
@@ -296,12 +320,17 @@ set_target_properties(xr_global_generated_files PROPERTIES FOLDER ${CODEGEN_FOLD
296320set (COMMON_GENERATED_OUTPUT ${GENERATED_OUTPUT} )
297321if (NOT MSVC )
298322 include (CheckCXXCompilerFlag )
299- foreach (FLAG -Wall -Werror=unused-parameter -Werror=unused-argument)
323+ include (CheckCCompilerFlag )
324+ foreach (FLAG -Wall -Werror=unused-parameter -Werror=unused-argument -Wpointer-arith)
300325 string (REGEX REPLACE "[^A-Za-z0-9]" "" _flagvar "${FLAG} " )
301326 check_cxx_compiler_flag (${FLAG} SUPPORTS_${_flagvar} )
302- if (SUPPORTS_WARNING_ ${_flagvar} )
327+ if (SUPPORTS_ ${_flagvar} )
303328 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAG} " )
304329 endif ()
330+ check_c_compiler_flag (${FLAG} SUPPORTS_C_${_flagvar} )
331+ if (SUPPORTS_C_${_flagvar} )
332+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLAG} " )
333+ endif ()
305334 endforeach ()
306335 set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined" )
307336endif ()
0 commit comments