Introducción a la compilación del SDK de OpenXR

Para obtener la guía de compilación de OpenXR, consulte: https://blog.csdn.net/geyichongchujianghu/article/details/124672713

OpenXR SDK地址为: GitHub - KhronosGroup/OpenXR-SDK-Source: fuentes para el cargador OpenXR, capas API básicas y código de ejemplo.

La dirección de ejecución de Monado es: Monado / Monado · GitLab 

La dirección del agente del sistema es: Ryan Pavlik / openxr-android-broker · GitLab

1. hola_xr/CMakeLists.txt

file(GLOB LOCAL_HEADERS "*.h"):  el comando GLOB se utiliza principalmente para hacer coincidir las reglas coincidentes con los archivos requeridos en el directorio especificado, y las variables se almacenan en el 
archivo de variables LOCAL_HEADERS (GLOB LOCAL_SOURCE "*.cpp" ) 
file(GLOB VULKAN_SHADERS "vulkan_shaders/*.glsl") 

# Para incluir sombreadores compilados 
include_directories(${CMAKE_CURRENT_BINARY_DIR}): agrega el directorio especificado a la ruta de búsqueda del archivo de encabezado del compilador, y el directorio especificado se interpreta como la ruta relativa de la ruta del código fuente actual. CMAKE_CURRENT_BINARY_DIR es el directorio de compilación actual. hello_xr/build
 
if(ANDROID) 
    add_library(hello_xr MODULE 
        ${LOCAL_SOURCE} 
        ${LOCAL_HEADERS} 
        ${VULKAN_SHADERS} 
        $<TARGET_OBJECTS:android_native_app_glue>) --Agregue una biblioteca llamada hello_xr, se puede especificar el archivo fuente de la biblioteca o target_sources ( ) designación posterior. El tipo de biblioteca es ESTÁTICA (biblioteca estática)/COMPARTIDA (biblioteca dinámica)/MÓDULO (biblioteca de módulos).
    target_link_libraries(hello_xr ${ANDROID_LIBRARY} ${ANDROID_LOG_LIBRARY}) -- Bibliotecas o indicadores para usar al vincular el objetivo dado y/o sus dependencias 
else() 
    add_executable(hello_xr 
        ${LOCAL_SOURCE} 
        ${LOCAL_HEADERS} 
        ${VULKAN_SHADERS}) -- Utilice el archivo fuente especificado para generar el archivo ejecutable de destino 
endif() 
set_target_properties(hello_xr PROPERTIES FOLDER ${SAMPLES_FOLDER}) --Este comando es para establecer las propiedades del destino, establezca la propiedad FOLDER en ${SAMPLES_FOLDER}
 
source_group("Encabezados " FILES ${LOCAL_HEADERS}) -- Cualquier archivo fuente especificado explícitamente se colocará en el grupo <Encabezados>. Las rutas relativas se interpretan en relación con el directorio de origen actual. 
source_group("Shaders" ARCHIVOS ${VULKAN_SHADERS}) 

compile_glsl(run_hello_xr_glsl_compiles ${VULKAN_SHADERS}) 

add_dependencies(hello_xr 
    generate_openxr_header
    run_hello_xr_glsl_compiles 
target_link_libraries(hello_x r OpenXR::openxr_loader) 
)--Agregar dependencias
 
target_include_directories(hello_xr 
    PRIVATE 
    ${PROJECT_SOURCE_DIR}/src 
    ${PROJECT_SOURCE_DIR}/src/common 

    # para encabezados auxiliares $ 
    {PROJECT_SOURCE_DIR}/external/include 
) --Especificar los archivos de encabezado que el destino (archivo exe o similar) necesita incluir la ruta. 

if(GLSLANG_VALIDATOR AND NOT GLSLC_COMMAND) 
    target_compile_definitions(hello_xr PRIVATE USE_GLSLANGVALIDATOR) --Agregue la definición de compilación USE_GLSLANGVALIDATOR al destino 
endif() 

if(Vulkan_FOUND) 
    target_include_directories(hello_xr 
        PRIVATE 
        ${ Vulkan_INCLUDE_DIRS} 
    ) 
endif() 
    target_link_libraries(hola_xr openxr-gfxwrapper)

if(OBJETIVO openxr-gfxwrapper) 
endif() 
...

2. hola_xr/build.gradle

externalNativeBuild {
    --用于控制Native的编译
    cmake { 
        argumentos '-DANDROID_STL=c++_shared', 
                '-DBUILD_API_LAYERS=OFF', 
                '-DBUILD_TESTS=ON', 
                '-DBUILD_LOADER=ON', 
                '-DBUILD_CONFORMANCE_TESTS=OFF' , 
                '-DBUILD_ALL_EXTENSIONS=ON' 
        apunta a "openxr_loader", "hello_xr" 
    } 
}
   

Si desea compilar API_LAYER, debe modificarlo de la siguiente manera:

argumentos...

'-DBUILD_API_LAYERS= ENCENDIDO ',

apunta a "openxr_loader", "hello_xr", " XrApiLayer_api_dump "

externalNativeBuild {
    -- usado para controlar la compilación nativa 
    cmake { 
        ruta "${project.repoRoot}/CMakeLists.txt" -- especifica 
        la versión del archivo CMakeLists "3.22.1" --cmake version 
    } 
}
   

3. cargador/CMakeLists.txt

Debido a que hay demasiados, elige solo los claves.

# crear variables de caché para destinos de instalación 
include(GNUInstallDirs) --include文件夹

# Lista de todos los archivos generados externamente fuera del cargador con los que el cargador 
# necesita compilar. 
set(LOADER_EXTERNAL_GEN_FILES ${COMMON_GENERated_OUTPUT}) --定义变量LOADER_EXTERNAL_GEN_FILES,并赋值为${COMMON_GENERated_OUTPUT} 
set(LOADER_EXTERNAL_GEN_DEPENDS ${COMMON_GENERated_DEPENDS}) 
run_xr_xml_generate( loader_source_generator.py xr_generated_loader.hpp)-- 
run_xr_xml_generate(loader_source_generator.py xr_generated_loader.cpp) 

add_library (openxr_loader ${LIBRARY_TYPE} 
    android_utilities.cpp 
    android_utilities.h 
    api_layer_interface.cpp 
    api_layer_interface.hpp 
    loader_core.cpp 
    loader_instance.cpp 
    loader_instance.hpp 
    loader_logger.cpp 
    loader_logger.hpp 
    loader_logger_recorders.cpp 
    loader_logger_recorders.hpp 
    manifest_file.cpp 
    manifest_file.hpp 
    runtime_interface.cpp 
    runtime_interface.hpp 
    ${GENERATED_OUTPUT} 
    ${PROJECT_SOURCE_DIR}/src/common/he x_and_handles.h 
    $ {PROJECT_SOURCE_DIR}/src/common/object_info.cpp 
    ${PROJECT_SOURCE_DIR}/src/common/object_info.h 
    ${PROJECT_SOURCE_DIR}/src/common/platform_utils.hpp 
    ${LOADER_EXTERNAL_GEN_FILES} 
    ${openxr_loader_RESOURCE_FILE} 
)--生成libopenxr_loader.so,并添加相关编译文件 
            ${CMAKE_CURRENT_SOURCE_DIR}
set_target_properties(openxr_loader CARPETA DE PROPIEDADES ${LOADER_FOLDER}) 

add_dependencies(openxr_loader generate_openxr_header xr_global_generated_files) --添加依赖
target_include_directories( 
    openxr_loader 
    # para encabezados OpenXR 
    PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE _DIR}/include> 
           $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include> 

    PRIVATE ${PROJECT_SOURCE_DIR}/src/common 

            # para la tabla de despacho generada, common_config.h 
            ${CMAKE_CURRENT_SOURCE_DIR}/.. 
            ${CMAKE_CURRENT_BINARY_DIR}/.. 

            # para archivos generados específicos del objetivo 
            ${CMAKE_CURRENT_BINARY_DIR}
    INTERFACE $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}> 
): especifique la ruta del archivo de encabezado que el destino (archivo exe o similar) debe incluir. Se requieren palabras clave INTERFACE, PUBLIC y PRIVATE para especificar el alcance de los siguientes parámetros 
target_link_libraries ( 
    openxr_loader 
    PRIVATE ${CMAKE_DL_LIBS} 
    Threads PUBLIC::Threads 
) --- biblioteca 
target_compile_definitions(openxr_loader PRIVATE ${OPENXR_ALL_SUPPORTED_DEFINES}) --agregar definición 
if(ANDROID) 
    target_link_libraries( 
        openxr_loader 
        PRIVATE 
        ${ANDROID_LOG_LIBRARY} 
        ${ANDROID_LIBRARY}) 
end if()
target_compile_definitions(openxr_loader PRIVATE API_NAME="OpenXR") --修改定义
openxr_add_filesystem_utils(openxr_loader) 

set_target_properties(openxr_loader PROPERTIES DEBUG_POSTFIX "${OPENXR_DEBUG_POSTFIX}") --设置属性

... 
elseif(ANDROID) 
    set(JNIPP_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/. ./external/jnipp) 
    set(JNIWRAPPER_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../external/android-jni-wrappers) 
    file(GLOB ANDROID_WRAP_SOURCES ${JNIWRAPPER_ROOT}/wrap/*.cpp) 
    set_target_properties(openxr_loader 
        PROPERTIES 
        CXX_STANDARD 17 
        CXX_STANDARD _REQUIRED VERDADERO) 
    fuentes_destino (openxr_loader 
        PRIVADO
        ${CMAKE_CURRENT_SOURCE_DIR}/android_utilities.cpp 
        ${CMAKE_CURRENT_SOURCE_DIR}/android_utilities.h 
        ${ANDROID_WRAP_SOURCES} 
        ${JNIPP_ROOT}/jnipp.cpp 
    ) --将源添加到target 
    target_include_directories(openxr_loader 
        PRIVATE 
        ${JNIPP_R OOT} 
        ${JNIWRAPPER_ROOT} 
    ) 
endif ()
add_library(headers INTERFACE) --Importe directamente 
    la biblioteca generada, cmake no agregará reglas de compilación a este tipo 
de 
    biblioteca 
    $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
install( 
    OBJETIVOS encabezados openxr_loader EXPORTAR openxr_loader_export 
    DESTINO DE EJECUCIÓN "${CMAKE_INSTALL_BINDIR}" DESTINO DE LA 
    BIBLIOTECA del cargador de COMPONENTES "${CMAKE_INSTALL_LIBDIR}" DESTINO DEL 
    ARCHIVO del cargador de COMPONENTES "${CMAKE_INSTALL_LIBD IR}" Cargador de COMPONENTES 
) - personalizará archivos, archivos de biblioteca y archivos de encabezado , etc. Instalar en el directorio especificado 
exportar ( 
    EXPORTAR openxr_loader_export 
    FILE ${CMAKE_CURRENT_BINARY_DIR}/OpenXRTargets.cmake 
    NAMESPACE OpenXR:: 
)
# Crear alias para que puedan usarse de la misma manera ya sea que se vendan como fuente o se encuentren con CMake 
add_library(OpenXR:: openxr_loader ALIAS 
openxr_loader) - - establece el alias de encabezados de biblioteca OpenXR::headers

...

Supongo que te gusta

Origin blog.csdn.net/weixin_41028555/article/details/132298460
Recomendado
Clasificación