@@ -134,6 +134,10 @@ ifdef GGML_RPC
134134 BUILD_TARGETS += rpc-server
135135endif
136136
137+ ifdef GGML_VULKAN
138+ BUILD_TARGETS += vulkan-shaders-gen
139+ endif
140+
137141ifeq ($(shell sdl2-config --cflags --libs 2>/dev/null) ,)
138142else
139143 BUILD_TARGETS += \
@@ -626,8 +630,8 @@ endif # GGML_CUDA
626630
627631ifdef GGML_VULKAN
628632 MK_CPPFLAGS += -DGGML_USE_VULKAN
629- MK_LDFLAGS += -lvulkan
630- OBJ_GGML += ggml/src/ggml-vulkan.o
633+ MK_LDFLAGS += $(shell pkg-config --libs vulkan)
634+ OBJ_GGML += ggml/src/ggml-vulkan.o ggml/src/ggml-vulkan-shaders.o
631635
632636ifdef GGML_VULKAN_CHECK_RESULTS
633637 MK_CPPFLAGS += -DGGML_VULKAN_CHECK_RESULTS
@@ -641,6 +645,10 @@ ifdef GGML_VULKAN_MEMORY_DEBUG
641645 MK_CPPFLAGS += -DGGML_VULKAN_MEMORY_DEBUG
642646endif
643647
648+ ifdef GGML_VULKAN_PERF
649+ MK_CPPFLAGS += -DGGML_VULKAN_PERF
650+ endif
651+
644652ifdef GGML_VULKAN_VALIDATE
645653 MK_CPPFLAGS += -DGGML_VULKAN_VALIDATE
646654endif
@@ -649,10 +657,28 @@ ifdef GGML_VULKAN_RUN_TESTS
649657 MK_CPPFLAGS += -DGGML_VULKAN_RUN_TESTS
650658endif
651659
652- ggml/src/ggml-vulkan.o : \
653- ggml/src/ggml-vulkan.cpp \
654- ggml/include/ggml-vulkan.h
655- $(CXX ) $(CXXFLAGS ) -c $< -o $@
660+ GLSLC_CMD = glslc
661+ _ggml_vk_genshaders_cmd = $(shell pwd) /vulkan-shaders-gen
662+ _ggml_vk_header = ggml/src/ggml-vulkan-shaders.hpp
663+ _ggml_vk_source = ggml/src/ggml-vulkan-shaders.cpp
664+ _ggml_vk_input_dir = ggml/src/vulkan-shaders
665+ _ggml_vk_shader_deps = $(echo $(_ggml_vk_input_dir ) /*.comp )
666+
667+ ggml/src/ggml-vulkan.o : ggml/src/ggml-vulkan.cpp ggml/include/ggml-vulkan.h $(_ggml_vk_header ) $(_ggml_vk_source )
668+ $(CXX ) $(CXXFLAGS ) $(shell pkg-config --cflags vulkan) -c $< -o $@
669+
670+ $(_ggml_vk_header ) : $(_ggml_vk_source )
671+
672+ $(_ggml_vk_source ) : $(_ggml_vk_shader_deps ) vulkan-shaders-gen
673+ $(_ggml_vk_genshaders_cmd ) \
674+ --glslc $(GLSLC_CMD ) \
675+ --input-dir $(_ggml_vk_input_dir ) \
676+ --target-hpp $(_ggml_vk_header ) \
677+ --target-cpp $(_ggml_vk_source )
678+
679+ vulkan-shaders-gen : ggml/src/vulkan-shaders/vulkan-shaders-gen.cpp
680+ $(CXX ) $(CXXFLAGS ) -o $@ $(LDFLAGS ) ggml/src/vulkan-shaders/vulkan-shaders-gen.cpp
681+
656682endif # GGML_VULKAN
657683
658684ifdef GGML_HIPBLAS
0 commit comments