Ver Fonte

FindVulkan: Add component for `SPIRV-Tools`

MACHIZAUD Andréa há 3 anos atrás
pai
commit
8d133f49e3

+ 53 - 4
Modules/FindVulkan.cmake

@@ -15,8 +15,9 @@ Optional COMPONENTS
 
 .. versionadded:: 3.24
 
-This module respects several optional COMPONENTS: ``shaderc_combined``.  There
-are corresponding import targets for each of these flags.
+This module respects several optional COMPONENTS: ``shaderc_combined`` and
+``SPIRV-Tools``.  There are corresponding import targets for each of these
+flags.
 
 IMPORTED Targets
 ^^^^^^^^^^^^^^^^
@@ -50,6 +51,12 @@ This module defines :prop_tgt:`IMPORTED` targets if Vulkan has been found:
   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).
+
 Result Variables
 ^^^^^^^^^^^^^^^^
 
@@ -69,9 +76,10 @@ This module defines the following variables:
   .. versionadded:: 3.24
 
   True, if the SDK has the shaderc_combined library.
+``Vulkan_SPIRV-Tools_FOUND``
+  .. versionadded:: 3.24
 
-.. versionadded:: 3.24
-  Variables for component library ``shaderc_combined``.
+  True, if the SDK has the SPIRV-Tools library.
 
 The module will also defines these cache variables:
 
@@ -87,6 +95,10 @@ The module will also defines these cache variables:
   .. versionadded:: 3.24
 
   Path to the shaderc_combined library.
+``Vulkan_SPIRV-Tools_LIBRARY``
+  .. versionadded:: 3.24
+
+  Path to the SPIRV-Tools library.
 
 Hints
 ^^^^^
@@ -177,6 +189,19 @@ if(shaderc_combined IN_LIST Vulkan_FIND_COMPONENTS)
     ${_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()
 
 function(_Vulkan_set_library_component_found component)
   if(Vulkan_${component}_LIBRARY OR Vulkan_${component}_DEBUG_LIBRARY)
@@ -202,6 +227,7 @@ function(_Vulkan_set_library_component_found component)
 endfunction()
 
 _Vulkan_set_library_component_found(shaderc_combined)
+_Vulkan_set_library_component_found(SPIRV-Tools)
 
 set(Vulkan_LIBRARIES ${Vulkan_LIBRARY})
 set(Vulkan_INCLUDE_DIRS ${Vulkan_INCLUDE_DIR})
@@ -288,6 +314,29 @@ if(Vulkan_FOUND)
           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()
 endif()
 
 unset(_Vulkan_library_name)

+ 13 - 1
Tests/FindVulkan/Test/CMakeLists.txt

@@ -6,7 +6,8 @@ include(CTest)
 SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../../../Modules)
 find_package(Vulkan REQUIRED
   COMPONENTS
-    shaderc_combined)
+    shaderc_combined
+    SPIRV-Tools)
 
 add_executable(test_tgt main.c)
 target_link_libraries(test_tgt Vulkan::Vulkan)
@@ -37,6 +38,17 @@ if(NOT shaderc_combined_debug_location)
       MSVC_RUNTIME_LIBRARY "MultiThreadedDLL")
 endif()
 
+add_executable(test_tgt_SPIRV-Tools main-SPIRV-Tools.c)
+target_link_libraries(test_tgt_SPIRV-Tools Vulkan::SPIRV-Tools)
+add_test(NAME test_tgt_SPIRV-Tools COMMAND test_tgt_SPIRV-Tools)
+
+get_property(SPIRV-Tools_debug_location TARGET Vulkan::SPIRV-Tools PROPERTY IMPORTED_LOCATION_DEBUG)
+if(NOT SPIRV-Tools_debug_location)
+  set_property(TARGET test_tgt_SPIRV-Tools
+    PROPERTY
+      MSVC_RUNTIME_LIBRARY "MultiThreadedDLL")
+endif()
+
 if(Vulkan_GLSLC_EXECUTABLE)
   add_test(NAME test_glslc
     COMMAND ${CMAKE_COMMAND}

+ 15 - 0
Tests/FindVulkan/Test/main-SPIRV-Tools.c

@@ -0,0 +1,15 @@
+#include <assert.h>
+#include <spirv-tools/libspirv.h>
+#include <stdio.h>
+
+int main()
+{
+  const char* spv_version = spvSoftwareVersionString();
+  const char* spv_details = spvSoftwareVersionDetailsString();
+  assert(spv_version);
+  assert(spv_details);
+
+  printf("SPIRV-Tools version: %s (details: %s)", spv_version, spv_details);
+
+  return 0;
+}