char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
d3146f2b5
char/aliceai-t5-moe
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 ( 21OUTPUT ${ SHADER_HEADER } 22COMMAND ${ CMAKE_COMMAND } -E echo "Embedding WGSL shaders to ggml-wgsl-shaders.hpp" 23COMMAND ${ CMAKE_COMMAND } -E make_directory ${ SHADER_OUTPUT_DIR } 24COMMAND ${ 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 } " 28DEPENDS ${ WGSL_SHADER_FILES } ${ CMAKE_CURRENT_SOURCE_DIR } /wgsl-shaders/embed_wgsl.py 29VERBATIM 30) 31 32add_custom_target ( generate_shaders DEPENDS ${ SHADER_HEADER }) 33 34ggml_add_backend_library ( ggml-webgpu 35ggml-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) 49set ( EMDAWNWEBGPU_DIR "" CACHE PATH "Path to emdawnwebgpu_pkg" ) 50 51if ( NOT EMDAWNWEBGPU_DIR) 52# default built-in port 53target_compile_options ( ggml-webgpu PRIVATE "--use-port=emdawnwebgpu" ) 54target_link_options ( ggml-webgpu INTERFACE "--use-port=emdawnwebgpu" ) 55else () 56# custom port 57target_compile_options ( ggml-webgpu PRIVATE "--use-port= ${ EMDAWNWEBGPU_DIR } /emdawnwebgpu.port.py" ) 58target_link_options ( ggml-webgpu INTERFACE "--use-port= ${ EMDAWNWEBGPU_DIR } /emdawnwebgpu.port.py" ) 59endif () 60 61if ( GGML_WEBGPU_JSPI) 62target_compile_options ( ggml-webgpu PRIVATE "-fwasm-exceptions" ) 63target_link_options ( ggml-webgpu INTERFACE "-sJSPI" "-fwasm-exceptions" ) 64else () 65target_compile_options ( ggml-webgpu PRIVATE "-fexceptions" ) 66target_link_options ( ggml-webgpu INTERFACE "-sASYNCIFY" "-exceptions" ) 67endif () 68else () 69find_package ( Dawn REQUIRED ) 70set ( DawnWebGPU_TARGET dawn::webgpu_dawn ) 71endif () 72 73if ( GGML_WEBGPU_DEBUG) 74target_compile_definitions ( ggml-webgpu PRIVATE GGML_WEBGPU_DEBUG=1 ) 75if ( EMSCRIPTEN) 76target_link_options ( ggml-webgpu INTERFACE "-sASSERTIONS=2" ) 77endif () 78endif () 79 80if ( GGML_WEBGPU_CPU_PROFILE) 81target_compile_definitions ( ggml-webgpu PRIVATE GGML_WEBGPU_CPU_PROFILE=1 ) 82endif () 83 84if ( GGML_WEBGPU_GPU_PROFILE) 85target_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 })