File CMakeLists.txt
Go to the documentation of this file
set(CMAKE_CXX_STANDARD 17)
if(NOT ANDROID)
message(WARNING "The openxr_interface plugin is currently supported on Android only.")
set(USE_OPENXR_INTERFACE OFF)
return()
endif()
set(PLUGIN_NAME plugin.openxr_interface${ILLIXR_BUILD_SUFFIX})
set(OCULUS_OPENXR_SDK "$ENV{OCULUS_OPENXR_MOBILE_SDK}")
if(NOT OCULUS_OPENXR_SDK)
set(OCULUS_OPENXR_SDK "${CMAKE_SOURCE_DIR}/ovr_openxr_mobile_sdk")
endif()
find_package(OpenXR REQUIRED)
find_library(VULKAN_LIB vulkan)
# Locate glslc from the NDK shader-tools package.
find_program(GLSLC glslc
PATHS "${ANDROID_NDK}/shader-tools/linux-x86_64"
"${ANDROID_NDK}/shader-tools/windows-x86_64"
REQUIRED
)
set(SPIRV_DIR "${CMAKE_CURRENT_BINARY_DIR}/shaders")
file(MAKE_DIRECTORY "${SPIRV_DIR}")
# Helper: compile one GLSL file to SPIR-V, then wrap it in a C header.
function(compile_shader GLSL_FILE VARNAME OUT_HEADER)
set(SPV_FILE "${SPIRV_DIR}/${VARNAME}.spv")
add_custom_command(
OUTPUT "${SPV_FILE}"
COMMAND ${GLSLC} --target-env=vulkan1.1 -O
"${CMAKE_CURRENT_SOURCE_DIR}/shaders/${GLSL_FILE}"
-o "${SPV_FILE}"
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/shaders/${GLSL_FILE}"
VERBATIM
)
add_custom_command(
OUTPUT "${OUT_HEADER}"
COMMAND ${CMAKE_COMMAND}
-DINPUT=${SPV_FILE}
-DOUTPUT=${OUT_HEADER}
-DVARNAME=${VARNAME}
-P "${CMAKE_CURRENT_SOURCE_DIR}/cmake/spv_to_header.cmake"
DEPENDS ${SPV_FILE}
VERBATIM
)
endfunction()
if(ILLIXR_ENABLE_BOBA)
compile_shader(boba_color.vert color_vert_spv "${SPIRV_DIR}/color_vert_spv.h")
compile_shader(boba_color.frag color_frag_spv "${SPIRV_DIR}/color_frag_spv.h")
compile_shader(overlay.vert overlay_vert_spv "${SPIRV_DIR}/overlay_vert_spv.h")
compile_shader(overlay.frag overlay_frag_spv "${SPIRV_DIR}/overlay_frag_spv.h")
compile_shader(modal.vert modal_vert_spv "${SPIRV_DIR}/modal_vert_spv.h")
compile_shader(modal.frag modal_frag_spv "${SPIRV_DIR}/modal_frag_spv.h")
else()
compile_shader(color.vert color_vert_spv "${SPIRV_DIR}/color_vert_spv.h")
compile_shader(color.frag color_frag_spv "${SPIRV_DIR}/color_frag_spv.h")
endif()
compile_shader(depth.frag depth_frag_spv "${SPIRV_DIR}/depth_frag_spv.h")
compile_shader(motion_vec.frag motion_vec_frag_spv "${SPIRV_DIR}/motion_vec_frag_spv.h")
add_library(${PLUGIN_NAME} SHARED
plugin.cpp
plugin.hpp
stereo_renderer.cpp
stereo_renderer.hpp
oxr_relay.cpp
oxr_relay.hpp
${SPIRV_DIR}/color_vert_spv.h # ensures custom commands run
${SPIRV_DIR}/color_frag_spv.h
${SPIRV_DIR}/depth_frag_spv.h
${SPIRV_DIR}/motion_vec_frag_spv.h
${CMAKE_SOURCE_DIR}/include/illixr/phonebook.hpp
${CMAKE_SOURCE_DIR}/include/illixr/switchboard.hpp
${CMAKE_SOURCE_DIR}/include/illixr/plugin.hpp
${CMAKE_SOURCE_DIR}/include/illixr/quest3_params.hpp
${CMAKE_SOURCE_DIR}/include/illixr/data_format/serialization/misc.hpp
${CMAKE_SOURCE_DIR}/include/illixr/data_format/serialization/combined_pose.hpp
${CMAKE_SOURCE_DIR}/include/illixr/data_format/serialization/hand_interaction_pose.hpp
${CMAKE_SOURCE_DIR}/include/illixr/data_format/serialization/hand_pose.hpp
${CMAKE_SOURCE_DIR}/include/illixr/data_format/serialization/head_pose.hpp
${CMAKE_SOURCE_DIR}/include/illixr/data_format/serialization/openxr.hpp
${CMAKE_SOURCE_DIR}/include/illixr/data_format/serialization/palm_pose.hpp
${CMAKE_SOURCE_DIR}/include/illixr/data_format/serialization/pose_base.hpp
${CMAKE_SOURCE_DIR}/include/illixr/data_format/vulkan_context.hpp
${CMAKE_SOURCE_DIR}/include/illixr/vk/vulkan_context_provider.hpp
${CMAKE_SOURCE_DIR}/utils/serialization/misc.cpp
${CMAKE_SOURCE_DIR}/utils/serialization/combined_pose.cpp
${CMAKE_SOURCE_DIR}/utils/serialization/hand_interaction_pose.cpp
${CMAKE_SOURCE_DIR}/utils/serialization/hand_pose.cpp
${CMAKE_SOURCE_DIR}/utils/serialization/head_pose.cpp
${CMAKE_SOURCE_DIR}/utils/serialization/palm_pose.cpp
)
if(ILLIXR_ENABLE_BOBA)
target_sources(${PLUGIN_NAME} PRIVATE
${SPIRV_DIR}/overlay_vert_spv.h
${SPIRV_DIR}/overlay_frag_spv.h
${SPIRV_DIR}/modal_vert_spv.h
${SPIRV_DIR}/modal_frag_spv.h
${CMAKE_SOURCE_DIR}/include/illixr/data_format/serialization/openxr_view_frame.hpp
${CMAKE_SOURCE_DIR}/include/illixr/data_format/serialization/quest_controller.hpp
${CMAKE_SOURCE_DIR}/utils/serialization/openxr_view_frame.cpp
${CMAKE_SOURCE_DIR}/utils/serialization/quest_controller.cpp
)
endif()
target_compile_definitions(${PLUGIN_NAME} PUBLIC
USING_OPENXR
ILLIXR_VULKAN # enables AHardwareBuffer path throughout ILLIXR
XR_USE_GRAPHICS_API_VULKAN # replaces XR_USE_GRAPHICS_API_OPENGL_ES
XR_USE_PLATFORM_ANDROID
COMBINED_ENCODING
)
target_include_directories(${PLUGIN_NAME} PUBLIC
${ANDROID_TOOLS_INCLUDE}
${ILLIXR_SOURCE_DIR}/include
${ANDROID_NDK}/sources/android/native_app_glue
${SPIRV_DIR}
)
target_link_libraries(${PLUGIN_NAME} PUBLIC
Boost::serialization
Eigen3::Eigen
android
spdlog::spdlog_android
OpenXR::openxr_loader
${VULKAN_LIB} # libvulkan.so
mediandk # AImageReader
)