| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886 |
- # Distributed under the OSI-approved BSD 3-Clause License. See accompanying
- # file Copyright.txt or https://cmake.org/licensing for details.
- #[=======================================================================[.rst:
- FindVulkan
- ----------
- .. versionadded:: 3.7
- Find Vulkan, which is a low-overhead, cross-platform 3D graphics
- and computing API.
- Optional COMPONENTS
- ^^^^^^^^^^^^^^^^^^^
- .. versionadded:: 3.24
- This module respects several optional COMPONENTS.
- There are corresponding imported targets for each of these.
- ``glslc``
- The SPIR-V compiler.
- ``glslangValidator``
- The ``glslangValidator`` tool.
- ``glslang``
- The SPIR-V generator library.
- ``shaderc_combined``
- The static library for Vulkan shader compilation.
- ``SPIRV-Tools``
- Tools to process SPIR-V modules.
- ``MoltenVK``
- On macOS, an additional component ``MoltenVK`` is available.
- ``dxc``
- .. versionadded:: 3.25
- The DirectX Shader Compiler.
- The ``glslc`` and ``glslangValidator`` components are provided even
- if not explicitly requested (for backward compatibility).
- IMPORTED Targets
- ^^^^^^^^^^^^^^^^
- This module defines :prop_tgt:`IMPORTED` targets if Vulkan has been found:
- ``Vulkan::Vulkan``
- The main Vulkan library.
- ``Vulkan::glslc``
- .. versionadded:: 3.19
- The GLSLC SPIR-V compiler, if it has been found.
- ``Vulkan::Headers``
- .. versionadded:: 3.21
- Provides just Vulkan headers include paths, if found. No library is
- included in this target. This can be useful for applications that
- load Vulkan library dynamically.
- ``Vulkan::glslangValidator``
- .. versionadded:: 3.21
- The glslangValidator tool, if found. It is used to compile GLSL and
- HLSL shaders into SPIR-V.
- ``Vulkan::glslang``
- .. versionadded:: 3.24
- Defined if SDK has the Khronos-reference front-end shader parser and SPIR-V
- generator library (glslang).
- ``Vulkan::shaderc_combined``
- .. versionadded:: 3.24
- Defined if SDK has the Google static library for Vulkan shader compilation
- (shaderc_combined).
- ``Vulkan::SPIRV-Tools``
- .. versionadded:: 3.24
- Defined if SDK has the Khronos library to process SPIR-V modules
- (SPIRV-Tools).
- ``Vulkan::MoltenVK``
- .. versionadded:: 3.24
- Defined if SDK has the Khronos library which implement a subset of Vulkan API
- over Apple Metal graphics framework. (MoltenVK).
- ``Vulkan::volk``
- .. versionadded:: 3.25
- Defined if SDK has the Vulkan meta-loader (volk).
- ``Vulkan::dxc_lib``
- .. versionadded:: 3.25
- Defined if SDK has the DirectX shader compiler library.
- ``Vulkan::dxc_exe``
- .. versionadded:: 3.25
- Defined if SDK has the DirectX shader compiler CLI tool.
- Result Variables
- ^^^^^^^^^^^^^^^^
- This module defines the following variables:
- ``Vulkan_FOUND``
- set to true if Vulkan was found
- ``Vulkan_INCLUDE_DIRS``
- include directories for Vulkan
- ``Vulkan_LIBRARIES``
- link against this library to use Vulkan
- ``Vulkan_VERSION``
- .. versionadded:: 3.23
- value from ``vulkan/vulkan_core.h``
- ``Vulkan_glslc_FOUND``
- .. versionadded:: 3.24
- True, if the SDK has the glslc executable.
- ``Vulkan_glslangValidator_FOUND``
- .. versionadded:: 3.24
- True, if the SDK has the glslangValidator executable.
- ``Vulkan_glslang_FOUND``
- .. versionadded:: 3.24
- True, if the SDK has the glslang library.
- ``Vulkan_shaderc_combined_FOUND``
- .. versionadded:: 3.24
- True, if the SDK has the shaderc_combined library.
- ``Vulkan_SPIRV-Tools_FOUND``
- .. versionadded:: 3.24
- True, if the SDK has the SPIRV-Tools library.
- ``Vulkan_MoltenVK_FOUND``
- .. versionadded:: 3.24
- True, if the SDK has the MoltenVK library.
- ``Vulkan_volk_FOUND``
- .. versionadded:: 3.25
- True, if the SDK has the volk library.
- ``Vulkan_dxc_lib_FOUND``
- .. versionadded:: 3.25
- True, if the SDK has the DirectX shader compiler library.
- ``Vulkan_dxc_exe_FOUND``
- .. versionadded:: 3.25
- True, if the SDK has the DirectX shader compiler CLI tool.
- The module will also defines these cache variables:
- ``Vulkan_INCLUDE_DIR``
- the Vulkan include directory
- ``Vulkan_LIBRARY``
- the path to the Vulkan library
- ``Vulkan_GLSLC_EXECUTABLE``
- the path to the GLSL SPIR-V compiler
- ``Vulkan_GLSLANG_VALIDATOR_EXECUTABLE``
- the path to the glslangValidator tool
- ``Vulkan_glslang_LIBRARY``
- .. versionadded:: 3.24
- Path to the glslang library.
- ``Vulkan_shaderc_combined_LIBRARY``
- .. versionadded:: 3.24
- Path to the shaderc_combined library.
- ``Vulkan_SPIRV-Tools_LIBRARY``
- .. versionadded:: 3.24
- Path to the SPIRV-Tools library.
- ``Vulkan_MoltenVK_LIBRARY``
- .. versionadded:: 3.24
- Path to the MoltenVK library.
- ``Vulkan_volk_LIBRARY``
- .. versionadded:: 3.25
- Path to the volk library.
- ``Vulkan_dxc_LIBRARY``
- .. versionadded:: 3.25
- Path to the DirectX shader compiler library.
- ``Vulkan_dxc_EXECUTABLE``
- .. versionadded:: 3.25
- Path to the DirectX shader compiler CLI tool.
- Hints
- ^^^^^
- .. versionadded:: 3.18
- The ``VULKAN_SDK`` environment variable optionally specifies the
- location of the Vulkan SDK root directory for the given
- architecture. It is typically set by sourcing the toplevel
- ``setup-env.sh`` script of the Vulkan SDK directory into the shell
- environment.
- #]=======================================================================]
- cmake_policy(PUSH)
- cmake_policy(SET CMP0159 NEW) # file(STRINGS) with REGEX updates CMAKE_MATCH_<n>
- # Provide compatibility with a common invalid component request that
- # was silently ignored prior to CMake 3.24.
- if("FATAL_ERROR" IN_LIST Vulkan_FIND_COMPONENTS)
- message(AUTHOR_WARNING
- "Ignoring unknown component 'FATAL_ERROR'.\n"
- "The find_package() command documents no such argument."
- )
- list(REMOVE_ITEM Vulkan_FIND_COMPONENTS "FATAL_ERROR")
- endif()
- # For backward compatibility as `FindVulkan` in previous CMake versions allow to retrieve `glslc`
- # and `glslangValidator` without requesting the corresponding component.
- if(NOT glslc IN_LIST Vulkan_FIND_COMPONENTS)
- list(APPEND Vulkan_FIND_COMPONENTS glslc)
- endif()
- if(NOT glslangValidator IN_LIST Vulkan_FIND_COMPONENTS)
- list(APPEND Vulkan_FIND_COMPONENTS glslangValidator)
- endif()
- if(WIN32)
- set(_Vulkan_library_name vulkan-1)
- set(_Vulkan_hint_include_search_paths
- "$ENV{VULKAN_SDK}/include"
- )
- if(CMAKE_SIZEOF_VOID_P EQUAL 8)
- set(_Vulkan_hint_executable_search_paths
- "$ENV{VULKAN_SDK}/bin"
- )
- set(_Vulkan_hint_library_search_paths
- "$ENV{VULKAN_SDK}/lib"
- "$ENV{VULKAN_SDK}/bin"
- )
- else()
- set(_Vulkan_hint_executable_search_paths
- "$ENV{VULKAN_SDK}/bin32"
- "$ENV{VULKAN_SDK}/bin"
- )
- set(_Vulkan_hint_library_search_paths
- "$ENV{VULKAN_SDK}/lib32"
- "$ENV{VULKAN_SDK}/bin32"
- "$ENV{VULKAN_SDK}/lib"
- "$ENV{VULKAN_SDK}/bin"
- )
- endif()
- else()
- set(_Vulkan_library_name vulkan)
- set(_Vulkan_hint_include_search_paths
- "$ENV{VULKAN_SDK}/include"
- )
- set(_Vulkan_hint_executable_search_paths
- "$ENV{VULKAN_SDK}/bin"
- )
- set(_Vulkan_hint_library_search_paths
- "$ENV{VULKAN_SDK}/lib"
- )
- endif()
- if(APPLE AND DEFINED ENV{VULKAN_SDK})
- cmake_path(SET _MoltenVK_path NORMALIZE "$ENV{VULKAN_SDK}/../MoltenVK")
- if(EXISTS "${_MoltenVK_path}")
- list(APPEND _Vulkan_hint_include_search_paths
- "${_MoltenVK_path}/include"
- )
- if(CMAKE_SYSTEM_NAME STREQUAL "iOS")
- list(APPEND _Vulkan_hint_library_search_paths
- "${_MoltenVK_path}/dylib/iOS"
- )
- elseif(CMAKE_SYSTEM_NAME STREQUAL "tvOS")
- list(APPEND _Vulkan_hint_library_search_paths
- "${_MoltenVK_path}/dylib/tvOS"
- )
- else()
- list(APPEND _Vulkan_hint_library_search_paths
- "${_MoltenVK_path}/dylib/macOS"
- )
- endif()
- endif()
- unset(_MoltenVK_path)
- endif()
- find_path(Vulkan_INCLUDE_DIR
- NAMES vulkan/vulkan.h
- HINTS
- ${_Vulkan_hint_include_search_paths}
- )
- mark_as_advanced(Vulkan_INCLUDE_DIR)
- find_library(Vulkan_LIBRARY
- NAMES ${_Vulkan_library_name}
- HINTS
- ${_Vulkan_hint_library_search_paths}
- )
- mark_as_advanced(Vulkan_LIBRARY)
- if(glslc IN_LIST Vulkan_FIND_COMPONENTS)
- find_program(Vulkan_GLSLC_EXECUTABLE
- NAMES glslc
- HINTS
- ${_Vulkan_hint_executable_search_paths}
- )
- mark_as_advanced(Vulkan_GLSLC_EXECUTABLE)
- endif()
- if(glslangValidator IN_LIST Vulkan_FIND_COMPONENTS)
- find_program(Vulkan_GLSLANG_VALIDATOR_EXECUTABLE
- NAMES glslangValidator
- HINTS
- ${_Vulkan_hint_executable_search_paths}
- )
- mark_as_advanced(Vulkan_GLSLANG_VALIDATOR_EXECUTABLE)
- endif()
- if(glslang IN_LIST Vulkan_FIND_COMPONENTS)
- find_library(Vulkan_glslang-spirv_LIBRARY
- NAMES SPIRV
- HINTS
- ${_Vulkan_hint_library_search_paths}
- )
- mark_as_advanced(Vulkan_glslang-spirv_LIBRARY)
- find_library(Vulkan_glslang-spirv_DEBUG_LIBRARY
- NAMES SPIRVd
- HINTS
- ${_Vulkan_hint_library_search_paths}
- )
- mark_as_advanced(Vulkan_glslang-spirv_DEBUG_LIBRARY)
- find_library(Vulkan_glslang-oglcompiler_LIBRARY
- NAMES OGLCompiler
- HINTS
- ${_Vulkan_hint_library_search_paths}
- )
- mark_as_advanced(Vulkan_glslang-oglcompiler_LIBRARY)
- find_library(Vulkan_glslang-oglcompiler_DEBUG_LIBRARY
- NAMES OGLCompilerd
- HINTS
- ${_Vulkan_hint_library_search_paths}
- )
- mark_as_advanced(Vulkan_glslang-oglcompiler_DEBUG_LIBRARY)
- find_library(Vulkan_glslang-osdependent_LIBRARY
- NAMES OSDependent
- HINTS
- ${_Vulkan_hint_library_search_paths}
- )
- mark_as_advanced(Vulkan_glslang-osdependent_LIBRARY)
- find_library(Vulkan_glslang-osdependent_DEBUG_LIBRARY
- NAMES OSDependentd
- HINTS
- ${_Vulkan_hint_library_search_paths}
- )
- mark_as_advanced(Vulkan_glslang-osdependent_DEBUG_LIBRARY)
- find_library(Vulkan_glslang-machineindependent_LIBRARY
- NAMES MachineIndependent
- HINTS
- ${_Vulkan_hint_library_search_paths}
- )
- mark_as_advanced(Vulkan_glslang-machineindependent_LIBRARY)
- find_library(Vulkan_glslang-machineindependent_DEBUG_LIBRARY
- NAMES MachineIndependentd
- HINTS
- ${_Vulkan_hint_library_search_paths}
- )
- mark_as_advanced(Vulkan_glslang-machineindependent_DEBUG_LIBRARY)
- find_library(Vulkan_glslang-genericcodegen_LIBRARY
- NAMES GenericCodeGen
- HINTS
- ${_Vulkan_hint_library_search_paths}
- )
- mark_as_advanced(Vulkan_glslang-genericcodegen_LIBRARY)
- find_library(Vulkan_glslang-genericcodegen_DEBUG_LIBRARY
- NAMES GenericCodeGend
- HINTS
- ${_Vulkan_hint_library_search_paths}
- )
- mark_as_advanced(Vulkan_glslang-genericcodegen_DEBUG_LIBRARY)
- find_library(Vulkan_glslang_LIBRARY
- NAMES glslang
- HINTS
- ${_Vulkan_hint_library_search_paths}
- )
- mark_as_advanced(Vulkan_glslang_LIBRARY)
- find_library(Vulkan_glslang_DEBUG_LIBRARY
- NAMES glslangd
- HINTS
- ${_Vulkan_hint_library_search_paths}
- )
- mark_as_advanced(Vulkan_glslang_DEBUG_LIBRARY)
- endif()
- if(shaderc_combined IN_LIST Vulkan_FIND_COMPONENTS)
- find_library(Vulkan_shaderc_combined_LIBRARY
- NAMES shaderc_combined
- HINTS
- ${_Vulkan_hint_library_search_paths})
- mark_as_advanced(Vulkan_shaderc_combined_LIBRARY)
- find_library(Vulkan_shaderc_combined_DEBUG_LIBRARY
- NAMES shaderc_combinedd
- HINTS
- ${_Vulkan_hint_library_search_paths})
- mark_as_advanced(Vulkan_shaderc_combined_DEBUG_LIBRARY)
- endif()
- if(SPIRV-Tools IN_LIST Vulkan_FIND_COMPONENTS)
- find_library(Vulkan_SPIRV-Tools_LIBRARY
- NAMES SPIRV-Tools
- HINTS
- ${_Vulkan_hint_library_search_paths})
- mark_as_advanced(Vulkan_SPIRV-Tools_LIBRARY)
- find_library(Vulkan_SPIRV-Tools_DEBUG_LIBRARY
- NAMES SPIRV-Toolsd
- HINTS
- ${_Vulkan_hint_library_search_paths})
- mark_as_advanced(Vulkan_SPIRV-Tools_DEBUG_LIBRARY)
- endif()
- if(MoltenVK IN_LIST Vulkan_FIND_COMPONENTS)
- find_library(Vulkan_MoltenVK_LIBRARY
- NAMES MoltenVK
- HINTS
- ${_Vulkan_hint_library_search_paths})
- mark_as_advanced(Vulkan_MoltenVK_LIBRARY)
- find_path(Vulkan_MoltenVK_INCLUDE_DIR
- NAMES MoltenVK/mvk_vulkan.h
- HINTS
- ${_Vulkan_hint_include_search_paths}
- )
- mark_as_advanced(Vulkan_MoltenVK_INCLUDE_DIR)
- endif()
- if(volk IN_LIST Vulkan_FIND_COMPONENTS)
- find_library(Vulkan_volk_LIBRARY
- NAMES volk
- HINTS
- ${_Vulkan_hint_library_search_paths})
- mark_as_advanced(Vulkan_Volk_LIBRARY)
- endif()
- if (dxc IN_LIST Vulkan_FIND_COMPONENTS)
- find_library(Vulkan_dxc_LIBRARY
- NAMES dxcompiler
- HINTS
- ${_Vulkan_hint_library_search_paths})
- mark_as_advanced(Vulkan_dxc_LIBRARY)
- find_program(Vulkan_dxc_EXECUTABLE
- NAMES dxc
- HINTS
- ${_Vulkan_hint_executable_search_paths})
- mark_as_advanced(Vulkan_dxc_EXECUTABLE)
- endif()
- if(Vulkan_GLSLC_EXECUTABLE)
- set(Vulkan_glslc_FOUND TRUE)
- else()
- set(Vulkan_glslc_FOUND FALSE)
- endif()
- if(Vulkan_GLSLANG_VALIDATOR_EXECUTABLE)
- set(Vulkan_glslangValidator_FOUND TRUE)
- else()
- set(Vulkan_glslangValidator_FOUND FALSE)
- endif()
- if (Vulkan_dxc_EXECUTABLE)
- set(Vulkan_dxc_exe_FOUND TRUE)
- else()
- set(Vulkan_dxc_exe_FOUND FALSE)
- endif()
- function(_Vulkan_set_library_component_found component)
- cmake_parse_arguments(PARSE_ARGV 1 _ARG
- "NO_WARNING"
- ""
- "DEPENDENT_COMPONENTS")
- set(all_dependent_component_found TRUE)
- foreach(dependent_component IN LISTS _ARG_DEPENDENT_COMPONENTS)
- if(NOT Vulkan_${dependent_component}_FOUND)
- set(all_dependent_component_found FALSE)
- break()
- endif()
- endforeach()
- if(all_dependent_component_found AND (Vulkan_${component}_LIBRARY OR Vulkan_${component}_DEBUG_LIBRARY))
- set(Vulkan_${component}_FOUND TRUE PARENT_SCOPE)
- # For Windows Vulkan SDK, third party tools binaries are provided with different MSVC ABI:
- # - Release binaries uses a runtime library
- # - Debug binaries uses a debug runtime library
- # This lead to incompatibilities in linking for some configuration types due to CMake-default or project-configured selected MSVC ABI.
- if(WIN32 AND NOT _ARG_NO_WARNING)
- if(NOT Vulkan_${component}_LIBRARY)
- message(WARNING
- "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.")
- endif()
- if(NOT Vulkan_${component}_DEBUG_LIBRARY)
- message(WARNING
- "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.")
- endif()
- endif()
- else()
- set(Vulkan_${component}_FOUND FALSE PARENT_SCOPE)
- endif()
- endfunction()
- _Vulkan_set_library_component_found(glslang-spirv NO_WARNING)
- _Vulkan_set_library_component_found(glslang-oglcompiler NO_WARNING)
- _Vulkan_set_library_component_found(glslang-osdependent NO_WARNING)
- _Vulkan_set_library_component_found(glslang-machineindependent NO_WARNING)
- _Vulkan_set_library_component_found(glslang-genericcodegen NO_WARNING)
- _Vulkan_set_library_component_found(glslang DEPENDENT_COMPONENTS glslang-spirv)
- _Vulkan_set_library_component_found(shaderc_combined)
- _Vulkan_set_library_component_found(SPIRV-Tools)
- _Vulkan_set_library_component_found(volk)
- _Vulkan_set_library_component_found(dxc)
- if(Vulkan_MoltenVK_INCLUDE_DIR AND Vulkan_MoltenVK_LIBRARY)
- set(Vulkan_MoltenVK_FOUND TRUE)
- else()
- set(Vulkan_MoltenVK_FOUND FALSE)
- endif()
- set(Vulkan_LIBRARIES ${Vulkan_LIBRARY})
- set(Vulkan_INCLUDE_DIRS ${Vulkan_INCLUDE_DIR})
- # detect version e.g 1.2.189
- set(Vulkan_VERSION "")
- if(Vulkan_INCLUDE_DIR)
- set(VULKAN_CORE_H ${Vulkan_INCLUDE_DIR}/vulkan/vulkan_core.h)
- if(EXISTS ${VULKAN_CORE_H})
- file(STRINGS ${VULKAN_CORE_H} VulkanHeaderVersionLine REGEX "^#define VK_HEADER_VERSION ")
- string(REGEX MATCHALL "[0-9]+" VulkanHeaderVersion "${VulkanHeaderVersionLine}")
- file(STRINGS ${VULKAN_CORE_H} VulkanHeaderVersionLine2 REGEX "^#define VK_HEADER_VERSION_COMPLETE ")
- string(REGEX MATCHALL "[0-9]+" VulkanHeaderVersion2 "${VulkanHeaderVersionLine2}")
- list(LENGTH VulkanHeaderVersion2 _len)
- # versions >= 1.2.175 have an additional numbers in front of e.g. '0, 1, 2' instead of '1, 2'
- if(_len EQUAL 3)
- list(REMOVE_AT VulkanHeaderVersion2 0)
- endif()
- list(APPEND VulkanHeaderVersion2 ${VulkanHeaderVersion})
- list(JOIN VulkanHeaderVersion2 "." Vulkan_VERSION)
- endif()
- endif()
- if(Vulkan_MoltenVK_FOUND)
- set(Vulkan_MoltenVK_VERSION "")
- if(Vulkan_MoltenVK_INCLUDE_DIR)
- set(VK_MVK_MOLTENVK_H ${Vulkan_MoltenVK_INCLUDE_DIR}/MoltenVK/vk_mvk_moltenvk.h)
- if(EXISTS ${VK_MVK_MOLTENVK_H})
- file(STRINGS ${VK_MVK_MOLTENVK_H} _Vulkan_MoltenVK_VERSION_MAJOR REGEX "^#define MVK_VERSION_MAJOR ")
- string(REGEX MATCHALL "[0-9]+" _Vulkan_MoltenVK_VERSION_MAJOR "${_Vulkan_MoltenVK_VERSION_MAJOR}")
- file(STRINGS ${VK_MVK_MOLTENVK_H} _Vulkan_MoltenVK_VERSION_MINOR REGEX "^#define MVK_VERSION_MINOR ")
- string(REGEX MATCHALL "[0-9]+" _Vulkan_MoltenVK_VERSION_MINOR "${_Vulkan_MoltenVK_VERSION_MINOR}")
- file(STRINGS ${VK_MVK_MOLTENVK_H} _Vulkan_MoltenVK_VERSION_PATCH REGEX "^#define MVK_VERSION_PATCH ")
- string(REGEX MATCHALL "[0-9]+" _Vulkan_MoltenVK_VERSION_PATCH "${_Vulkan_MoltenVK_VERSION_PATCH}")
- set(Vulkan_MoltenVK_VERSION "${_Vulkan_MoltenVK_VERSION_MAJOR}.${_Vulkan_MoltenVK_VERSION_MINOR}.${_Vulkan_MoltenVK_VERSION_PATCH}")
- unset(_Vulkan_MoltenVK_VERSION_MAJOR)
- unset(_Vulkan_MoltenVK_VERSION_MINOR)
- unset(_Vulkan_MoltenVK_VERSION_PATCH)
- endif()
- endif()
- endif()
- include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
- find_package_handle_standard_args(Vulkan
- REQUIRED_VARS
- Vulkan_LIBRARY
- Vulkan_INCLUDE_DIR
- VERSION_VAR
- Vulkan_VERSION
- HANDLE_COMPONENTS
- )
- if(Vulkan_FOUND AND NOT TARGET Vulkan::Vulkan)
- add_library(Vulkan::Vulkan UNKNOWN IMPORTED)
- set_target_properties(Vulkan::Vulkan PROPERTIES
- IMPORTED_LOCATION "${Vulkan_LIBRARIES}"
- INTERFACE_INCLUDE_DIRECTORIES "${Vulkan_INCLUDE_DIRS}")
- endif()
- if(Vulkan_FOUND AND NOT TARGET Vulkan::Headers)
- add_library(Vulkan::Headers INTERFACE IMPORTED)
- set_target_properties(Vulkan::Headers PROPERTIES
- INTERFACE_INCLUDE_DIRECTORIES "${Vulkan_INCLUDE_DIRS}")
- endif()
- if(Vulkan_FOUND AND Vulkan_GLSLC_EXECUTABLE AND NOT TARGET Vulkan::glslc)
- add_executable(Vulkan::glslc IMPORTED)
- set_property(TARGET Vulkan::glslc PROPERTY IMPORTED_LOCATION "${Vulkan_GLSLC_EXECUTABLE}")
- endif()
- if(Vulkan_FOUND AND Vulkan_GLSLANG_VALIDATOR_EXECUTABLE AND NOT TARGET Vulkan::glslangValidator)
- add_executable(Vulkan::glslangValidator IMPORTED)
- set_property(TARGET Vulkan::glslangValidator PROPERTY IMPORTED_LOCATION "${Vulkan_GLSLANG_VALIDATOR_EXECUTABLE}")
- endif()
- if(Vulkan_FOUND)
- if((Vulkan_glslang-spirv_LIBRARY OR Vulkan_glslang-spirv_DEBUG_LIBRARY) AND NOT TARGET Vulkan::glslang-spirv)
- add_library(Vulkan::glslang-spirv STATIC IMPORTED)
- set_property(TARGET Vulkan::glslang-spirv
- PROPERTY
- INTERFACE_INCLUDE_DIRECTORIES "${Vulkan_INCLUDE_DIRS}")
- if(Vulkan_glslang-spirv_LIBRARY)
- set_property(TARGET Vulkan::glslang-spirv APPEND
- PROPERTY
- IMPORTED_CONFIGURATIONS Release)
- set_property(TARGET Vulkan::glslang-spirv
- PROPERTY
- IMPORTED_LOCATION_RELEASE "${Vulkan_glslang-spirv_LIBRARY}")
- endif()
- if(Vulkan_glslang-spirv_DEBUG_LIBRARY)
- set_property(TARGET Vulkan::glslang-spirv APPEND
- PROPERTY
- IMPORTED_CONFIGURATIONS Debug)
- set_property(TARGET Vulkan::glslang-spirv
- PROPERTY
- IMPORTED_LOCATION_DEBUG "${Vulkan_glslang-spirv_DEBUG_LIBRARY}")
- endif()
- endif()
- if((Vulkan_glslang-oglcompiler_LIBRARY OR Vulkan_glslang-oglcompiler_DEBUG_LIBRARY) AND NOT TARGET Vulkan::glslang-oglcompiler)
- add_library(Vulkan::glslang-oglcompiler STATIC IMPORTED)
- set_property(TARGET Vulkan::glslang-oglcompiler
- PROPERTY
- INTERFACE_INCLUDE_DIRECTORIES "${Vulkan_INCLUDE_DIRS}")
- if(Vulkan_glslang-oglcompiler_LIBRARY)
- set_property(TARGET Vulkan::glslang-oglcompiler APPEND
- PROPERTY
- IMPORTED_CONFIGURATIONS Release)
- set_property(TARGET Vulkan::glslang-oglcompiler
- PROPERTY
- IMPORTED_LOCATION_RELEASE "${Vulkan_glslang-oglcompiler_LIBRARY}")
- endif()
- if(Vulkan_glslang-oglcompiler_DEBUG_LIBRARY)
- set_property(TARGET Vulkan::glslang-oglcompiler APPEND
- PROPERTY
- IMPORTED_CONFIGURATIONS Debug)
- set_property(TARGET Vulkan::glslang-oglcompiler
- PROPERTY
- IMPORTED_LOCATION_DEBUG "${Vulkan_glslang-oglcompiler_DEBUG_LIBRARY}")
- endif()
- endif()
- if((Vulkan_glslang-osdependent_LIBRARY OR Vulkan_glslang-osdependent_DEBUG_LIBRARY) AND NOT TARGET Vulkan::glslang-osdependent)
- add_library(Vulkan::glslang-osdependent STATIC IMPORTED)
- set_property(TARGET Vulkan::glslang-osdependent
- PROPERTY
- INTERFACE_INCLUDE_DIRECTORIES "${Vulkan_INCLUDE_DIRS}")
- if(Vulkan_glslang-osdependent_LIBRARY)
- set_property(TARGET Vulkan::glslang-osdependent APPEND
- PROPERTY
- IMPORTED_CONFIGURATIONS Release)
- set_property(TARGET Vulkan::glslang-osdependent
- PROPERTY
- IMPORTED_LOCATION_RELEASE "${Vulkan_glslang-osdependent_LIBRARY}")
- endif()
- if(Vulkan_glslang-osdependent_DEBUG_LIBRARY)
- set_property(TARGET Vulkan::glslang-osdependent APPEND
- PROPERTY
- IMPORTED_CONFIGURATIONS Debug)
- set_property(TARGET Vulkan::glslang-osdependent
- PROPERTY
- IMPORTED_LOCATION_DEBUG "${Vulkan_glslang-osdependent_DEBUG_LIBRARY}")
- endif()
- endif()
- if((Vulkan_glslang-machineindependent_LIBRARY OR Vulkan_glslang-machineindependent_DEBUG_LIBRARY) AND NOT TARGET Vulkan::glslang-machineindependent)
- add_library(Vulkan::glslang-machineindependent STATIC IMPORTED)
- set_property(TARGET Vulkan::glslang-machineindependent
- PROPERTY
- INTERFACE_INCLUDE_DIRECTORIES "${Vulkan_INCLUDE_DIRS}")
- if(Vulkan_glslang-machineindependent_LIBRARY)
- set_property(TARGET Vulkan::glslang-machineindependent APPEND
- PROPERTY
- IMPORTED_CONFIGURATIONS Release)
- set_property(TARGET Vulkan::glslang-machineindependent
- PROPERTY
- IMPORTED_LOCATION_RELEASE "${Vulkan_glslang-machineindependent_LIBRARY}")
- endif()
- if(Vulkan_glslang-machineindependent_DEBUG_LIBRARY)
- set_property(TARGET Vulkan::glslang-machineindependent APPEND
- PROPERTY
- IMPORTED_CONFIGURATIONS Debug)
- set_property(TARGET Vulkan::glslang-machineindependent
- PROPERTY
- IMPORTED_LOCATION_DEBUG "${Vulkan_glslang-machineindependent_DEBUG_LIBRARY}")
- endif()
- endif()
- if((Vulkan_glslang-genericcodegen_LIBRARY OR Vulkan_glslang-genericcodegen_DEBUG_LIBRARY) AND NOT TARGET Vulkan::glslang-genericcodegen)
- add_library(Vulkan::glslang-genericcodegen STATIC IMPORTED)
- set_property(TARGET Vulkan::glslang-genericcodegen
- PROPERTY
- INTERFACE_INCLUDE_DIRECTORIES "${Vulkan_INCLUDE_DIRS}")
- if(Vulkan_glslang-genericcodegen_LIBRARY)
- set_property(TARGET Vulkan::glslang-genericcodegen APPEND
- PROPERTY
- IMPORTED_CONFIGURATIONS Release)
- set_property(TARGET Vulkan::glslang-genericcodegen
- PROPERTY
- IMPORTED_LOCATION_RELEASE "${Vulkan_glslang-genericcodegen_LIBRARY}")
- endif()
- if(Vulkan_glslang-genericcodegen_DEBUG_LIBRARY)
- set_property(TARGET Vulkan::glslang-genericcodegen APPEND
- PROPERTY
- IMPORTED_CONFIGURATIONS Debug)
- set_property(TARGET Vulkan::glslang-genericcodegen
- PROPERTY
- IMPORTED_LOCATION_DEBUG "${Vulkan_glslang-genericcodegen_DEBUG_LIBRARY}")
- endif()
- endif()
- if((Vulkan_glslang_LIBRARY OR Vulkan_glslang_DEBUG_LIBRARY)
- AND TARGET Vulkan::glslang-spirv
- AND NOT TARGET Vulkan::glslang)
- add_library(Vulkan::glslang STATIC IMPORTED)
- set_property(TARGET Vulkan::glslang
- PROPERTY
- INTERFACE_INCLUDE_DIRECTORIES "${Vulkan_INCLUDE_DIRS}")
- if(Vulkan_glslang_LIBRARY)
- set_property(TARGET Vulkan::glslang APPEND
- PROPERTY
- IMPORTED_CONFIGURATIONS Release)
- set_property(TARGET Vulkan::glslang
- PROPERTY
- IMPORTED_LOCATION_RELEASE "${Vulkan_glslang_LIBRARY}")
- endif()
- if(Vulkan_glslang_DEBUG_LIBRARY)
- set_property(TARGET Vulkan::glslang APPEND
- PROPERTY
- IMPORTED_CONFIGURATIONS Debug)
- set_property(TARGET Vulkan::glslang
- PROPERTY
- IMPORTED_LOCATION_DEBUG "${Vulkan_glslang_DEBUG_LIBRARY}")
- endif()
- target_link_libraries(Vulkan::glslang
- INTERFACE
- Vulkan::glslang-spirv
- # OGLCompiler library has been fully removed since version 14.0.0
- # OSDependent, MachineIndependent, and GenericCodeGen may also be removed in the future.
- # See https://github.com/KhronosGroup/glslang/issues/3462
- $<TARGET_NAME_IF_EXISTS:Vulkan::glslang-oglcompiler>
- $<TARGET_NAME_IF_EXISTS:Vulkan::glslang-osdependent>
- $<TARGET_NAME_IF_EXISTS:Vulkan::glslang-machineindependent>
- $<TARGET_NAME_IF_EXISTS:Vulkan::glslang-genericcodegen>
- )
- endif()
- if((Vulkan_shaderc_combined_LIBRARY OR Vulkan_shaderc_combined_DEBUG_LIBRARY) AND NOT TARGET Vulkan::shaderc_combined)
- add_library(Vulkan::shaderc_combined STATIC IMPORTED)
- set_property(TARGET Vulkan::shaderc_combined
- PROPERTY
- INTERFACE_INCLUDE_DIRECTORIES "${Vulkan_INCLUDE_DIRS}")
- if(Vulkan_shaderc_combined_LIBRARY)
- set_property(TARGET Vulkan::shaderc_combined APPEND
- PROPERTY
- IMPORTED_CONFIGURATIONS Release)
- set_property(TARGET Vulkan::shaderc_combined
- PROPERTY
- IMPORTED_LOCATION_RELEASE "${Vulkan_shaderc_combined_LIBRARY}")
- endif()
- if(Vulkan_shaderc_combined_DEBUG_LIBRARY)
- set_property(TARGET Vulkan::shaderc_combined APPEND
- PROPERTY
- IMPORTED_CONFIGURATIONS Debug)
- set_property(TARGET Vulkan::shaderc_combined
- PROPERTY
- IMPORTED_LOCATION_DEBUG "${Vulkan_shaderc_combined_DEBUG_LIBRARY}")
- endif()
- if(UNIX)
- find_package(Threads REQUIRED)
- target_link_libraries(Vulkan::shaderc_combined
- INTERFACE
- Threads::Threads)
- endif()
- endif()
- if((Vulkan_SPIRV-Tools_LIBRARY OR Vulkan_SPIRV-Tools_DEBUG_LIBRARY) AND NOT TARGET Vulkan::SPIRV-Tools)
- add_library(Vulkan::SPIRV-Tools STATIC IMPORTED)
- set_property(TARGET Vulkan::SPIRV-Tools
- PROPERTY
- INTERFACE_INCLUDE_DIRECTORIES "${Vulkan_INCLUDE_DIRS}")
- if(Vulkan_SPIRV-Tools_LIBRARY)
- set_property(TARGET Vulkan::SPIRV-Tools APPEND
- PROPERTY
- IMPORTED_CONFIGURATIONS Release)
- set_property(TARGET Vulkan::SPIRV-Tools
- PROPERTY
- IMPORTED_LOCATION_RELEASE "${Vulkan_SPIRV-Tools_LIBRARY}")
- endif()
- if(Vulkan_SPIRV-Tools_DEBUG_LIBRARY)
- set_property(TARGET Vulkan::SPIRV-Tools APPEND
- PROPERTY
- IMPORTED_CONFIGURATIONS Debug)
- set_property(TARGET Vulkan::SPIRV-Tools
- PROPERTY
- IMPORTED_LOCATION_DEBUG "${Vulkan_SPIRV-Tools_DEBUG_LIBRARY}")
- endif()
- endif()
- if(Vulkan_volk_LIBRARY AND NOT TARGET Vulkan::volk)
- add_library(Vulkan::volk STATIC IMPORTED)
- set_property(TARGET Vulkan::volk
- PROPERTY
- INTERFACE_INCLUDE_DIRECTORIES "${Vulkan_INCLUDE_DIRS}")
- set_property(TARGET Vulkan::volk APPEND
- PROPERTY
- IMPORTED_CONFIGURATIONS Release)
- set_property(TARGET Vulkan::volk APPEND
- PROPERTY
- IMPORTED_LOCATION_RELEASE "${Vulkan_volk_LIBRARY}")
- if (NOT WIN32)
- set_property(TARGET Vulkan::volk APPEND
- PROPERTY
- IMPORTED_LINK_INTERFACE_LIBRARIES dl)
- endif()
- endif()
- if (Vulkan_dxc_LIBRARY AND NOT TARGET Vulkan::dxc_lib)
- add_library(Vulkan::dxc_lib STATIC IMPORTED)
- set_property(TARGET Vulkan::dxc_lib
- PROPERTY
- INTERFACE_INCLUDE_DIRECTORIES "${Vulkan_INCLUDE_DIRS}")
- set_property(TARGET Vulkan::dxc_lib APPEND
- PROPERTY
- IMPORTED_CONFIGURATIONS Release)
- set_property(TARGET Vulkan::dxc_lib APPEND
- PROPERTY
- IMPORTED_LOCATION_RELEASE "${Vulkan_dxc_LIBRARY}")
- endif()
- if(Vulkan_dxc_EXECUTABLE AND NOT TARGET Vulkan::dxc_exe)
- add_executable(Vulkan::dxc_exe IMPORTED)
- set_property(TARGET Vulkan::dxc_exe PROPERTY IMPORTED_LOCATION "${Vulkan_dxc_EXECUTABLE}")
- endif()
- endif()
- if(Vulkan_MoltenVK_FOUND)
- if(Vulkan_MoltenVK_LIBRARY AND NOT TARGET Vulkan::MoltenVK)
- add_library(Vulkan::MoltenVK SHARED IMPORTED)
- set_target_properties(Vulkan::MoltenVK
- PROPERTIES
- INTERFACE_INCLUDE_DIRECTORIES "${Vulkan_MoltenVK_INCLUDE_DIR}"
- IMPORTED_LOCATION "${Vulkan_MoltenVK_LIBRARY}"
- )
- endif()
- endif()
- unset(_Vulkan_library_name)
- unset(_Vulkan_hint_include_search_paths)
- unset(_Vulkan_hint_executable_search_paths)
- unset(_Vulkan_hint_library_search_paths)
- cmake_policy(POP)
|