@@ -244,246 +244,6 @@ if (GGML_SYCL)
244244    endif ()
245245endif ()
246246
247- if  (GGML_VULKAN)
248-     find_package (Vulkan COMPONENTS glslc REQUIRED)
249- 
250-     if  (Vulkan_FOUND)
251-         message (STATUS  "Vulkan found" )
252- 
253-         list (APPEND  GGML_CDEF_PUBLIC GGML_USE_VULKAN)
254- 
255-         # Workaround to the "can't dereference invalidated vector iterator" bug in clang-cl debug build 
256-         # Posssibly relevant: https://stackoverflow.com/questions/74748276/visual-studio-no-displays-the-correct-length-of-stdvector 
257-         if  (MSVC  AND  CMAKE_CXX_COMPILER_ID STREQUAL  "Clang" )
258-             add_compile_definitions (_ITERATOR_DEBUG_LEVEL=0)
259-         endif ()
260- 
261-         if  (GGML_VULKAN_CHECK_RESULTS)
262-             add_compile_definitions (GGML_VULKAN_CHECK_RESULTS)
263-         endif ()
264- 
265-         if  (GGML_VULKAN_DEBUG)
266-             add_compile_definitions (GGML_VULKAN_DEBUG)
267-         endif ()
268- 
269-         if  (GGML_VULKAN_MEMORY_DEBUG)
270-             add_compile_definitions (GGML_VULKAN_MEMORY_DEBUG)
271-         endif ()
272- 
273-         if  (GGML_VULKAN_SHADER_DEBUG_INFO)
274-             add_compile_definitions (GGML_VULKAN_SHADER_DEBUG_INFO)
275-         endif ()
276- 
277-         if  (GGML_VULKAN_PERF)
278-             add_compile_definitions (GGML_VULKAN_PERF)
279-         endif ()
280- 
281-         if  (GGML_VULKAN_VALIDATE)
282-             add_compile_definitions (GGML_VULKAN_VALIDATE)
283-         endif ()
284- 
285-         if  (GGML_VULKAN_RUN_TESTS)
286-             add_compile_definitions (GGML_VULKAN_RUN_TESTS)
287-         endif ()
288- 
289-         add_subdirectory (vulkan-shaders)
290- 
291-         set  (_ggml_vk_genshaders_cmd vulkan-shaders-gen)
292-         set  (_ggml_vk_header     ${CMAKE_CURRENT_BINARY_DIR} /ggml-vulkan-shaders.hpp)
293-         set  (_ggml_vk_source     ${CMAKE_CURRENT_BINARY_DIR} /ggml-vulkan-shaders.cpp)
294-         set  (_ggml_vk_input_dir  ${CMAKE_CURRENT_SOURCE_DIR} /vulkan-shaders)
295-         set  (_ggml_vk_output_dir ${CMAKE_CURRENT_BINARY_DIR} /vulkan-shaders.spv)
296- 
297-         file (GLOB _ggml_vk_shader_deps "${_ggml_vk_input_dir} /*.comp" )
298- 
299-         add_custom_command (
300-             OUTPUT  ${_ggml_vk_header} 
301-                    ${_ggml_vk_source} 
302- 
303-             COMMAND  ${_ggml_vk_genshaders_cmd} 
304-                 --glslc      ${Vulkan_GLSLC_EXECUTABLE} 
305-                 --input -dir  ${_ggml_vk_input_dir} 
306-                 --output -dir ${_ggml_vk_output_dir} 
307-                 --target -hpp ${_ggml_vk_header} 
308-                 --target -cpp ${_ggml_vk_source} 
309-                 --no -clean
310- 
311-             DEPENDS  ${_ggml_vk_shader_deps} 
312-             COMMENT  "Generate vulkan shaders" 
313-         )
314- 
315-         set (GGML_HEADERS_VULKAN ${CMAKE_CURRENT_SOURCE_DIR} /../include /ggml-vulkan.h ${_ggml_vk_header} )
316-         set (GGML_SOURCES_VULKAN ggml-vulkan.cpp ${_ggml_vk_source} )
317- 
318-         list (APPEND  GGML_EXTRA_LIBS_PRIVATE Vulkan::Vulkan)
319-         list (APPEND  GGML_EXTRA_INCLUDES     ${CMAKE_CURRENT_BINARY_DIR} )
320-     else ()
321-         message (WARNING "Vulkan not found" )
322-     endif ()
323- endif ()
324- 
325- if  (GGML_KOMPUTE)
326-     add_compile_definitions (VULKAN_HPP_DISPATCH_LOADER_DYNAMIC=1)
327- 
328-     find_package (Vulkan COMPONENTS glslc REQUIRED)
329-     find_program (glslc_executable NAMES  glslc HINTS  Vulkan::glslc)
330- 
331-     if  (NOT  glslc_executable)
332-         message (FATAL_ERROR "glslc not found" )
333-     endif ()
334- 
335-     function (compile_shader)
336-         set (options )
337-         set (oneValueArgs)
338-         set (multiValueArgs SOURCES )
339-         cmake_parse_arguments (compile_shader "${options} "  "${oneValueArgs} "  "${multiValueArgs} "  ${ARGN} )
340-         foreach (source  ${compile_shader_SOURCES} )
341-             get_filename_component (filename ${source}  NAME )
342-             set (spv_file ${filename} .spv)
343-             add_custom_command (
344-                 OUTPUT  ${spv_file} 
345-                 DEPENDS  ${CMAKE_CURRENT_SOURCE_DIR} /${source} 
346-                 ${CMAKE_CURRENT_SOURCE_DIR} /kompute-shaders/common.comp
347-                 ${CMAKE_CURRENT_SOURCE_DIR} /kompute-shaders/op_getrows.comp
348-                 ${CMAKE_CURRENT_SOURCE_DIR} /kompute-shaders/op_mul_mv_q_n_pre.comp
349-                 ${CMAKE_CURRENT_SOURCE_DIR} /kompute-shaders/op_mul_mv_q_n.comp
350-                 COMMAND  ${glslc_executable}  --target -env=vulkan1.2 -o ${spv_file}  ${CMAKE_CURRENT_SOURCE_DIR} /${source} 
351-                 COMMENT  "Compiling ${source}  to ${spv_file} " 
352-                 )
353- 
354-             get_filename_component (RAW_FILE_NAME ${spv_file}  NAME )
355-             set (FILE_NAME "shader${RAW_FILE_NAME} " )
356-             string (REPLACE ".comp.spv"  ".h"  HEADER_FILE ${FILE_NAME} )
357-             string (TOUPPER ${HEADER_FILE}  HEADER_FILE_DEFINE)
358-             string (REPLACE "."  "_"  HEADER_FILE_DEFINE "${HEADER_FILE_DEFINE} " )
359-             set (OUTPUT_HEADER_FILE "${HEADER_FILE} " )
360-             message (STATUS  "${HEADER_FILE}  generating ${HEADER_FILE_DEFINE} " )
361-             if (CMAKE_GENERATOR  MATCHES  "Visual Studio" )
362-                 add_custom_command (
363-                     OUTPUT  ${OUTPUT_HEADER_FILE} 
364-                     COMMAND  ${CMAKE_COMMAND}  -E echo "/*THIS FILE HAS BEEN AUTOMATICALLY GENERATED - DO NOT EDIT*/"  > ${OUTPUT_HEADER_FILE} 
365-                     COMMAND  ${CMAKE_COMMAND}  -E echo \"\#ifndef ${HEADER_FILE_DEFINE}\" >> ${OUTPUT_HEADER_FILE} 
366-                     COMMAND  ${CMAKE_COMMAND}  -E echo \"\#define ${HEADER_FILE_DEFINE}\" >> ${OUTPUT_HEADER_FILE} 
367-                     COMMAND  ${CMAKE_COMMAND}  -E echo "namespace kp {"  >> ${OUTPUT_HEADER_FILE} 
368-                     COMMAND  ${CMAKE_COMMAND}  -E echo "namespace shader_data {"  >> ${OUTPUT_HEADER_FILE} 
369-                     COMMAND  ${CMAKE_BINARY_DIR} /bin/$<CONFIG>/xxd -i ${RAW_FILE_NAME}  >> ${OUTPUT_HEADER_FILE} 
370-                     COMMAND  ${CMAKE_COMMAND}  -E echo "}}"  >> ${OUTPUT_HEADER_FILE} 
371-                     COMMAND  ${CMAKE_COMMAND}  -E echo \"\#endif // define ${HEADER_FILE_DEFINE}\" >> ${OUTPUT_HEADER_FILE} 
372-                     DEPENDS  ${spv_file}  xxd
373-                     COMMENT  "Converting to hpp: ${FILE_NAME}  ${CMAKE_BINARY_DIR} /bin/$<CONFIG>/xxd" 
374-                     )
375-             else ()
376-                 add_custom_command (
377-                     OUTPUT  ${OUTPUT_HEADER_FILE} 
378-                     COMMAND  ${CMAKE_COMMAND}  -E echo "/*THIS FILE HAS BEEN AUTOMATICALLY GENERATED - DO NOT EDIT*/"  > ${OUTPUT_HEADER_FILE} 
379-                     COMMAND  ${CMAKE_COMMAND}  -E echo \"\#ifndef ${HEADER_FILE_DEFINE}\" >> ${OUTPUT_HEADER_FILE} 
380-                     COMMAND  ${CMAKE_COMMAND}  -E echo \"\#define ${HEADER_FILE_DEFINE}\" >> ${OUTPUT_HEADER_FILE} 
381-                     COMMAND  ${CMAKE_COMMAND}  -E echo "namespace kp {"  >> ${OUTPUT_HEADER_FILE} 
382-                     COMMAND  ${CMAKE_COMMAND}  -E echo "namespace shader_data {"  >> ${OUTPUT_HEADER_FILE} 
383-                     COMMAND  ${CMAKE_BINARY_DIR} /bin/xxd -i ${RAW_FILE_NAME}  >> ${OUTPUT_HEADER_FILE} 
384-                     COMMAND  ${CMAKE_COMMAND}  -E echo "}}"  >> ${OUTPUT_HEADER_FILE} 
385-                     COMMAND  ${CMAKE_COMMAND}  -E echo \"\#endif // define ${HEADER_FILE_DEFINE}\" >> ${OUTPUT_HEADER_FILE} 
386-                     DEPENDS  ${spv_file}  xxd
387-                     COMMENT  "Converting to hpp: ${FILE_NAME}  ${CMAKE_BINARY_DIR} /bin/xxd" 
388-                     )
389-             endif ()
390-         endforeach ()
391-     endfunction ()
392- 
393-     if  (EXISTS  "${CMAKE_CURRENT_SOURCE_DIR} /kompute/CMakeLists.txt" )
394-         message (STATUS  "Kompute found" )
395-         set (KOMPUTE_OPT_LOG_LEVEL Error CACHE  STRING  "Kompute log level" )
396-         add_subdirectory (kompute)
397- 
398-         # Compile our shaders 
399-         compile_shader(SOURCES 
400-             kompute-shaders/op_scale.comp
401-             kompute-shaders/op_scale_8.comp
402-             kompute-shaders/op_add.comp
403-             kompute-shaders/op_addrow.comp
404-             kompute-shaders/op_mul.comp
405-             kompute-shaders/op_silu.comp
406-             kompute-shaders/op_relu.comp
407-             kompute-shaders/op_gelu.comp
408-             kompute-shaders/op_softmax.comp
409-             kompute-shaders/op_norm.comp
410-             kompute-shaders/op_rmsnorm.comp
411-             kompute-shaders/op_diagmask.comp
412-             kompute-shaders/op_mul_mat_mat_f32.comp
413-             kompute-shaders/op_mul_mat_f16.comp
414-             kompute-shaders/op_mul_mat_q8_0.comp
415-             kompute-shaders/op_mul_mat_q4_0.comp
416-             kompute-shaders/op_mul_mat_q4_1.comp
417-             kompute-shaders/op_mul_mat_q4_k.comp
418-             kompute-shaders/op_mul_mat_q6_k.comp
419-             kompute-shaders/op_getrows_f32.comp
420-             kompute-shaders/op_getrows_f16.comp
421-             kompute-shaders/op_getrows_q4_0.comp
422-             kompute-shaders/op_getrows_q4_1.comp
423-             kompute-shaders/op_getrows_q6_k.comp
424-             kompute-shaders/op_rope_f16.comp
425-             kompute-shaders/op_rope_f32.comp
426-             kompute-shaders/op_cpy_f16_f16.comp
427-             kompute-shaders/op_cpy_f16_f32.comp
428-             kompute-shaders/op_cpy_f32_f16.comp
429-             kompute-shaders/op_cpy_f32_f32.comp
430-         )
431- 
432-         # Create a custom target for our generated shaders 
433-         add_custom_target (generated_shaders DEPENDS 
434-             shaderop_scale.h
435-             shaderop_scale_8.h
436-             shaderop_add.h
437-             shaderop_addrow.h
438-             shaderop_mul.h
439-             shaderop_silu.h
440-             shaderop_relu.h
441-             shaderop_gelu.h
442-             shaderop_softmax.h
443-             shaderop_norm.h
444-             shaderop_rmsnorm.h
445-             shaderop_diagmask.h
446-             shaderop_mul_mat_mat_f32.h
447-             shaderop_mul_mat_f16.h
448-             shaderop_mul_mat_q8_0.h
449-             shaderop_mul_mat_q4_0.h
450-             shaderop_mul_mat_q4_1.h
451-             shaderop_mul_mat_q4_k.h
452-             shaderop_mul_mat_q6_k.h
453-             shaderop_getrows_f32.h
454-             shaderop_getrows_f16.h
455-             shaderop_getrows_q4_0.h
456-             shaderop_getrows_q4_1.h
457-             shaderop_getrows_q6_k.h
458-             shaderop_rope_f16.h
459-             shaderop_rope_f32.h
460-             shaderop_cpy_f16_f16.h
461-             shaderop_cpy_f16_f32.h
462-             shaderop_cpy_f32_f16.h
463-             shaderop_cpy_f32_f32.h
464-         )
465- 
466-         # Create a custom command that depends on the generated_shaders 
467-         add_custom_command (
468-             OUTPUT  ${CMAKE_CURRENT_BINARY_DIR} /ggml-kompute.stamp
469-             COMMAND  ${CMAKE_COMMAND}  -E touch ${CMAKE_CURRENT_BINARY_DIR} /ggml-kompute.stamp
470-             DEPENDS  generated_shaders
471-             COMMENT  "Ensuring shaders are generated before compiling ggml-kompute.cpp" 
472-         )
473- 
474-         # Add the stamp to the main sources to ensure dependency tracking 
475-         set (GGML_SOURCES_KOMPUTE ggml-kompute.cpp           ${CMAKE_CURRENT_BINARY_DIR} /ggml-kompute.stamp)
476-         set (GGML_HEADERS_KOMPUTE ../include /ggml-kompute.h  ${CMAKE_CURRENT_BINARY_DIR} /ggml-kompute.stamp)
477- 
478-         list (APPEND  GGML_CDEF_PUBLIC GGML_USE_KOMPUTE)
479- 
480-         list (APPEND  GGML_EXTRA_LIBS_PRIVATE kompute)
481-         list (APPEND  GGML_EXTRA_INCLUDES     ${CMAKE_CURRENT_BINARY_DIR} )
482-     else ()
483-         message (WARNING "Kompute not found" )
484-     endif ()
485- endif ()
486- 
487247if  (GGML_CANN)
488248    if  ("cann${CANN_INSTALL_DIR} "  STREQUAL  "cann"  AND  DEFINED  ENV{ASCEND_TOOLKIT_HOME})
489249        set (CANN_INSTALL_DIR $ENV{ASCEND_TOOLKIT_HOME} )
@@ -757,21 +517,25 @@ target_link_libraries(ggml PUBLIC ggml-base ggml-cpu)
757517
758518function (ggml_add_backend backend)
759519    string (TOUPPER "GGML_${backend} "  backend_id)
760-     string (TOLOWER "ggml-${backend} "  backend_target)
761520    if  (${backend_id} )
521+         string (TOLOWER "ggml-${backend} "  backend_target)
762522        add_subdirectory (${backend_target} )
763523        if  (${BUILD_SHARED_LIBS} )
764524            target_compile_definitions (${backend_target}  PRIVATE  GGML_BACKEND_BUILD)
765-             target_compile_definitions (${backend_target}  PUBLIC   GGML_BABKEND_SHARED )
525+             target_compile_definitions (${backend_target}  PUBLIC   GGML_BACKEND_SHARED )
766526        endif ()
767527        target_link_libraries (ggml PUBLIC  ${backend_target} )
528+         string (TOUPPER "GGML_USE_${backend} "  backend_use)
529+         #set(GGML_CDEF_PUBLIC ${GGML_CDEF_PUBLIC} ${backend_use} PARENT_SCOPE) 
530+         target_compile_definitions (ggml PUBLIC  ${backend_use} )
768531    endif ()
769532endfunction ()
770533
771534ggml_add_backend(CUDA)
772535ggml_add_backend(METAL)
773536ggml_add_backend(BLAS)
774537ggml_add_backend(RPC)
538+ ggml_add_backend(Vulkan)
775539
776540if  (EMSCRIPTEN)
777541    set_target_properties (ggml PROPERTIES COMPILE_FLAGS  "-msimd128" )
0 commit comments