mirror of
https://github.com/ggml-org/llama.cpp.git
synced 2025-11-12 10:47:01 +00:00
* Minimal setup of webgpu backend with dawn. Just prints out the adapter and segfaults * Initialize webgpu device * Making progress on setting up the backend * Finish more boilerplate/utility functions * Organize file and work on alloc buffer * Add webgpu_context to prepare for actually running some shaders * Work on memset and add shader loading * Work on memset polyfill * Implement set_tensor as webgpu WriteBuffer, remove host_buffer stubs since webgpu doesn't support it * Implement get_tensor and buffer_clear * Finish rest of setup * Start work on compute graph * Basic mat mul working * Work on emscripten build * Basic WebGPU backend instructions * Use EMSCRIPTEN flag * Work on passing ci, implement 4d tensor multiplication * Pass thread safety test * Implement permuting for mul_mat and cpy * minor cleanups * Address feedback * Remove division by type size in cpy op * Fix formatting and add github action workflows for vulkan and metal (m-series) webgpu backends * Fix name * Fix macos dawn prefix path
55 lines
1.8 KiB
CMake
55 lines
1.8 KiB
CMake
cmake_minimum_required(VERSION 3.13)
|
|
|
|
find_package(Python3 REQUIRED)
|
|
|
|
# Shader locations
|
|
set(SHADER_DIR "${CMAKE_CURRENT_SOURCE_DIR}/wgsl-shaders")
|
|
set(SHADER_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated")
|
|
set(SHADER_HEADER "${SHADER_OUTPUT_DIR}/ggml-wgsl-shaders.hpp")
|
|
file(MAKE_DIRECTORY ${SHADER_OUTPUT_DIR})
|
|
|
|
message(STATUS "Shader output dir: ${SHADER_OUTPUT_DIR}")
|
|
|
|
# Find all WGSL files
|
|
file(GLOB WGSL_SHADER_FILES "${SHADER_DIR}/*.wgsl")
|
|
|
|
# Generate the header using a Python script
|
|
add_custom_command(
|
|
OUTPUT ${SHADER_HEADER}
|
|
COMMAND ${CMAKE_COMMAND} -E echo "Embedding WGSL shaders to ggml-wgsl-shaders.hpp"
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${SHADER_OUTPUT_DIR}
|
|
COMMAND ${CMAKE_COMMAND} -E env PYTHONIOENCODING=utf-8
|
|
${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/wgsl-shaders/embed_wgsl.py
|
|
--input "${SHADER_DIR}"
|
|
--output "${SHADER_HEADER}"
|
|
DEPENDS ${WGSL_SHADER_FILES} ${CMAKE_CURRENT_SOURCE_DIR}/wgsl-shaders/embed_wgsl.py
|
|
VERBATIM
|
|
)
|
|
|
|
add_custom_target(generate_shaders DEPENDS ${SHADER_HEADER})
|
|
|
|
ggml_add_backend_library(ggml-webgpu
|
|
ggml-webgpu.cpp
|
|
${SHADER_HEADER}
|
|
../../include/ggml-webgpu.h
|
|
)
|
|
|
|
add_dependencies(ggml-webgpu generate_shaders)
|
|
|
|
if(EMSCRIPTEN)
|
|
set(EMDAWNWEBGPU_DIR "" CACHE PATH "Path to emdawnwebgpu_pkg")
|
|
|
|
target_compile_options(ggml-webgpu PRIVATE "--use-port=${EMDAWNWEBGPU_DIR}/emdawnwebgpu.port.py")
|
|
target_link_options(ggml-webgpu PRIVATE "--use-port=${EMDAWNWEBGPU_DIR}/emdawnwebgpu.port.py")
|
|
else()
|
|
find_package(Dawn REQUIRED)
|
|
set(DawnWebGPU_TARGET dawn::webgpu_dawn)
|
|
endif()
|
|
|
|
if (GGML_WEBGPU_DEBUG)
|
|
target_compile_definitions(ggml-webgpu PRIVATE GGML_WEBGPU_DEBUG=1)
|
|
endif()
|
|
|
|
target_include_directories(ggml-webgpu PRIVATE ${SHADER_OUTPUT_DIR})
|
|
target_link_libraries(ggml-webgpu PRIVATE ${DawnWebGPU_TARGET})
|