|
| 1 | +cmake_minimum_required(VERSION 3.13) |
| 2 | + |
| 3 | +find_package(Python3 REQUIRED) |
| 4 | + |
| 5 | +# Shader locations |
| 6 | +set(SHADER_DIR "${CMAKE_CURRENT_SOURCE_DIR}/wgsl-shaders") |
| 7 | +set(SHADER_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated") |
| 8 | +set(SHADER_HEADER "${SHADER_OUTPUT_DIR}/ggml-wgsl-shaders.hpp") |
| 9 | +file(MAKE_DIRECTORY ${SHADER_OUTPUT_DIR}) |
| 10 | + |
| 11 | +message(STATUS "Shader output dir: ${SHADER_OUTPUT_DIR}") |
| 12 | + |
| 13 | +# Find all WGSL files |
| 14 | +file(GLOB WGSL_SHADER_FILES "${SHADER_DIR}/*.wgsl") |
| 15 | + |
| 16 | +# Generate the header using a Python script |
| 17 | +add_custom_command( |
| 18 | + OUTPUT ${SHADER_HEADER} |
| 19 | + COMMAND ${CMAKE_COMMAND} -E echo "Embedding WGSL shaders to ggml-wgsl-shaders.hpp" |
| 20 | + COMMAND ${CMAKE_COMMAND} -E make_directory ${SHADER_OUTPUT_DIR} |
| 21 | + COMMAND ${CMAKE_COMMAND} -E env PYTHONIOENCODING=utf-8 |
| 22 | + ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/wgsl-shaders/embed_wgsl.py |
| 23 | + --input "${SHADER_DIR}" |
| 24 | + --output "${SHADER_HEADER}" |
| 25 | + DEPENDS ${WGSL_SHADER_FILES} ${CMAKE_CURRENT_SOURCE_DIR}/wgsl-shaders/embed_wgsl.py |
| 26 | + VERBATIM |
| 27 | +) |
| 28 | + |
| 29 | +add_custom_target(generate_shaders DEPENDS ${SHADER_HEADER}) |
| 30 | + |
| 31 | +ggml_add_backend_library(ggml-webgpu |
| 32 | + ggml-webgpu.cpp |
| 33 | + ${SHADER_HEADER} |
| 34 | + ../../include/ggml-webgpu.h |
| 35 | +) |
| 36 | + |
| 37 | +add_dependencies(ggml-webgpu generate_shaders) |
| 38 | + |
| 39 | +if(EMSCRIPTEN) |
| 40 | + set(EMDAWNWEBGPU_DIR "" CACHE PATH "Path to emdawnwebgpu_pkg") |
| 41 | + |
| 42 | + target_compile_options(ggml-webgpu PRIVATE "--use-port=${EMDAWNWEBGPU_DIR}/emdawnwebgpu.port.py") |
| 43 | + target_link_options(ggml-webgpu PRIVATE "--use-port=${EMDAWNWEBGPU_DIR}/emdawnwebgpu.port.py") |
| 44 | +else() |
| 45 | + find_package(Dawn REQUIRED) |
| 46 | + set(DawnWebGPU_TARGET dawn::webgpu_dawn) |
| 47 | +endif() |
| 48 | + |
| 49 | +if (GGML_WEBGPU_DEBUG) |
| 50 | + target_compile_definitions(ggml-webgpu PRIVATE GGML_WEBGPU_DEBUG=1) |
| 51 | +endif() |
| 52 | + |
| 53 | +target_include_directories(ggml-webgpu PRIVATE ${SHADER_OUTPUT_DIR}) |
| 54 | +target_link_libraries(ggml-webgpu PRIVATE ${DawnWebGPU_TARGET}) |
0 commit comments