FindVulkan.cmake 4.5 KB

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