1 # Distributed under the OSI-approved BSD 3-Clause License. See accompanying
2 # file Copyright.txt or https://cmake.org/licensing for details.
4 #[=======================================================================[.rst:
10 Find Vulkan, which is a low-overhead, cross-platform 3D graphics
16 .. versionadded:: 3.24
18 This module respects several optional COMPONENTS.
19 There are corresponding imported targets for each of these.
25 The ``glslangValidator`` tool.
28 The SPIR-V generator library.
31 The static library for Vulkan shader compilation.
34 Tools to process SPIR-V modules.
37 On macOS, an additional component ``MoltenVK`` is available.
39 The ``glslc`` and ``glslangValidator`` components are provided even
40 if not explicitly requested (for backward compatibility).
45 This module defines :prop_tgt:`IMPORTED` targets if Vulkan has been found:
48 The main Vulkan library.
51 .. versionadded:: 3.19
53 The GLSLC SPIR-V compiler, if it has been found.
56 .. versionadded:: 3.21
58 Provides just Vulkan headers include paths, if found. No library is
59 included in this target. This can be useful for applications that
60 load Vulkan library dynamically.
62 ``Vulkan::glslangValidator``
63 .. versionadded:: 3.21
65 The glslangValidator tool, if found. It is used to compile GLSL and
66 HLSL shaders into SPIR-V.
69 .. versionadded:: 3.24
71 Defined if SDK has the Khronos-reference front-end shader parser and SPIR-V
72 generator library (glslang).
74 ``Vulkan::shaderc_combined``
75 .. versionadded:: 3.24
77 Defined if SDK has the Google static library for Vulkan shader compilation
80 ``Vulkan::SPIRV-Tools``
81 .. versionadded:: 3.24
83 Defined if SDK has the Khronos library to process SPIR-V modules
87 .. versionadded:: 3.24
89 Defined if SDK has the Khronos library which implement a subset of Vulkan API
90 over Apple Metal graphics framework. (MoltenVK).
95 This module defines the following variables:
98 set to true if Vulkan was found
99 ``Vulkan_INCLUDE_DIRS``
100 include directories for Vulkan
102 link against this library to use Vulkan
104 .. versionadded:: 3.23
106 value from ``vulkan/vulkan_core.h``
107 ``Vulkan_glslc_FOUND``
108 .. versionadded:: 3.24
110 True, if the SDK has the glslc executable.
111 ``Vulkan_glslangValidator_FOUND``
112 .. versionadded:: 3.24
114 True, if the SDK has the glslangValidator executable.
115 ``Vulkan_glslang_FOUND``
116 .. versionadded:: 3.24
118 True, if the SDK has the glslang library.
119 ``Vulkan_shaderc_combined_FOUND``
120 .. versionadded:: 3.24
122 True, if the SDK has the shaderc_combined library.
123 ``Vulkan_SPIRV-Tools_FOUND``
124 .. versionadded:: 3.24
126 True, if the SDK has the SPIRV-Tools library.
127 ``Vulkan_MoltenVK_FOUND``
128 .. versionadded:: 3.24
130 True, if the SDK has the MoltenVK library.
132 The module will also defines these cache variables:
134 ``Vulkan_INCLUDE_DIR``
135 the Vulkan include directory
137 the path to the Vulkan library
138 ``Vulkan_GLSLC_EXECUTABLE``
139 the path to the GLSL SPIR-V compiler
140 ``Vulkan_GLSLANG_VALIDATOR_EXECUTABLE``
141 the path to the glslangValidator tool
142 ``Vulkan_glslang_LIBRARY``
143 .. versionadded:: 3.24
145 Path to the glslang library.
146 ``Vulkan_shaderc_combined_LIBRARY``
147 .. versionadded:: 3.24
149 Path to the shaderc_combined library.
150 ``Vulkan_SPIRV-Tools_LIBRARY``
151 .. versionadded:: 3.24
153 Path to the SPIRV-Tools library.
154 ``Vulkan_MoltenVK_LIBRARY``
155 .. versionadded:: 3.24
157 Path to the MoltenVK library.
162 .. versionadded:: 3.18
164 The ``VULKAN_SDK`` environment variable optionally specifies the
165 location of the Vulkan SDK root directory for the given
166 architecture. It is typically set by sourcing the toplevel
167 ``setup-env.sh`` script of the Vulkan SDK directory into the shell
170 #]=======================================================================]
173 cmake_policy(SET CMP0057 NEW)
175 # Provide compatibility with a common invalid component request that
176 # was silently ignored prior to CMake 3.24.
177 if("FATAL_ERROR" IN_LIST Vulkan_FIND_COMPONENTS)
178 message(AUTHOR_WARNING
179 "Ignoring unknown component 'FATAL_ERROR'.\n"
180 "The find_package() command documents no such argument."
182 list(REMOVE_ITEM Vulkan_FIND_COMPONENTS "FATAL_ERROR")
185 # For backward compatibility as `FindVulkan` in previous CMake versions allow to retrieve `glslc`
186 # and `glslangValidator` without requesting the corresponding component.
187 if(NOT glslc IN_LIST Vulkan_FIND_COMPONENTS)
188 list(APPEND Vulkan_FIND_COMPONENTS glslc)
190 if(NOT glslangValidator IN_LIST Vulkan_FIND_COMPONENTS)
191 list(APPEND Vulkan_FIND_COMPONENTS glslangValidator)
195 set(_Vulkan_library_name vulkan-1)
196 set(_Vulkan_hint_include_search_paths
197 "$ENV{VULKAN_SDK}/Include"
199 if(CMAKE_SIZEOF_VOID_P EQUAL 8)
200 set(_Vulkan_hint_executable_search_paths
201 "$ENV{VULKAN_SDK}/Bin"
203 set(_Vulkan_hint_library_search_paths
204 "$ENV{VULKAN_SDK}/Lib"
205 "$ENV{VULKAN_SDK}/Bin"
208 set(_Vulkan_hint_executable_search_paths
209 "$ENV{VULKAN_SDK}/Bin32"
211 set(_Vulkan_hint_library_search_paths
212 "$ENV{VULKAN_SDK}/Lib32"
213 "$ENV{VULKAN_SDK}/Bin32"
217 set(_Vulkan_library_name vulkan)
218 set(_Vulkan_hint_include_search_paths
219 "$ENV{VULKAN_SDK}/include"
221 set(_Vulkan_hint_executable_search_paths
222 "$ENV{VULKAN_SDK}/bin"
224 set(_Vulkan_hint_library_search_paths
225 "$ENV{VULKAN_SDK}/lib"
228 if(APPLE AND DEFINED ENV{VULKAN_SDK})
229 cmake_path(SET _MoltenVK_path NORMALIZE "$ENV{VULKAN_SDK}/../MoltenVK")
230 if(EXISTS "${_MoltenVK_path}")
231 list(APPEND _Vulkan_hint_include_search_paths
232 "${_MoltenVK_path}/include"
234 if(CMAKE_SYSTEM_NAME STREQUAL "iOS")
235 list(APPEND _Vulkan_hint_library_search_paths
236 "${_MoltenVK_path}/dylib/iOS"
238 elseif(CMAKE_SYSTEM_NAME STREQUAL "tvOS")
239 list(APPEND _Vulkan_hint_library_search_paths
240 "${_MoltenVK_path}/dylib/tvOS"
243 list(APPEND _Vulkan_hint_library_search_paths
244 "${_MoltenVK_path}/dylib/macOS"
248 unset(_MoltenVK_path)
251 find_path(Vulkan_INCLUDE_DIR
252 NAMES vulkan/vulkan.h
254 ${_Vulkan_hint_include_search_paths}
256 mark_as_advanced(Vulkan_INCLUDE_DIR)
258 find_library(Vulkan_LIBRARY
259 NAMES ${_Vulkan_library_name}
261 ${_Vulkan_hint_library_search_paths}
263 mark_as_advanced(Vulkan_LIBRARY)
265 if(glslc IN_LIST Vulkan_FIND_COMPONENTS)
266 find_program(Vulkan_GLSLC_EXECUTABLE
269 ${_Vulkan_hint_executable_search_paths}
271 mark_as_advanced(Vulkan_GLSLC_EXECUTABLE)
273 if(glslangValidator IN_LIST Vulkan_FIND_COMPONENTS)
274 find_program(Vulkan_GLSLANG_VALIDATOR_EXECUTABLE
275 NAMES glslangValidator
277 ${_Vulkan_hint_executable_search_paths}
279 mark_as_advanced(Vulkan_GLSLANG_VALIDATOR_EXECUTABLE)
281 if(glslang IN_LIST Vulkan_FIND_COMPONENTS)
282 find_library(Vulkan_glslang-spirv_LIBRARY
285 ${_Vulkan_hint_library_search_paths}
287 mark_as_advanced(Vulkan_glslang-spirv_LIBRARY)
289 find_library(Vulkan_glslang-spirv_DEBUG_LIBRARY
292 ${_Vulkan_hint_library_search_paths}
294 mark_as_advanced(Vulkan_glslang-spirv_DEBUG_LIBRARY)
296 find_library(Vulkan_glslang-oglcompiler_LIBRARY
299 ${_Vulkan_hint_library_search_paths}
301 mark_as_advanced(Vulkan_glslang-oglcompiler_LIBRARY)
303 find_library(Vulkan_glslang-oglcompiler_DEBUG_LIBRARY
306 ${_Vulkan_hint_library_search_paths}
308 mark_as_advanced(Vulkan_glslang-oglcompiler_DEBUG_LIBRARY)
310 find_library(Vulkan_glslang-osdependent_LIBRARY
313 ${_Vulkan_hint_library_search_paths}
315 mark_as_advanced(Vulkan_glslang-osdependent_LIBRARY)
317 find_library(Vulkan_glslang-osdependent_DEBUG_LIBRARY
320 ${_Vulkan_hint_library_search_paths}
322 mark_as_advanced(Vulkan_glslang-osdependent_DEBUG_LIBRARY)
324 find_library(Vulkan_glslang-machineindependent_LIBRARY
325 NAMES MachineIndependent
327 ${_Vulkan_hint_library_search_paths}
329 mark_as_advanced(Vulkan_glslang-machineindependent_LIBRARY)
331 find_library(Vulkan_glslang-machineindependent_DEBUG_LIBRARY
332 NAMES MachineIndependentd
334 ${_Vulkan_hint_library_search_paths}
336 mark_as_advanced(Vulkan_glslang-machineindependent_DEBUG_LIBRARY)
338 find_library(Vulkan_glslang-genericcodegen_LIBRARY
341 ${_Vulkan_hint_library_search_paths}
343 mark_as_advanced(Vulkan_glslang-genericcodegen_LIBRARY)
345 find_library(Vulkan_glslang-genericcodegen_DEBUG_LIBRARY
346 NAMES GenericCodeGend
348 ${_Vulkan_hint_library_search_paths}
350 mark_as_advanced(Vulkan_glslang-genericcodegen_DEBUG_LIBRARY)
352 find_library(Vulkan_glslang_LIBRARY
355 ${_Vulkan_hint_library_search_paths}
357 mark_as_advanced(Vulkan_glslang_LIBRARY)
359 find_library(Vulkan_glslang_DEBUG_LIBRARY
362 ${_Vulkan_hint_library_search_paths}
364 mark_as_advanced(Vulkan_glslang_DEBUG_LIBRARY)
366 if(shaderc_combined IN_LIST Vulkan_FIND_COMPONENTS)
367 find_library(Vulkan_shaderc_combined_LIBRARY
368 NAMES shaderc_combined
370 ${_Vulkan_hint_library_search_paths})
371 mark_as_advanced(Vulkan_shaderc_combined_LIBRARY)
373 find_library(Vulkan_shaderc_combined_DEBUG_LIBRARY
374 NAMES shaderc_combinedd
376 ${_Vulkan_hint_library_search_paths})
377 mark_as_advanced(Vulkan_shaderc_combined_DEBUG_LIBRARY)
379 if(SPIRV-Tools IN_LIST Vulkan_FIND_COMPONENTS)
380 find_library(Vulkan_SPIRV-Tools_LIBRARY
383 ${_Vulkan_hint_library_search_paths})
384 mark_as_advanced(Vulkan_SPIRV-Tools_LIBRARY)
386 find_library(Vulkan_SPIRV-Tools_DEBUG_LIBRARY
389 ${_Vulkan_hint_library_search_paths})
390 mark_as_advanced(Vulkan_SPIRV-Tools_DEBUG_LIBRARY)
392 if(MoltenVK IN_LIST Vulkan_FIND_COMPONENTS)
393 find_library(Vulkan_MoltenVK_LIBRARY
396 ${_Vulkan_hint_library_search_paths})
397 mark_as_advanced(Vulkan_MoltenVK_LIBRARY)
399 find_path(Vulkan_MoltenVK_INCLUDE_DIR
400 NAMES MoltenVK/mvk_vulkan.h
402 ${_Vulkan_hint_include_search_paths}
404 mark_as_advanced(Vulkan_MoltenVK_INCLUDE_DIR)
407 if(Vulkan_GLSLC_EXECUTABLE)
408 set(Vulkan_glslc_FOUND TRUE)
410 set(Vulkan_glslc_FOUND FALSE)
413 if(Vulkan_GLSLANG_VALIDATOR_EXECUTABLE)
414 set(Vulkan_glslangValidator_FOUND TRUE)
416 set(Vulkan_glslangValidator_FOUND FALSE)
419 function(_Vulkan_set_library_component_found component)
420 cmake_parse_arguments(PARSE_ARGV 1 _ARG
423 "DEPENDENT_COMPONENTS")
425 set(all_dependent_component_found TRUE)
426 foreach(dependent_component IN LISTS _ARG_DEPENDENT_COMPONENTS)
427 if(NOT Vulkan_${dependent_component}_FOUND)
428 set(all_dependent_component_found FALSE)
433 if(all_dependent_component_found AND (Vulkan_${component}_LIBRARY OR Vulkan_${component}_DEBUG_LIBRARY))
434 set(Vulkan_${component}_FOUND TRUE PARENT_SCOPE)
436 # For Windows Vulkan SDK, third party tools binaries are provided with different MSVC ABI:
437 # - Release binaries uses a runtime library
438 # - Debug binaries uses a debug runtime library
439 # This lead to incompatibilities in linking for some configuration types due to CMake-default or project-configured selected MSVC ABI.
440 if(WIN32 AND NOT _ARG_NO_WARNING)
441 if(NOT Vulkan_${component}_LIBRARY)
443 "Library ${component} for Release configuration is missing, imported target Vulkan::${component} may not be able to link when targeting this build configuration due to incompatible MSVC ABI.")
445 if(NOT Vulkan_${component}_DEBUG_LIBRARY)
447 "Library ${component} for Debug configuration is missing, imported target Vulkan::${component} may not be able to link when targeting this build configuration due to incompatible MSVC ABI. Consider re-installing the Vulkan SDK and request debug libraries to fix this warning.")
451 set(Vulkan_${component}_FOUND FALSE PARENT_SCOPE)
455 _Vulkan_set_library_component_found(glslang-spirv NO_WARNING)
456 _Vulkan_set_library_component_found(glslang-oglcompiler NO_WARNING)
457 _Vulkan_set_library_component_found(glslang-osdependent NO_WARNING)
458 _Vulkan_set_library_component_found(glslang-machineindependent NO_WARNING)
459 _Vulkan_set_library_component_found(glslang-genericcodegen NO_WARNING)
460 _Vulkan_set_library_component_found(glslang
465 glslang-machineindependent
466 glslang-genericcodegen)
467 _Vulkan_set_library_component_found(shaderc_combined)
468 _Vulkan_set_library_component_found(SPIRV-Tools)
470 if(Vulkan_MoltenVK_INCLUDE_DIR AND Vulkan_MoltenVK_LIBRARY)
471 set(Vulkan_MoltenVK_FOUND TRUE)
473 set(Vulkan_MoltenVK_FOUND FALSE)
476 set(Vulkan_LIBRARIES ${Vulkan_LIBRARY})
477 set(Vulkan_INCLUDE_DIRS ${Vulkan_INCLUDE_DIR})
479 # detect version e.g 1.2.189
480 set(Vulkan_VERSION "")
481 if(Vulkan_INCLUDE_DIR)
482 set(VULKAN_CORE_H ${Vulkan_INCLUDE_DIR}/vulkan/vulkan_core.h)
483 if(EXISTS ${VULKAN_CORE_H})
484 file(STRINGS ${VULKAN_CORE_H} VulkanHeaderVersionLine REGEX "^#define VK_HEADER_VERSION ")
485 string(REGEX MATCHALL "[0-9]+" VulkanHeaderVersion "${VulkanHeaderVersionLine}")
486 file(STRINGS ${VULKAN_CORE_H} VulkanHeaderVersionLine2 REGEX "^#define VK_HEADER_VERSION_COMPLETE ")
487 string(REGEX MATCHALL "[0-9]+" VulkanHeaderVersion2 "${VulkanHeaderVersionLine2}")
488 list(LENGTH VulkanHeaderVersion2 _len)
489 # versions >= 1.2.175 have an additional numbers in front of e.g. '0, 1, 2' instead of '1, 2'
491 list(REMOVE_AT VulkanHeaderVersion2 0)
493 list(APPEND VulkanHeaderVersion2 ${VulkanHeaderVersion})
494 list(JOIN VulkanHeaderVersion2 "." Vulkan_VERSION)
498 if(Vulkan_MoltenVK_FOUND)
499 set(Vulkan_MoltenVK_VERSION "")
500 if(Vulkan_MoltenVK_INCLUDE_DIR)
501 set(VK_MVK_MOLTENVK_H ${Vulkan_MoltenVK_INCLUDE_DIR}/MoltenVK/vk_mvk_moltenvk.h)
502 if(EXISTS ${VK_MVK_MOLTENVK_H})
503 file(STRINGS ${VK_MVK_MOLTENVK_H} _Vulkan_MoltenVK_VERSION_MAJOR REGEX "^#define MVK_VERSION_MAJOR ")
504 string(REGEX MATCHALL "[0-9]+" _Vulkan_MoltenVK_VERSION_MAJOR "${_Vulkan_MoltenVK_VERSION_MAJOR}")
505 file(STRINGS ${VK_MVK_MOLTENVK_H} _Vulkan_MoltenVK_VERSION_MINOR REGEX "^#define MVK_VERSION_MINOR ")
506 string(REGEX MATCHALL "[0-9]+" _Vulkan_MoltenVK_VERSION_MINOR "${_Vulkan_MoltenVK_VERSION_MINOR}")
507 file(STRINGS ${VK_MVK_MOLTENVK_H} _Vulkan_MoltenVK_VERSION_PATCH REGEX "^#define MVK_VERSION_PATCH ")
508 string(REGEX MATCHALL "[0-9]+" _Vulkan_MoltenVK_VERSION_PATCH "${_Vulkan_MoltenVK_VERSION_PATCH}")
509 set(Vulkan_MoltenVK_VERSION "${_Vulkan_MoltenVK_VERSION_MAJOR}.${_Vulkan_MoltenVK_VERSION_MINOR}.${_Vulkan_MoltenVK_VERSION_PATCH}")
510 unset(_Vulkan_MoltenVK_VERSION_MAJOR)
511 unset(_Vulkan_MoltenVK_VERSION_MINOR)
512 unset(_Vulkan_MoltenVK_VERSION_PATCH)
517 include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
518 find_package_handle_standard_args(Vulkan
527 if(Vulkan_FOUND AND NOT TARGET Vulkan::Vulkan)
528 add_library(Vulkan::Vulkan UNKNOWN IMPORTED)
529 set_target_properties(Vulkan::Vulkan PROPERTIES
530 IMPORTED_LOCATION "${Vulkan_LIBRARIES}"
531 INTERFACE_INCLUDE_DIRECTORIES "${Vulkan_INCLUDE_DIRS}")
534 if(Vulkan_FOUND AND NOT TARGET Vulkan::Headers)
535 add_library(Vulkan::Headers INTERFACE IMPORTED)
536 set_target_properties(Vulkan::Headers PROPERTIES
537 INTERFACE_INCLUDE_DIRECTORIES "${Vulkan_INCLUDE_DIRS}")
540 if(Vulkan_FOUND AND Vulkan_GLSLC_EXECUTABLE AND NOT TARGET Vulkan::glslc)
541 add_executable(Vulkan::glslc IMPORTED)
542 set_property(TARGET Vulkan::glslc PROPERTY IMPORTED_LOCATION "${Vulkan_GLSLC_EXECUTABLE}")
545 if(Vulkan_FOUND AND Vulkan_GLSLANG_VALIDATOR_EXECUTABLE AND NOT TARGET Vulkan::glslangValidator)
546 add_executable(Vulkan::glslangValidator IMPORTED)
547 set_property(TARGET Vulkan::glslangValidator PROPERTY IMPORTED_LOCATION "${Vulkan_GLSLANG_VALIDATOR_EXECUTABLE}")
551 if((Vulkan_glslang-spirv_LIBRARY OR Vulkan_glslang-spirv_DEBUG_LIBRARY) AND NOT TARGET Vulkan::glslang-spirv)
552 add_library(Vulkan::glslang-spirv STATIC IMPORTED)
553 set_property(TARGET Vulkan::glslang-spirv
555 INTERFACE_INCLUDE_DIRECTORIES "${Vulkan_INCLUDE_DIRS}")
556 if(Vulkan_glslang-spirv_LIBRARY)
557 set_property(TARGET Vulkan::glslang-spirv APPEND
559 IMPORTED_CONFIGURATIONS Release)
560 set_property(TARGET Vulkan::glslang-spirv
562 IMPORTED_LOCATION_RELEASE "${Vulkan_glslang-spirv_LIBRARY}")
564 if(Vulkan_glslang-spirv_DEBUG_LIBRARY)
565 set_property(TARGET Vulkan::glslang-spirv APPEND
567 IMPORTED_CONFIGURATIONS Debug)
568 set_property(TARGET Vulkan::glslang-spirv
570 IMPORTED_LOCATION_DEBUG "${Vulkan_glslang-spirv_DEBUG_LIBRARY}")
574 if((Vulkan_glslang-oglcompiler_LIBRARY OR Vulkan_glslang-oglcompiler_DEBUG_LIBRARY) AND NOT TARGET Vulkan::glslang-oglcompiler)
575 add_library(Vulkan::glslang-oglcompiler STATIC IMPORTED)
576 set_property(TARGET Vulkan::glslang-oglcompiler
578 INTERFACE_INCLUDE_DIRECTORIES "${Vulkan_INCLUDE_DIRS}")
579 if(Vulkan_glslang-oglcompiler_LIBRARY)
580 set_property(TARGET Vulkan::glslang-oglcompiler APPEND
582 IMPORTED_CONFIGURATIONS Release)
583 set_property(TARGET Vulkan::glslang-oglcompiler
585 IMPORTED_LOCATION_RELEASE "${Vulkan_glslang-oglcompiler_LIBRARY}")
587 if(Vulkan_glslang-oglcompiler_DEBUG_LIBRARY)
588 set_property(TARGET Vulkan::glslang-oglcompiler APPEND
590 IMPORTED_CONFIGURATIONS Debug)
591 set_property(TARGET Vulkan::glslang-oglcompiler
593 IMPORTED_LOCATION_DEBUG "${Vulkan_glslang-oglcompiler_DEBUG_LIBRARY}")
597 if((Vulkan_glslang-osdependent_LIBRARY OR Vulkan_glslang-osdependent_DEBUG_LIBRARY) AND NOT TARGET Vulkan::glslang-osdependent)
598 add_library(Vulkan::glslang-osdependent STATIC IMPORTED)
599 set_property(TARGET Vulkan::glslang-osdependent
601 INTERFACE_INCLUDE_DIRECTORIES "${Vulkan_INCLUDE_DIRS}")
602 if(Vulkan_glslang-osdependent_LIBRARY)
603 set_property(TARGET Vulkan::glslang-osdependent APPEND
605 IMPORTED_CONFIGURATIONS Release)
606 set_property(TARGET Vulkan::glslang-osdependent
608 IMPORTED_LOCATION_RELEASE "${Vulkan_glslang-osdependent_LIBRARY}")
610 if(Vulkan_glslang-osdependent_DEBUG_LIBRARY)
611 set_property(TARGET Vulkan::glslang-osdependent APPEND
613 IMPORTED_CONFIGURATIONS Debug)
614 set_property(TARGET Vulkan::glslang-osdependent
616 IMPORTED_LOCATION_DEBUG "${Vulkan_glslang-osdependent_DEBUG_LIBRARY}")
620 if((Vulkan_glslang-machineindependent_LIBRARY OR Vulkan_glslang-machineindependent_DEBUG_LIBRARY) AND NOT TARGET Vulkan::glslang-machineindependent)
621 add_library(Vulkan::glslang-machineindependent STATIC IMPORTED)
622 set_property(TARGET Vulkan::glslang-machineindependent
624 INTERFACE_INCLUDE_DIRECTORIES "${Vulkan_INCLUDE_DIRS}")
625 if(Vulkan_glslang-machineindependent_LIBRARY)
626 set_property(TARGET Vulkan::glslang-machineindependent APPEND
628 IMPORTED_CONFIGURATIONS Release)
629 set_property(TARGET Vulkan::glslang-machineindependent
631 IMPORTED_LOCATION_RELEASE "${Vulkan_glslang-machineindependent_LIBRARY}")
633 if(Vulkan_glslang-machineindependent_DEBUG_LIBRARY)
634 set_property(TARGET Vulkan::glslang-machineindependent APPEND
636 IMPORTED_CONFIGURATIONS Debug)
637 set_property(TARGET Vulkan::glslang-machineindependent
639 IMPORTED_LOCATION_DEBUG "${Vulkan_glslang-machineindependent_DEBUG_LIBRARY}")
643 if((Vulkan_glslang-genericcodegen_LIBRARY OR Vulkan_glslang-genericcodegen_DEBUG_LIBRARY) AND NOT TARGET Vulkan::glslang-genericcodegen)
644 add_library(Vulkan::glslang-genericcodegen STATIC IMPORTED)
645 set_property(TARGET Vulkan::glslang-genericcodegen
647 INTERFACE_INCLUDE_DIRECTORIES "${Vulkan_INCLUDE_DIRS}")
648 if(Vulkan_glslang-genericcodegen_LIBRARY)
649 set_property(TARGET Vulkan::glslang-genericcodegen APPEND
651 IMPORTED_CONFIGURATIONS Release)
652 set_property(TARGET Vulkan::glslang-genericcodegen
654 IMPORTED_LOCATION_RELEASE "${Vulkan_glslang-genericcodegen_LIBRARY}")
656 if(Vulkan_glslang-genericcodegen_DEBUG_LIBRARY)
657 set_property(TARGET Vulkan::glslang-genericcodegen APPEND
659 IMPORTED_CONFIGURATIONS Debug)
660 set_property(TARGET Vulkan::glslang-genericcodegen
662 IMPORTED_LOCATION_DEBUG "${Vulkan_glslang-genericcodegen_DEBUG_LIBRARY}")
666 if((Vulkan_glslang_LIBRARY OR Vulkan_glslang_DEBUG_LIBRARY)
667 AND TARGET Vulkan::glslang-spirv
668 AND TARGET Vulkan::glslang-oglcompiler
669 AND TARGET Vulkan::glslang-osdependent
670 AND TARGET Vulkan::glslang-machineindependent
671 AND TARGET Vulkan::glslang-genericcodegen
672 AND NOT TARGET Vulkan::glslang)
673 add_library(Vulkan::glslang STATIC IMPORTED)
674 set_property(TARGET Vulkan::glslang
676 INTERFACE_INCLUDE_DIRECTORIES "${Vulkan_INCLUDE_DIRS}")
677 if(Vulkan_glslang_LIBRARY)
678 set_property(TARGET Vulkan::glslang APPEND
680 IMPORTED_CONFIGURATIONS Release)
681 set_property(TARGET Vulkan::glslang
683 IMPORTED_LOCATION_RELEASE "${Vulkan_glslang_LIBRARY}")
685 if(Vulkan_glslang_DEBUG_LIBRARY)
686 set_property(TARGET Vulkan::glslang APPEND
688 IMPORTED_CONFIGURATIONS Debug)
689 set_property(TARGET Vulkan::glslang
691 IMPORTED_LOCATION_DEBUG "${Vulkan_glslang_DEBUG_LIBRARY}")
693 target_link_libraries(Vulkan::glslang
695 Vulkan::glslang-spirv
696 Vulkan::glslang-oglcompiler
697 Vulkan::glslang-osdependent
698 Vulkan::glslang-machineindependent
699 Vulkan::glslang-genericcodegen
703 if((Vulkan_shaderc_combined_LIBRARY OR Vulkan_shaderc_combined_DEBUG_LIBRARY) AND NOT TARGET Vulkan::shaderc_combined)
704 add_library(Vulkan::shaderc_combined STATIC IMPORTED)
705 set_property(TARGET Vulkan::shaderc_combined
707 INTERFACE_INCLUDE_DIRECTORIES "${Vulkan_INCLUDE_DIRS}")
708 if(Vulkan_shaderc_combined_LIBRARY)
709 set_property(TARGET Vulkan::shaderc_combined APPEND
711 IMPORTED_CONFIGURATIONS Release)
712 set_property(TARGET Vulkan::shaderc_combined
714 IMPORTED_LOCATION_RELEASE "${Vulkan_shaderc_combined_LIBRARY}")
716 if(Vulkan_shaderc_combined_DEBUG_LIBRARY)
717 set_property(TARGET Vulkan::shaderc_combined APPEND
719 IMPORTED_CONFIGURATIONS Debug)
720 set_property(TARGET Vulkan::shaderc_combined
722 IMPORTED_LOCATION_DEBUG "${Vulkan_shaderc_combined_DEBUG_LIBRARY}")
726 find_package(Threads REQUIRED)
727 target_link_libraries(Vulkan::shaderc_combined
733 if((Vulkan_SPIRV-Tools_LIBRARY OR Vulkan_SPIRV-Tools_DEBUG_LIBRARY) AND NOT TARGET Vulkan::SPIRV-Tools)
734 add_library(Vulkan::SPIRV-Tools STATIC IMPORTED)
735 set_property(TARGET Vulkan::SPIRV-Tools
737 INTERFACE_INCLUDE_DIRECTORIES "${Vulkan_INCLUDE_DIRS}")
738 if(Vulkan_SPIRV-Tools_LIBRARY)
739 set_property(TARGET Vulkan::SPIRV-Tools APPEND
741 IMPORTED_CONFIGURATIONS Release)
742 set_property(TARGET Vulkan::SPIRV-Tools
744 IMPORTED_LOCATION_RELEASE "${Vulkan_SPIRV-Tools_LIBRARY}")
746 if(Vulkan_SPIRV-Tools_DEBUG_LIBRARY)
747 set_property(TARGET Vulkan::SPIRV-Tools APPEND
749 IMPORTED_CONFIGURATIONS Debug)
750 set_property(TARGET Vulkan::SPIRV-Tools
752 IMPORTED_LOCATION_DEBUG "${Vulkan_SPIRV-Tools_DEBUG_LIBRARY}")
757 if(Vulkan_MoltenVK_FOUND)
758 if(Vulkan_MoltenVK_LIBRARY AND NOT TARGET Vulkan::MoltenVK)
759 add_library(Vulkan::MoltenVK SHARED IMPORTED)
760 set_target_properties(Vulkan::MoltenVK
762 INTERFACE_INCLUDE_DIRECTORIES "${Vulkan_MoltenVK_INCLUDE_DIR}"
763 IMPORTED_LOCATION "${Vulkan_MoltenVK_LIBRARY}"
768 unset(_Vulkan_library_name)
769 unset(_Vulkan_hint_include_search_paths)
770 unset(_Vulkan_hint_executable_search_paths)
771 unset(_Vulkan_hint_library_search_paths)