| find_package(Vulkan COMPONENTS glslc REQUIRED) | |
| if (Vulkan_FOUND) | |
| message(STATUS "Vulkan found") | |
| ggml_add_backend_library(ggml-vulkan | |
| ggml-vulkan.cpp | |
| ../../include/ggml-vulkan.h | |
| ) | |
| target_link_libraries(ggml-vulkan PRIVATE Vulkan::Vulkan) | |
| target_include_directories(ggml-vulkan PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) | |
| # Workaround to the "can't dereference invalidated vector iterator" bug in clang-cl debug build | |
| # Posssibly relevant: https://stackoverflow.com/questions/74748276/visual-studio-no-displays-the-correct-length-of-stdvector | |
| if (MSVC AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang") | |
| add_compile_definitions(_ITERATOR_DEBUG_LEVEL=0) | |
| endif() | |
| if (GGML_VULKAN_CHECK_RESULTS) | |
| add_compile_definitions(GGML_VULKAN_CHECK_RESULTS) | |
| endif() | |
| if (GGML_VULKAN_DEBUG) | |
| add_compile_definitions(GGML_VULKAN_DEBUG) | |
| endif() | |
| if (GGML_VULKAN_MEMORY_DEBUG) | |
| add_compile_definitions(GGML_VULKAN_MEMORY_DEBUG) | |
| endif() | |
| if (GGML_VULKAN_SHADER_DEBUG_INFO) | |
| add_compile_definitions(GGML_VULKAN_SHADER_DEBUG_INFO) | |
| endif() | |
| if (GGML_VULKAN_PERF) | |
| add_compile_definitions(GGML_VULKAN_PERF) | |
| endif() | |
| if (GGML_VULKAN_VALIDATE) | |
| add_compile_definitions(GGML_VULKAN_VALIDATE) | |
| endif() | |
| if (GGML_VULKAN_RUN_TESTS) | |
| add_compile_definitions(GGML_VULKAN_RUN_TESTS) | |
| endif() | |
| add_subdirectory(vulkan-shaders) | |
| set (_ggml_vk_genshaders_cmd vulkan-shaders-gen) | |
| set (_ggml_vk_header ${CMAKE_CURRENT_BINARY_DIR}/ggml-vulkan-shaders.hpp) | |
| set (_ggml_vk_source ${CMAKE_CURRENT_BINARY_DIR}/ggml-vulkan-shaders.cpp) | |
| set (_ggml_vk_input_dir ${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders) | |
| set (_ggml_vk_output_dir ${CMAKE_CURRENT_BINARY_DIR}/vulkan-shaders.spv) | |
| file(GLOB _ggml_vk_shader_deps "${_ggml_vk_input_dir}/*.comp") | |
| add_custom_command( | |
| OUTPUT ${_ggml_vk_header} | |
| ${_ggml_vk_source} | |
| COMMAND ${_ggml_vk_genshaders_cmd} | |
| --glslc ${Vulkan_GLSLC_EXECUTABLE} | |
| --input-dir ${_ggml_vk_input_dir} | |
| --output-dir ${_ggml_vk_output_dir} | |
| --target-hpp ${_ggml_vk_header} | |
| --target-cpp ${_ggml_vk_source} | |
| --no-clean | |
| DEPENDS ${_ggml_vk_shader_deps} | |
| COMMENT "Generate vulkan shaders" | |
| ) | |
| target_sources(ggml-vulkan PRIVATE ${_ggml_vk_source} ${_ggml_vk_header}) | |
| else() | |
| message(WARNING "Vulkan not found") | |
| endif() | |