char-fork/llama.cpp

git clone https://git.t4t.associates/char-fork/llama.cpp

Mendy Bergerggml-webgpu: Update to a recent version of Dawn (#28683)d3146f2b5

char/aliceai-t5-moe
3.1 KiB89 linesraw
1cmake_minimum_required(VERSION 3.13)
2
3find_package(Python3 REQUIRED)
4
5# Shader locations
6set(SHADER_DIR "${CMAKE_CURRENT_SOURCE_DIR}/wgsl-shaders")
7set(SHADER_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated")
8set(SHADER_HEADER "${SHADER_OUTPUT_DIR}/ggml-wgsl-shaders.hpp")
9file(MAKE_DIRECTORY ${SHADER_OUTPUT_DIR})
10
11message(STATUS "Shader output dir: ${SHADER_OUTPUT_DIR}")
12
13# Find all WGSL sources
14file(GLOB WGSL_SHADER_FILES
15    "${SHADER_DIR}/*.wgsl"
16    "${SHADER_DIR}/*.tmpl"
17)
18
19# Generate the header using a Python script
20add_custom_command(
21    OUTPUT ${SHADER_HEADER}
22    COMMAND ${CMAKE_COMMAND} -E echo "Embedding WGSL shaders to ggml-wgsl-shaders.hpp"
23    COMMAND ${CMAKE_COMMAND} -E make_directory ${SHADER_OUTPUT_DIR}
24    COMMAND ${CMAKE_COMMAND} -E env PYTHONIOENCODING=utf-8
25        ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/wgsl-shaders/embed_wgsl.py
26            --input_dir "${SHADER_DIR}"
27            --output_file "${SHADER_HEADER}"
28    DEPENDS ${WGSL_SHADER_FILES} ${CMAKE_CURRENT_SOURCE_DIR}/wgsl-shaders/embed_wgsl.py
29    VERBATIM
30)
31
32add_custom_target(generate_shaders DEPENDS ${SHADER_HEADER})
33
34ggml_add_backend_library(ggml-webgpu
35    ggml-webgpu.cpp
36    ${SHADER_HEADER}
37    ../../include/ggml-webgpu.h
38)
39
40add_dependencies(ggml-webgpu generate_shaders)
41
42# Dawn needs C++20 (https://dawn.googlesource.com/dawn/+/refs/heads/main/docs/quickstart-cmake.md#prerequisites)
43target_compile_features(ggml-webgpu PRIVATE cxx_std_20)
44
45# Disable C++20 module scanning since emscan-deps fails to find webgpu_cpp.h
46set_target_properties(ggml-webgpu PROPERTIES CXX_SCAN_FOR_MODULES OFF)
47
48if(EMSCRIPTEN)
49    set(EMDAWNWEBGPU_DIR "" CACHE PATH "Path to emdawnwebgpu_pkg")
50
51    if(NOT EMDAWNWEBGPU_DIR)
52        # default built-in port
53        target_compile_options(ggml-webgpu PRIVATE "--use-port=emdawnwebgpu")
54        target_link_options(ggml-webgpu INTERFACE "--use-port=emdawnwebgpu")
55    else()
56        # custom port
57        target_compile_options(ggml-webgpu PRIVATE "--use-port=${EMDAWNWEBGPU_DIR}/emdawnwebgpu.port.py")
58        target_link_options(ggml-webgpu INTERFACE "--use-port=${EMDAWNWEBGPU_DIR}/emdawnwebgpu.port.py")
59    endif()
60
61    if (GGML_WEBGPU_JSPI)
62        target_compile_options(ggml-webgpu PRIVATE "-fwasm-exceptions")
63        target_link_options(ggml-webgpu INTERFACE "-sJSPI" "-fwasm-exceptions")
64    else()
65        target_compile_options(ggml-webgpu PRIVATE "-fexceptions")
66        target_link_options(ggml-webgpu INTERFACE "-sASYNCIFY" "-exceptions")
67    endif()
68else()
69    find_package(Dawn REQUIRED)
70    set(DawnWebGPU_TARGET dawn::webgpu_dawn)
71endif()
72
73if (GGML_WEBGPU_DEBUG)
74    target_compile_definitions(ggml-webgpu PRIVATE GGML_WEBGPU_DEBUG=1)
75    if(EMSCRIPTEN)
76        target_link_options(ggml-webgpu INTERFACE "-sASSERTIONS=2")
77    endif()
78endif()
79
80if (GGML_WEBGPU_CPU_PROFILE)
81    target_compile_definitions(ggml-webgpu PRIVATE GGML_WEBGPU_CPU_PROFILE=1)
82endif()
83
84if (GGML_WEBGPU_GPU_PROFILE)
85    target_compile_definitions(ggml-webgpu PRIVATE GGML_WEBGPU_GPU_PROFILE=1)
86endif()
87
88target_include_directories(ggml-webgpu PRIVATE ${SHADER_OUTPUT_DIR})
89target_link_libraries(ggml-webgpu PRIVATE ${DawnWebGPU_TARGET})