cmake: add Intel Arc GPU support via SYCL backend
- Add sycl to the backend link loop so ggml-sycl links when built statically - Add -fsycl link option for consumer executables (ggml-sycl links the SYCL runtime PRIVATE, so consumers need it on their own link line) - Gate _FORTIFY_SOURCE=2 with NOT GGML_SYCL: the fortified __memcpy_chk symbol is unresolvable in SPIR-V device code and aborts kernel compilation - Add buildsycl.sh convenience script (icx/icpx compilers) Tested on Intel Arc A310 (DG2) with oneAPI 2026.0 + Level Zero: full TTS generation produces correct audio output on the GPU.
This commit is contained in:
+10
-3
@@ -40,8 +40,10 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
|
|||||||
# Audio tokenizer tensor names can exceed default GGML_MAX_NAME of 64
|
# Audio tokenizer tensor names can exceed default GGML_MAX_NAME of 64
|
||||||
add_compile_definitions(GGML_MAX_NAME=128)
|
add_compile_definitions(GGML_MAX_NAME=128)
|
||||||
|
|
||||||
# Harden: mark fread/fwrite/etc with warn_unused_result on all platforms
|
# Harden: mark fread/fwrite/etc with warn_unused_result on all platforms.
|
||||||
if(NOT MSVC)
|
# Disabled for SYCL: _FORTIFY_SOURCE replaces memcpy with __memcpy_chk
|
||||||
|
# which is unresolvable in GPU device code and aborts kernel compilation.
|
||||||
|
if(NOT MSVC AND NOT GGML_SYCL)
|
||||||
add_compile_definitions(_FORTIFY_SOURCE=2)
|
add_compile_definitions(_FORTIFY_SOURCE=2)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -79,7 +81,7 @@ macro(link_ggml_backends target)
|
|||||||
if(TARGET ggml-base)
|
if(TARGET ggml-base)
|
||||||
target_link_libraries(${target} PRIVATE ggml-base)
|
target_link_libraries(${target} PRIVATE ggml-base)
|
||||||
endif()
|
endif()
|
||||||
foreach(backend cpu blas cuda metal vulkan)
|
foreach(backend cpu blas cuda metal vulkan sycl)
|
||||||
if(TARGET ggml-${backend})
|
if(TARGET ggml-${backend})
|
||||||
get_target_property(CURRENT_BACKEND_TYPE ggml-${backend} TYPE)
|
get_target_property(CURRENT_BACKEND_TYPE ggml-${backend} TYPE)
|
||||||
if (CURRENT_BACKEND_TYPE STREQUAL "MODULE_LIBRARY")
|
if (CURRENT_BACKEND_TYPE STREQUAL "MODULE_LIBRARY")
|
||||||
@@ -90,6 +92,11 @@ macro(link_ggml_backends target)
|
|||||||
target_link_libraries(${target} PRIVATE ggml-${backend})
|
target_link_libraries(${target} PRIVATE ggml-${backend})
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
|
# SYCL backend links the runtime PRIVATE, so consumers need -fsycl
|
||||||
|
# on their own link line to resolve libsycl.so symbols.
|
||||||
|
if(TARGET ggml-sycl AND GGML_SYCL)
|
||||||
|
target_link_options(${target} PRIVATE -fsycl)
|
||||||
|
endif()
|
||||||
add_dependencies(${target} version)
|
add_dependencies(${target} version)
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
|
|||||||
Executable
+8
@@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
rm -rf build
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
|
||||||
|
cmake .. -DGGML_SYCL=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx
|
||||||
|
cmake --build . --config Release -j "$(nproc)"
|
||||||
Reference in New Issue
Block a user