# Copyright 2023, The Khronos Group Inc. # # SPDX-License-Identifier: Apache-2.0 # XR_DOCS_TAG_BEGIN_SetProjectName1 cmake_minimum_required(VERSION 3.28.3) set(PROJECT_NAME OpenXRTutorialChapter1) project("${PROJECT_NAME}") # XR_DOCS_TAG_END_SetProjectName1 # XR_DOCS_TAG_BEGIN_CMakeModulePath # Additional Directories for find_package() to search within. list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../cmake") # XR_DOCS_TAG_END_CMakeModulePath include("../cmake/graphics_api_select.cmake") # XR_DOCS_TAG_BEGIN_FetchContent # For FetchContent_Declare() and FetchContent_MakeAvailable() include(FetchContent) # openxr_loader - From github.com/KhronosGroup set(BUILD_API_LAYERS ON CACHE INTERNAL "Use OpenXR layers" ) set(BUILD_TESTS OFF CACHE INTERNAL "Build tests" ) FetchContent_Declare( OpenXR EXCLUDE_FROM_ALL DOWNLOAD_EXTRACT_TIMESTAMP URL_HASH MD5=f52248ef83da9134bec2b2d8e0970677 URL https://github.com/KhronosGroup/OpenXR-SDK-Source/archive/refs/tags/release-1.1.49.tar.gz SOURCE_DIR openxr ) FetchContent_MakeAvailable(OpenXR) # XR_DOCS_TAG_END_FetchContent # Files set(SOURCES main.cpp ../Common/GraphicsAPI.cpp ../Common/GraphicsAPI_D3D11.cpp ../Common/GraphicsAPI_D3D12.cpp ../Common/GraphicsAPI_OpenGL.cpp ../Common/GraphicsAPI_OpenGL_ES.cpp ../Common/GraphicsAPI_Vulkan.cpp ../Common/OpenXRDebugUtils.cpp ) set(HEADERS ../Common/DebugOutput.h ../Common/GraphicsAPI.h ../Common/GraphicsAPI_D3D11.h ../Common/GraphicsAPI_D3D12.h ../Common/GraphicsAPI_OpenGL.h ../Common/GraphicsAPI_OpenGL_ES.h ../Common/GraphicsAPI_Vulkan.h ../Common/HelperFunctions.h ../Common/OpenXRDebugUtils.h ../Common/OpenXRHelper.h ) if(ANDROID) # Android # XR_DOCS_TAG_BEGIN_Android add_library(${PROJECT_NAME} SHARED ${SOURCES} ${HEADERS}) add_dependencies(${PROJECT_NAME} XrApiLayer_core_validation) target_include_directories( ${PROJECT_NAME} PRIVATE # In this repo ../Common/ ) # export ANativeActivity_onCreate for java to call. set_property( TARGET ${PROJECT_NAME} APPEND_STRING PROPERTY LINK_FLAGS " -u ANativeActivity_onCreate" ) # native_app_glue include(AndroidNdkModules) android_ndk_import_module_native_app_glue() target_link_libraries(${PROJECT_NAME} android native_app_glue openxr_loader) target_compile_options(${PROJECT_NAME} PRIVATE -Wno-cast-calling-convention) # XR_DOCS_TAG_END_Android addgraphicsapidefine(${PROJECT_NAME}) # XR_DOCS_TAG_BEGIN_VulkanNDK # VulkanNDK find_library(vulkan-lib vulkan) if(vulkan-lib) target_include_directories( ${PROJECT_NAME} PUBLIC ${ANDROID_NDK}/sources/third_party/vulkan/src/include ) target_link_libraries(${PROJECT_NAME} ${vulkan-lib}) target_compile_definitions( ${PROJECT_NAME} PUBLIC XR_TUTORIAL_USE_VULKAN ) endif() # XR_DOCS_TAG_END_VulkanNDK # XR_DOCS_TAG_BEGIN_Gfxwrapper include(../thirdparty/glwrapper/CMakeLists.txt) if(TARGET tutorial_glwrapper) target_link_libraries(${PROJECT_NAME} tutorial_glwrapper) target_compile_definitions( ${PROJECT_NAME} PUBLIC XR_TUTORIAL_USE_OPENGL_ES ) endif() # XR_DOCS_TAG_END_Gfxwrapper else() # Windows / Linux # XR_DOCS_TAG_BEGIN_WindowsLinux add_executable(${PROJECT_NAME} ${SOURCES} ${HEADERS}) if(NOT "${XR_RUNTIME_JSON}" STREQUAL "") set_target_properties( ${PROJECT_NAME} PROPERTIES VS_DEBUGGER_ENVIRONMENT "XR_RUNTIME_JSON=${XR_RUNTIME_JSON}" ) endif() target_include_directories( ${PROJECT_NAME} PRIVATE # In this repo ../Common/ ) target_link_libraries(${PROJECT_NAME} openxr_loader) add_dependencies(${PROJECT_NAME} XrApiLayer_core_validation) # XR_DOCS_TAG_END_WindowsLinux addgraphicsapidefine(${PROJECT_NAME}) if(WIN32) # Windows # XR_DOCS_TAG_BEGIN_D3D11 # D3D11 target_link_libraries(${PROJECT_NAME} "d3d11.lib") target_compile_definitions(${PROJECT_NAME} PUBLIC XR_TUTORIAL_USE_D3D11) # XR_DOCS_TAG_END_D3D11 # XR_DOCS_TAG_BEGIN_D3D12 # D3D12 target_link_libraries(${PROJECT_NAME} "d3d12.lib") target_compile_definitions(${PROJECT_NAME} PUBLIC XR_TUTORIAL_USE_D3D12) # XR_DOCS_TAG_END_D3D12 # XR_DOCS_TAG_BEGIN_D3D11_12 # D3D11 / D3D12 target_link_libraries(${PROJECT_NAME} "dxgi.lib") # XR_DOCS_TAG_END_D3D11_12 else() # Linux # XR_DOCS_TAG_BEGIN_Linux target_compile_definitions( ${PROJECT_NAME} PUBLIC XR_TUTORIAL_USE_LINUX_XLIB ) # XR_DOCS_TAG_END_Linux endif() # XR_DOCS_TAG_BEGIN_VulkanSDK # VulkanSDK find_package(Vulkan) if(Vulkan_FOUND) target_include_directories( ${PROJECT_NAME} PUBLIC ${Vulkan_INCLUDE_DIRS} ) target_link_libraries(${PROJECT_NAME} ${Vulkan_LIBRARIES}) target_compile_definitions( ${PROJECT_NAME} PUBLIC XR_TUTORIAL_USE_VULKAN ) endif() # XR_DOCS_TAG_END_VulkanSDK # XR_DOCS_TAG_BEGIN_OpenGL # OpenGL include(../thirdparty/glwrapper/CMakeLists.txt) if(TARGET tutorial_glwrapper) target_link_libraries(${PROJECT_NAME} tutorial_glwrapper) target_compile_definitions( ${PROJECT_NAME} PUBLIC XR_TUTORIAL_USE_OPENGL ) endif() # XR_DOCS_TAG_END_OpenGL endif() # EOF