@@ -197,6 +197,10 @@ ifdef GGML_RPC
197197 BUILD_TARGETS += rpc-server
198198endif
199199
200+ ifdef GGML_VULKAN
201+ BUILD_TARGETS += vulkan-shaders-gen
202+ endif
203+
200204default : $(BUILD_TARGETS ) $(LEGACY_TARGETS_BUILD )
201205
202206test : $(TEST_TARGETS )
@@ -710,8 +714,8 @@ endif # GGML_CUDA
710714
711715ifdef GGML_VULKAN
712716 MK_CPPFLAGS += -DGGML_USE_VULKAN
713- MK_LDFLAGS += -lvulkan
714- OBJ_GGML += ggml/src/ggml-vulkan.o
717+ MK_LDFLAGS += $(shell pkg-config --libs vulkan)
718+ OBJ_GGML += ggml/src/ggml-vulkan.o ggml/src/ggml-vulkan-shaders.o
715719
716720ifdef GGML_VULKAN_CHECK_RESULTS
717721 MK_CPPFLAGS += -DGGML_VULKAN_CHECK_RESULTS
@@ -733,10 +737,28 @@ ifdef GGML_VULKAN_RUN_TESTS
733737 MK_CPPFLAGS += -DGGML_VULKAN_RUN_TESTS
734738endif
735739
736- ggml/src/ggml-vulkan.o : \
737- ggml/src/ggml-vulkan.cpp \
738- ggml/include/ggml-vulkan.h
739- $(CXX ) $(CXXFLAGS ) -c $< -o $@
740+ GLSLC_CMD = glslc
741+ _ggml_vk_genshaders_cmd = $(shell pwd) /vulkan-shaders-gen
742+ _ggml_vk_header = ggml/src/ggml-vulkan-shaders.hpp
743+ _ggml_vk_source = ggml/src/ggml-vulkan-shaders.cpp
744+ _ggml_vk_input_dir = ggml/src/vulkan-shaders
745+ _ggml_vk_shader_deps = $(echo $(_ggml_vk_input_dir ) /*.comp )
746+
747+ ggml/src/ggml-vulkan.o : ggml/src/ggml-vulkan.cpp ggml/include/ggml-vulkan.h $(_ggml_vk_header ) $(_ggml_vk_source )
748+ $(CXX ) $(CXXFLAGS ) $(shell pkg-config --cflags vulkan) -c $< -o $@
749+
750+ $(_ggml_vk_header ) : $(_ggml_vk_source )
751+
752+ $(_ggml_vk_source ) : $(_ggml_vk_shader_deps ) vulkan-shaders-gen
753+ $(_ggml_vk_genshaders_cmd ) \
754+ --glslc $(GLSLC_CMD ) \
755+ --input-dir $(_ggml_vk_input_dir ) \
756+ --target-hpp $(_ggml_vk_header ) \
757+ --target-cpp $(_ggml_vk_source )
758+
759+ vulkan-shaders-gen : ggml/src/vulkan-shaders/vulkan-shaders-gen.cpp
760+ $(CXX ) $(CXXFLAGS ) -o $@ $(LDFLAGS ) ggml/src/vulkan-shaders/vulkan-shaders-gen.cpp
761+
740762endif # GGML_VULKAN
741763
742764ifdef GGML_HIPBLAS
@@ -1116,6 +1138,7 @@ clean:
11161138 rm -vrf ggml/src/ggml-cuda/template-instances/* .o
11171139 rm -rvf $(BUILD_TARGETS )
11181140 rm -rvf $(TEST_TARGETS )
1141+ rm -f vulkan-shaders-gen ggml/src/ggml-vulkan-shaders.hpp ggml/src/ggml-vulkan-shaders.cpp
11191142 rm -rvf $(LEGACY_TARGETS_CLEAN )
11201143 find examples pocs -type f -name " *.o" -delete
11211144
0 commit comments