@@ -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