monado/cmake/GenerateOpenXRRuntimeManifest.cmake

155 lines
5.4 KiB
CMake

# Copyright 2019-2023, Collabora, Ltd.
#
# SPDX-License-Identifier: BSL-1.0
#
# Maintained by:
# 2019-2023 Rylie Pavlik <rylie.pavlik@collabora.com> <rylie@ryliepavlik.com>
#[[.rst:
GenerateOpenXRRuntimeManifest
---------------
The following functions are provided by this module:
- :command:`generate_openxr_runtime_manifest_buildtree`
- :command:`generate_openxr_runtime_manifest_at_install`
.. command:: generate_openxr_runtime_manifest_buildtree
Generates a runtime manifest suitable for use in the build tree,
with absolute paths, at configure time::
generate_openxr_runtime_manifest_buildtree(
RUNTIME_TARGET <target> # Name of your runtime target
OUT_FILE <outfile> # Name of the manifest file (with path) to generate
[MANIFEST_TEMPLATE <template>] # Optional: Specify an alternate template to use
)
.. command:: generate_openxr_runtime_manifest_at_install
Generates a runtime manifest at install time and installs it where desired::
generate_openxr_runtime_manifest_buildtree(
RUNTIME_TARGET <target> # Name of your runtime target
DESTINATION <dest> # The install-prefix-relative path to install the manifest to.
RELATIVE_RUNTIME_DIR <dir> # The install-prefix-relative path that the runtime library is installed to.
[COMPONENT <comp>] # If present, the component to place the manifest in.
[ABSOLUTE_RUNTIME_PATH| # If present, path in generated manifest is absolute
RUNTIME_DIR_RELATIVE_TO_MANIFEST <dir>]
# If present (and ABSOLUTE_RUNTIME_PATH not present), specifies the
# runtime directory relative to the manifest directory in the installed layout
[OUT_FILENAME <outfilename> # Optional: Alternate name of the manifest file to generate
[MANIFEST_TEMPLATE <template>] # Optional: Specify an alternate template to use
[LIBMONADO <path>] # Optional: path to libmonado to include in manifest
)
#]]
# This module is mostly just argument parsing, the guts are in GenerateKhrManifest
get_filename_component(_OXR_MANIFEST_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}"
PATH)
include("${_OXR_MANIFEST_CMAKE_DIR}/GenerateKhrManifest.cmake")
set(_OXR_MANIFEST_TEMPLATE
"${_OXR_MANIFEST_CMAKE_DIR}/openxr_manifest.in.json"
CACHE INTERNAL "" FORCE)
function(generate_openxr_runtime_manifest_buildtree)
set(options)
set(oneValueArgs MANIFEST_TEMPLATE RUNTIME_TARGET OUT_FILE LIBMONADO)
set(multiValueArgs)
cmake_parse_arguments(_genmanifest "${options}" "${oneValueArgs}"
"${multiValueArgs}" ${ARGN})
if(NOT _genmanifest_MANIFEST_TEMPLATE)
set(_genmanifest_MANIFEST_TEMPLATE "${_OXR_MANIFEST_TEMPLATE}")
endif()
if(NOT _genmanifest_RUNTIME_TARGET)
message(FATAL_ERROR "Need RUNTIME_TARGET specified!")
endif()
if(NOT _genmanifest_OUT_FILE)
message(FATAL_ERROR "Need OUT_FILE specified!")
endif()
generate_khr_manifest_buildtree(
MANIFEST_DESCRIPTION
"OpenXR runtime manifest"
MANIFEST_TEMPLATE
"${_genmanifest_MANIFEST_TEMPLATE}"
TARGET
"${_genmanifest_RUNTIME_TARGET}"
OUT_FILE
"${_genmanifest_OUT_FILE}"
LIBMONADO
"${_genmanifest_LIBMONADO}"
)
endfunction()
function(generate_openxr_runtime_manifest_at_install)
set(options ABSOLUTE_RUNTIME_PATH)
set(oneValueArgs
MANIFEST_TEMPLATE
DESTINATION
OUT_FILENAME
COMPONENT
RUNTIME_TARGET
RUNTIME_DIR_RELATIVE_TO_MANIFEST
RELATIVE_RUNTIME_DIR
LIBMONADO
)
set(multiValueArgs)
cmake_parse_arguments(_genmanifest "${options}" "${oneValueArgs}"
"${multiValueArgs}" ${ARGN})
if(NOT _genmanifest_MANIFEST_TEMPLATE)
set(_genmanifest_MANIFEST_TEMPLATE "${_OXR_MANIFEST_TEMPLATE}")
endif()
if(NOT _genmanifest_RUNTIME_TARGET)
message(FATAL_ERROR "Need RUNTIME_TARGET specified!")
endif()
if(NOT _genmanifest_DESTINATION)
message(FATAL_ERROR "Need DESTINATION specified!")
endif()
if(NOT _genmanifest_RELATIVE_RUNTIME_DIR)
message(FATAL_ERROR "Need RELATIVE_RUNTIME_DIR specified!")
endif()
if(NOT _genmanifest_OUT_FILENAME)
set(_genmanifest_OUT_FILENAME "${_genmanifest_RUNTIME_TARGET}.json")
endif()
set(_genmanifest_fwdargs)
if(_genmanifest_ABSOLUTE_RUNTIME_PATH)
list(APPEND _genmanifest_fwdargs ABSOLUTE_TARGET_PATH)
endif()
if(_genmanifest_RUNTIME_DIR_RELATIVE_TO_MANIFEST)
list(APPEND _genmanifest_fwdargs TARGET_DIR_RELATIVE_TO_MANIFEST
"${_genmanifest_RUNTIME_DIR_RELATIVE_TO_MANIFEST}")
endif()
if(_genmanifest_COMPONENT)
list(APPEND _genmanifest_fwdargs COMPONENT "${_genmanifest_COMPONENT}")
endif()
generate_khr_manifest_at_install(
${_genmanifest_fwdargs}
MANIFEST_DESCRIPTION
"OpenXR runtime manifest"
MANIFEST_TEMPLATE
"${_genmanifest_MANIFEST_TEMPLATE}"
TARGET
"${_genmanifest_RUNTIME_TARGET}"
DESTINATION
"${_genmanifest_DESTINATION}"
RELATIVE_TARGET_DIR
"${_genmanifest_RELATIVE_RUNTIME_DIR}"
OUT_FILENAME
"${_genmanifest_OUT_FILENAME}"
LIBMONADO
"${_genmanifest_LIBMONADO}"
)
endfunction()