/
GenerateVulkanApiLayerManifest.cmake
140 lines (117 loc) · 5.01 KB
/
GenerateVulkanApiLayerManifest.cmake
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()