1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
# 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:
GenerateVulkanApiLayerManifest
---------------
The following functions are provided by this module:
- :command:`generate_vulkan_api_layer_manifest_buildtree`
- :command:`generate_vulkan_api_layer_manifest_at_install`
.. command:: generate_vulkan_api_layer_manifest_buildtree
Generates a layer manifest suitable for use in the build tree,
with absolute paths, at configure time::
generate_vulkan_api_layer_manifest_buildtree(
MANIFEST_TEMPLATE <template> # The template for your manifest file
LAYER_TARGET <target> # Name of your layer target
OUT_FILE <outfile> # Name of the manifest file (with path) to generate
)
.. command:: generate_vulkan_api_layer_manifest_at_install
Generates a layer manifest at install time and installs it where desired::
generate_vulkan_api_layer_manifest_at_install(
MANIFEST_TEMPLATE <template> # The template for your manifest file
LAYER_TARGET <target> # Name of your layer target
DESTINATION <dest> # The install-prefix-relative path to install the manifest to.
RELATIVE_LAYER_DIR <dir> # The install-prefix-relative path that the layer library is installed to.
[COMPONENT <comp>] # If present, the component to place the manifest in.
[ABSOLUTE_LAYER_PATH| # If present, path in generated manifest is absolute
LAYER_DIR_RELATIVE_TO_MANIFEST <dir>]
# If present (and ABSOLUTE_LAYER_PATH not present), specifies the
# layer directory relative to the manifest directory in the installed layout
[OUT_FILENAME <outfilename> # Optional: Alternate name of the manifest file to generate
)
#]]
# This module is mostly just argument parsing, the guts are in GenerateKhrManifest
get_filename_component(_VK_MANIFEST_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
include("${_VK_MANIFEST_CMAKE_DIR}/GenerateKhrManifest.cmake")
function(generate_vulkan_api_layer_manifest_buildtree)
set(options)
set(oneValueArgs MANIFEST_TEMPLATE LAYER_TARGET OUT_FILE)
set(multiValueArgs)
cmake_parse_arguments(_genmanifest "${options}" "${oneValueArgs}"
"${multiValueArgs}" ${ARGN})
if(NOT _genmanifest_MANIFEST_TEMPLATE)
message(FATAL_ERROR "Need MANIFEST_TEMPLATE specified!")
endif()
if(NOT _genmanifest_LAYER_TARGET)
message(FATAL_ERROR "Need LAYER_TARGET specified!")
endif()
if(NOT _genmanifest_OUT_FILE)
message(FATAL_ERROR "Need OUT_FILE specified!")
endif()
generate_khr_manifest_buildtree(
MANIFEST_DESCRIPTION
"Vulkan API layer manifest"
MANIFEST_TEMPLATE
"${_genmanifest_MANIFEST_TEMPLATE}"
TARGET
"${_genmanifest_LAYER_TARGET}"
OUT_FILE
"${_genmanifest_OUT_FILE}")
endfunction()
function(generate_vulkan_api_layer_manifest_at_install)
set(options ABSOLUTE_LAYER_PATH)
set(oneValueArgs
MANIFEST_TEMPLATE
DESTINATION
OUT_FILENAME
COMPONENT
LAYER_TARGET
LAYER_DIR_RELATIVE_TO_MANIFEST
RELATIVE_LAYER_DIR)
set(multiValueArgs)
cmake_parse_arguments(_genmanifest "${options}" "${oneValueArgs}"
"${multiValueArgs}" ${ARGN})
if(NOT _genmanifest_MANIFEST_TEMPLATE)
message(FATAL_ERROR "Need MANIFEST_TEMPLATE specified!")
endif()
if(NOT _genmanifest_LAYER_TARGET)
message(FATAL_ERROR "Need LAYER_TARGET specified!")
endif()
if(NOT _genmanifest_DESTINATION)
message(FATAL_ERROR "Need DESTINATION specified!")
endif()
if(NOT _genmanifest_RELATIVE_LAYER_DIR)
message(FATAL_ERROR "Need RELATIVE_LAYER_DIR specified!")
endif()
if(NOT _genmanifest_OUT_FILENAME)
set(_genmanifest_OUT_FILENAME "${_genmanifest_LAYER_TARGET}.json")
endif()
set(_genmanifest_fwdargs)
if(_genmanifest_ABSOLUTE_LAYER_PATH)
list(APPEND _genmanifest_fwdargs ABSOLUTE_TARGET_PATH)
endif()
if(_genmanifest_LAYER_DIR_RELATIVE_TO_MANIFEST)
list(APPEND _genmanifest_fwdargs TARGET_DIR_RELATIVE_TO_MANIFEST
"${_genmanifest_LAYER_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
"Vulkan API layer manifest"
MANIFEST_TEMPLATE
"${_genmanifest_MANIFEST_TEMPLATE}"
TARGET
"${_genmanifest_LAYER_TARGET}"
DESTINATION
"${_genmanifest_DESTINATION}"
RELATIVE_TARGET_DIR
"${_genmanifest_RELATIVE_LAYER_DIR}"
OUT_FILENAME
"${_genmanifest_OUT_FILENAME}")
endfunction()
|