diff --git a/CMakeLists.txt b/CMakeLists.txt index 8206fd2..47aa05f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,8 +40,10 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) # Audio tokenizer tensor names can exceed default GGML_MAX_NAME of 64 add_compile_definitions(GGML_MAX_NAME=128) -# Harden: mark fread/fwrite/etc with warn_unused_result on all platforms -if(NOT MSVC) +# Harden: mark fread/fwrite/etc with warn_unused_result on all platforms. +# 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) endif() @@ -79,7 +81,7 @@ macro(link_ggml_backends target) if(TARGET ggml-base) target_link_libraries(${target} PRIVATE ggml-base) endif() - foreach(backend cpu blas cuda metal vulkan) + foreach(backend cpu blas cuda metal vulkan sycl) if(TARGET ggml-${backend}) get_target_property(CURRENT_BACKEND_TYPE ggml-${backend} TYPE) if (CURRENT_BACKEND_TYPE STREQUAL "MODULE_LIBRARY") @@ -90,6 +92,11 @@ macro(link_ggml_backends target) target_link_libraries(${target} PRIVATE ggml-${backend}) endif() 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) endmacro() diff --git a/buildsycl.sh b/buildsycl.sh new file mode 100755 index 0000000..0fe3818 --- /dev/null +++ b/buildsycl.sh @@ -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)"