cmake_minimum_required(VERSION 3.24)
project(openxr_passthrough_cube LANGUAGES C CXX)

set(CMAKE_CXX_STANDARD 17)

# Retrieve OpenXR dependency
include(FetchContent)
set(BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(BUILD_API_LAYERS OFF CACHE BOOL "" FORCE)
set(BUILD_WITH_SYSTEM_JSONCPP OFF CACHE BOOL "" FORCE)
FetchContent_Declare(openxr GIT_REPOSITORY https://github.com/KhronosGroup/OpenXR-SDK.git GIT_TAG 7e6c87ace87746dc3de95ff68b6d091bc7b291e1)
FetchContent_MakeAvailable(openxr)

find_package(Vulkan REQUIRED)
find_program(GLSLC glslc REQUIRED)

foreach(stage vert frag)
  add_custom_command(
    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/cube.${stage}.spv
    COMMAND ${GLSLC} ${CMAKE_CURRENT_SOURCE_DIR}/src/cube.${stage} -o ${CMAKE_CURRENT_BINARY_DIR}/cube.${stage}.spv
    DEPENDS src/cube.${stage}
    VERBATIM)
endforeach()
add_custom_target(cube-shaders DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/cube.vert.spv ${CMAKE_CURRENT_BINARY_DIR}/cube.frag.spv)

add_executable(passthrough-cube src/main.cpp src/vulkan_utilities.cpp)
add_dependencies(passthrough-cube cube-shaders)
target_compile_definitions(passthrough-cube PRIVATE XR_USE_GRAPHICS_API_VULKAN)
target_include_directories(passthrough-cube PRIVATE ${openxr_SOURCE_DIR}/src/common)
target_link_libraries(passthrough-cube PRIVATE OpenXR::openxr_loader Vulkan::Vulkan)
target_compile_options(passthrough-cube PRIVATE -Wall -Wextra -Wpedantic -Wno-missing-field-initializers)
