1# Distributed under the OSI-approved BSD 3-Clause License. See accompanying 2# file Copyright.txt or https://cmake.org/licensing for details. 3 4#[=======================================================================[.rst: 5FindVulkan 6---------- 7 8.. versionadded:: 3.7 9 10Find Vulkan, which is a low-overhead, cross-platform 3D graphics 11and computing API. 12 13IMPORTED Targets 14^^^^^^^^^^^^^^^^ 15 16This module defines :prop_tgt:`IMPORTED` targets if Vulkan has been found: 17 18``Vulkan::Vulkan`` 19 The main Vulkan library. 20 21``Vulkan::glslc`` 22 .. versionadded:: 3.19 23 24 The GLSLC SPIR-V compiler, if it has been found. 25 26``Vulkan::Headers`` 27 .. versionadded:: 3.21 28 29 Provides just Vulkan headers include paths, if found. No library is 30 included in this target. This can be useful for applications that 31 load Vulkan library dynamically. 32 33``Vulkan::glslangValidator`` 34 .. versionadded:: 3.21 35 36 The glslangValidator tool, if found. It is used to compile GLSL and 37 HLSL shaders into SPIR-V. 38 39Result Variables 40^^^^^^^^^^^^^^^^ 41 42This module defines the following variables:: 43 44 Vulkan_FOUND - "True" if Vulkan was found 45 Vulkan_INCLUDE_DIRS - include directories for Vulkan 46 Vulkan_LIBRARIES - link against this library to use Vulkan 47 48The module will also define three cache variables:: 49 50 Vulkan_INCLUDE_DIR - the Vulkan include directory 51 Vulkan_LIBRARY - the path to the Vulkan library 52 Vulkan_GLSLC_EXECUTABLE - the path to the GLSL SPIR-V compiler 53 Vulkan_GLSLANG_VALIDATOR_EXECUTABLE - the path to the glslangValidator tool 54 55Hints 56^^^^^ 57 58.. versionadded:: 3.18 59 60The ``VULKAN_SDK`` environment variable optionally specifies the 61location of the Vulkan SDK root directory for the given 62architecture. It is typically set by sourcing the toplevel 63``setup-env.sh`` script of the Vulkan SDK directory into the shell 64environment. 65 66#]=======================================================================] 67 68if(WIN32) 69 find_path(Vulkan_INCLUDE_DIR 70 NAMES vulkan/vulkan.h 71 HINTS 72 "$ENV{VULKAN_SDK}/Include" 73 ) 74 75 if(CMAKE_SIZEOF_VOID_P EQUAL 8) 76 find_library(Vulkan_LIBRARY 77 NAMES vulkan-1 78 HINTS 79 "$ENV{VULKAN_SDK}/Lib" 80 "$ENV{VULKAN_SDK}/Bin" 81 ) 82 find_program(Vulkan_GLSLC_EXECUTABLE 83 NAMES glslc 84 HINTS 85 "$ENV{VULKAN_SDK}/Bin" 86 ) 87 find_program(Vulkan_GLSLANG_VALIDATOR_EXECUTABLE 88 NAMES glslangValidator 89 HINTS 90 "$ENV{VULKAN_SDK}/Bin" 91 ) 92 elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) 93 find_library(Vulkan_LIBRARY 94 NAMES vulkan-1 95 HINTS 96 "$ENV{VULKAN_SDK}/Lib32" 97 "$ENV{VULKAN_SDK}/Bin32" 98 ) 99 find_program(Vulkan_GLSLC_EXECUTABLE 100 NAMES glslc 101 HINTS 102 "$ENV{VULKAN_SDK}/Bin32" 103 ) 104 find_program(Vulkan_GLSLANG_VALIDATOR_EXECUTABLE 105 NAMES glslangValidator 106 HINTS 107 "$ENV{VULKAN_SDK}/Bin32" 108 ) 109 endif() 110else() 111 find_path(Vulkan_INCLUDE_DIR 112 NAMES vulkan/vulkan.h 113 HINTS "$ENV{VULKAN_SDK}/include") 114 find_library(Vulkan_LIBRARY 115 NAMES vulkan 116 HINTS "$ENV{VULKAN_SDK}/lib") 117 find_program(Vulkan_GLSLC_EXECUTABLE 118 NAMES glslc 119 HINTS "$ENV{VULKAN_SDK}/bin") 120 find_program(Vulkan_GLSLANG_VALIDATOR_EXECUTABLE 121 NAMES glslangValidator 122 HINTS "$ENV{VULKAN_SDK}/bin") 123endif() 124 125set(Vulkan_LIBRARIES ${Vulkan_LIBRARY}) 126set(Vulkan_INCLUDE_DIRS ${Vulkan_INCLUDE_DIR}) 127 128include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) 129find_package_handle_standard_args(Vulkan 130 DEFAULT_MSG 131 Vulkan_LIBRARY Vulkan_INCLUDE_DIR) 132 133mark_as_advanced(Vulkan_INCLUDE_DIR Vulkan_LIBRARY Vulkan_GLSLC_EXECUTABLE 134 Vulkan_GLSLANG_VALIDATOR_EXECUTABLE) 135 136if(Vulkan_FOUND AND NOT TARGET Vulkan::Vulkan) 137 add_library(Vulkan::Vulkan UNKNOWN IMPORTED) 138 set_target_properties(Vulkan::Vulkan PROPERTIES 139 IMPORTED_LOCATION "${Vulkan_LIBRARIES}" 140 INTERFACE_INCLUDE_DIRECTORIES "${Vulkan_INCLUDE_DIRS}") 141endif() 142 143if(Vulkan_FOUND AND NOT TARGET Vulkan::Headers) 144 add_library(Vulkan::Headers INTERFACE IMPORTED) 145 set_target_properties(Vulkan::Headers PROPERTIES 146 INTERFACE_INCLUDE_DIRECTORIES "${Vulkan_INCLUDE_DIRS}") 147endif() 148 149if(Vulkan_FOUND AND Vulkan_GLSLC_EXECUTABLE AND NOT TARGET Vulkan::glslc) 150 add_executable(Vulkan::glslc IMPORTED) 151 set_property(TARGET Vulkan::glslc PROPERTY IMPORTED_LOCATION "${Vulkan_GLSLC_EXECUTABLE}") 152endif() 153 154if(Vulkan_FOUND AND Vulkan_GLSLANG_VALIDATOR_EXECUTABLE AND NOT TARGET Vulkan::glslangValidator) 155 add_executable(Vulkan::glslangValidator IMPORTED) 156 set_property(TARGET Vulkan::glslangValidator PROPERTY IMPORTED_LOCATION "${Vulkan_GLSLANG_VALIDATOR_EXECUTABLE}") 157endif() 158