# Copyright 2019, Collabora, Ltd. # SPDX-License-Identifier: BSL-1.0 ###### # Create a loadable OpenXR driver. set(RUNTIME_BARE_SUFFIX monado) set(RUNTIME_SUFFIX _${RUNTIME_BARE_SUFFIX}) set(RUNTIME_TARGET ${RUNTIME_PREFIX}openxr${RUNTIME_SUFFIX} CACHE INTERNAL "" FORCE ) # OpenXR 1.0 set(XR_API_MAJOR "1") add_library(${RUNTIME_TARGET} MODULE target.c libopenxr.def) # Note: Order may matter in these lists! target_link_libraries(${RUNTIME_TARGET} PUBLIC aux_vk aux_os aux_util aux_math) if(XRT_FEATURE_SERVICE) target_link_libraries(${RUNTIME_TARGET} PUBLIC st_oxr ipc_client comp_client) else() target_link_libraries( ${RUNTIME_TARGET} PUBLIC st_oxr st_prober target_lists target_instance comp_main comp_client ) endif() if(NOT MSVC) # Force the main "negotiate" symbol's inclusion # and use a version script to ensure that's the only one we expose. set_property( TARGET ${RUNTIME_TARGET} APPEND_STRING PROPERTY LINK_FLAGS "-u xrNegotiateLoaderRuntimeInterface -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/libopenxr.version" ) # Re-link if the version script changes. set_property( TARGET ${RUNTIME_TARGET} APPEND PROPERTY LINK_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/libopenxr.version" ) endif() ### # Generate runtime manifest with absolute path to runtime intended for development without installing # 3.9+ have a global property with the truth get_property(IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) if(IS_MULTI_CONFIG) set(DEV_MANIFEST_OUTPUT "${CMAKE_BINARY_DIR}/$/${RUNTIME_TARGET}-dev.json") else() set(DEV_MANIFEST_OUTPUT "${CMAKE_BINARY_DIR}/${RUNTIME_TARGET}-dev.json") endif() include(GenerateOpenXRRuntimeManifest) generate_openxr_runtime_manifest_buildtree( RUNTIME_TARGET ${RUNTIME_TARGET} # OUT_FILE ${DEV_MANIFEST_OUTPUT} ) ### # Prepare the installable manifest: will be generated completely at install time, # by a script we generate now. if(CMAKE_SYSTEM_NAME STREQUAL "Windows") # Windows: install manifest to top level set(_extra_args) if(XRT_OPENXR_INSTALL_ABSOLUTE_RUNTIME_PATH) set(_extra_args ABSOLUTE_RUNTIME_PATH) elseif(XRT_OPENXR_INSTALL_MANIFEST_RELATIVE_RUNTIME_PATH) set(_extra_args RUNTIME_DIR_RELATIVE_TO_MANIFEST ${CMAKE_INSTALL_BINDIR}) endif() generate_openxr_runtime_manifest_at_install( ${_extra_args} RUNTIME_TARGET ${RUNTIME_TARGET} DESTINATION . RELATIVE_RUNTIME_DIR ${CMAKE_INSTALL_BINDIR} ) set(RUNTIME_RELATIVE_DIR ${CMAKE_INSTALL_BINDIR}) elseif(NOT ANDROID) # Linux, BSD, etc. set(MANIFEST_RELATIVE_DIR share/openxr/${XR_API_MAJOR}/) if(XRT_OPENXR_INSTALL_ACTIVE_RUNTIME) configure_file( active_runtime.cmake ${CMAKE_CURRENT_BINARY_DIR}/active_runtime.cmake @ONLY ) install(SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/active_runtime.cmake) endif() set(_extra_args) if(XRT_OPENXR_INSTALL_ABSOLUTE_RUNTIME_PATH) set(_extra_args ABSOLUTE_RUNTIME_PATH) elseif(XRT_OPENXR_INSTALL_MANIFEST_RELATIVE_RUNTIME_PATH) set(_extra_args RUNTIME_DIR_RELATIVE_TO_MANIFEST ../../../${CMAKE_INSTALL_LIBDIR}) endif() generate_openxr_runtime_manifest_at_install( ${_extra_args} RUNTIME_TARGET ${RUNTIME_TARGET} DESTINATION share/openxr/${XR_API_MAJOR} RELATIVE_RUNTIME_DIR ${CMAKE_INSTALL_LIBDIR} ) set(RUNTIME_RELATIVE_DIR ${CMAKE_INSTALL_LIBDIR}) endif() # Install the runtime itself install( TARGETS ${RUNTIME_TARGET} # LIBRARY DESTINATION ${RUNTIME_RELATIVE_DIR} # ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} # RUNTIME DESTINATION ${RUNTIME_RELATIVE_DIR} ) ### # Inelegant but effective SDL2-based debug GUI add_library(oxr_sdl2 STATIC oxr_sdl2_hack.c) target_link_libraries(oxr_sdl2 PRIVATE aux_util) if(XRT_HAVE_OPENGL) target_link_libraries(oxr_sdl2 PUBLIC aux_ogl) endif() if(XRT_HAVE_SDL2) target_link_libraries(oxr_sdl2 PRIVATE st_gui xrt-external-imgui-sdl2 ${SDL2_LIBRARIES}) if(XRT_BUILD_DRIVER_QWERTY) target_link_libraries(oxr_sdl2 PRIVATE drv_qwerty drv_qwerty_includes) endif() endif() target_link_libraries(${RUNTIME_TARGET} PRIVATE oxr_sdl2)