summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKawrakow <iwankawrakow@gmail.com>2025-07-02 16:11:56 +0200
committerGitHub <noreply@github.com>2025-07-02 16:11:56 +0200
commitc9148ba0b4724033f369636d31bc17aeed090f7e (patch)
treedb187d346b911344fdfe35a86d7c01d1b4f44199
parent3248a3599275c3d2a98bc41d512e1d3ba66e32ba (diff)
Fix CMakeLists (#571)
* Move Vulkan stuff inside if (GGML_VULKAN) * Minor --------- Co-authored-by: Iwan Kawrakow <iwan.kawrakow@gmail.com>
-rw-r--r--ggml/src/CMakeLists.txt263
-rw-r--r--ggml/src/ggml-backend.c2
2 files changed, 130 insertions, 135 deletions
diff --git a/ggml/src/CMakeLists.txt b/ggml/src/CMakeLists.txt
index 4f9428f9..1a3c1ff6 100644
--- a/ggml/src/CMakeLists.txt
+++ b/ggml/src/CMakeLists.txt
@@ -643,8 +643,6 @@ if (GGML_RPC)
set(GGML_SOURCES_RPC ggml-rpc.cpp)
endif()
-find_package(Vulkan COMPONENTS glslc REQUIRED)
-
function(detect_host_compiler)
if (CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
find_program(HOST_C_COMPILER NAMES cl gcc clang NO_CMAKE_FIND_ROOT_PATH)
@@ -657,71 +655,68 @@ function(detect_host_compiler)
set(HOST_CXX_COMPILER "${HOST_CXX_COMPILER}" PARENT_SCOPE)
endfunction()
-# Function to test shader extension support
-# Parameters:
-# EXTENSION_NAME - Name of the extension to test (e.g., "GL_EXT_integer_dot_product")
-# TEST_SHADER_FILE - Path to the test shader file
-# RESULT_VARIABLE - Name of the variable to set (ON/OFF) based on test result
-function(test_shader_extension_support EXTENSION_NAME TEST_SHADER_FILE RESULT_VARIABLE)
- execute_process(
- COMMAND ${Vulkan_GLSLC_EXECUTABLE} -o - -fshader-stage=compute --target-env=vulkan1.3 "${TEST_SHADER_FILE}"
- OUTPUT_VARIABLE glslc_output
- ERROR_VARIABLE glslc_error
- )
-
- if (${glslc_error} MATCHES ".*extension not supported: ${EXTENSION_NAME}.*")
- message(STATUS "${EXTENSION_NAME} not supported by glslc")
- set(${RESULT_VARIABLE} OFF PARENT_SCOPE)
- else()
- message(STATUS "${EXTENSION_NAME} supported by glslc")
- set(${RESULT_VARIABLE} ON PARENT_SCOPE)
- add_compile_definitions(${RESULT_VARIABLE})
-
- # Ensure the extension support is forwarded to vulkan-shaders-gen
- list(APPEND VULKAN_SHADER_GEN_CMAKE_ARGS -D${RESULT_VARIABLE}=ON)
- set(VULKAN_SHADER_GEN_CMAKE_ARGS "${VULKAN_SHADER_GEN_CMAKE_ARGS}" PARENT_SCOPE)
- endif()
-endfunction()
-
if (GGML_VULKAN)
find_package(Vulkan COMPONENTS glslc REQUIRED)
if (Vulkan_FOUND)
message(STATUS "Vulkan found")
- # add vulkan test
-
- set(VULKAN_SHADER_GEN_CMAKE_ARGS "")
-
- # Test all shader extensions
- test_shader_extension_support(
- "GL_KHR_cooperative_matrix"
- "${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders/test_coopmat_support.comp"
- "GGML_VULKAN_COOPMAT_GLSLC_SUPPORT"
- )
-
- test_shader_extension_support(
- "GL_NV_cooperative_matrix2"
- "${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders/test_coopmat2_support.comp"
- "GGML_VULKAN_COOPMAT2_GLSLC_SUPPORT"
- )
-
- test_shader_extension_support(
- "GL_EXT_integer_dot_product"
- "${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders/test_integer_dot_support.comp"
- "GGML_VULKAN_INTEGER_DOT_GLSLC_SUPPORT"
- )
-
- test_shader_extension_support(
- "GL_EXT_bfloat16"
- "${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders/test_bfloat16_support.comp"
- "GGML_VULKAN_BFLOAT16_GLSLC_SUPPORT"
- )
-
-
-
-
- # end vulkan test
+ # Function to test shader extension support
+ # Parameters:
+ # EXTENSION_NAME - Name of the extension to test (e.g., "GL_EXT_integer_dot_product")
+ # TEST_SHADER_FILE - Path to the test shader file
+ # RESULT_VARIABLE - Name of the variable to set (ON/OFF) based on test result
+ function(test_shader_extension_support EXTENSION_NAME TEST_SHADER_FILE RESULT_VARIABLE)
+ execute_process(
+ COMMAND ${Vulkan_GLSLC_EXECUTABLE} -o - -fshader-stage=compute --target-env=vulkan1.3 "${TEST_SHADER_FILE}"
+ OUTPUT_VARIABLE glslc_output
+ ERROR_VARIABLE glslc_error
+ )
+
+ if (${glslc_error} MATCHES ".*extension not supported: ${EXTENSION_NAME}.*")
+ message(STATUS "${EXTENSION_NAME} not supported by glslc")
+ set(${RESULT_VARIABLE} OFF PARENT_SCOPE)
+ else()
+ message(STATUS "${EXTENSION_NAME} supported by glslc")
+ set(${RESULT_VARIABLE} ON PARENT_SCOPE)
+ add_compile_definitions(${RESULT_VARIABLE})
+
+ # Ensure the extension support is forwarded to vulkan-shaders-gen
+ list(APPEND VULKAN_SHADER_GEN_CMAKE_ARGS -D${RESULT_VARIABLE}=ON)
+ set(VULKAN_SHADER_GEN_CMAKE_ARGS "${VULKAN_SHADER_GEN_CMAKE_ARGS}" PARENT_SCOPE)
+ endif()
+ endfunction()
+
+ # add vulkan test
+
+ set(VULKAN_SHADER_GEN_CMAKE_ARGS "")
+
+ # Test all shader extensions
+ test_shader_extension_support(
+ "GL_KHR_cooperative_matrix"
+ "${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders/test_coopmat_support.comp"
+ "GGML_VULKAN_COOPMAT_GLSLC_SUPPORT"
+ )
+
+ test_shader_extension_support(
+ "GL_NV_cooperative_matrix2"
+ "${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders/test_coopmat2_support.comp"
+ "GGML_VULKAN_COOPMAT2_GLSLC_SUPPORT"
+ )
+
+ test_shader_extension_support(
+ "GL_EXT_integer_dot_product"
+ "${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders/test_integer_dot_support.comp"
+ "GGML_VULKAN_INTEGER_DOT_GLSLC_SUPPORT"
+ )
+
+ test_shader_extension_support(
+ "GL_EXT_bfloat16"
+ "${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders/test_bfloat16_support.comp"
+ "GGML_VULKAN_BFLOAT16_GLSLC_SUPPORT"
+ )
+
+ # end vulkan test
list(APPEND GGML_CDEF_PUBLIC GGML_USE_VULKAN)
# Workaround to the "can't dereference invalidated vector iterator" bug in clang-cl debug build
@@ -758,79 +753,79 @@ if (GGML_VULKAN)
add_compile_definitions(GGML_VULKAN_RUN_TESTS)
endif()
- # Set up toolchain for host compilation whether cross-compiling or not
- if (CMAKE_CROSSCOMPILING)
- if (GGML_VULKAN_SHADERS_GEN_TOOLCHAIN)
- set(HOST_CMAKE_TOOLCHAIN_FILE ${GGML_VULKAN_SHADERS_GEN_TOOLCHAIN})
- else()
- detect_host_compiler()
- if (NOT HOST_C_COMPILER OR NOT HOST_CXX_COMPILER)
- message(FATAL_ERROR "Host compiler not found")
- else()
- message(STATUS "Host compiler: ${HOST_C_COMPILER} ${HOST_CXX_COMPILER}")
- endif()
- configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/host-toolchain.cmake.in ${CMAKE_BINARY_DIR}/host-toolchain.cmake @ONLY)
- set(HOST_CMAKE_TOOLCHAIN_FILE ${CMAKE_BINARY_DIR}/host-toolchain.cmake)
- endif()
- else()
- # For non-cross-compiling, use empty toolchain (use host compiler)
- set(HOST_CMAKE_TOOLCHAIN_FILE "")
- endif()
-
- include(ExternalProject)
-
- if (CMAKE_CROSSCOMPILING)
- list(APPEND VULKAN_SHADER_GEN_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${HOST_CMAKE_TOOLCHAIN_FILE})
- message(STATUS "vulkan-shaders-gen toolchain file: ${HOST_CMAKE_TOOLCHAIN_FILE}")
- endif()
-
- ExternalProject_Add(
- vulkan-shaders-gen
- SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders
- CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/$<CONFIG>
- -DCMAKE_INSTALL_BINDIR=.
- -DCMAKE_BUILD_TYPE=$<CONFIG>
- ${VULKAN_SHADER_GEN_CMAKE_ARGS}
-
- BUILD_COMMAND ${CMAKE_COMMAND} --build . --config $<CONFIG>
-
- # NOTE: When DESTDIR is set using Makefile generators and
- # "make install" triggers the build step, vulkan-shaders-gen
- # would be installed into the DESTDIR prefix, so it is unset
- # to ensure that does not happen.
-
- INSTALL_COMMAND ${CMAKE_COMMAND} -E env --unset=DESTDIR
- ${CMAKE_COMMAND} --install . --config $<CONFIG>
- )
-
- set (_ggml_vk_host_suffix $<IF:$<STREQUAL:${CMAKE_HOST_SYSTEM_NAME},Windows>,.exe,>)
- set (_ggml_vk_genshaders_dir "${CMAKE_BINARY_DIR}/$<CONFIG>")
- set (_ggml_vk_genshaders_cmd "${_ggml_vk_genshaders_dir}/vulkan-shaders-gen${_ggml_vk_host_suffix}")
- set (_ggml_vk_header "${CMAKE_CURRENT_BINARY_DIR}/ggml-vulkan-shaders.hpp")
- set (_ggml_vk_source "${CMAKE_CURRENT_BINARY_DIR}/ggml-vulkan-shaders.cpp")
- set (_ggml_vk_input_dir "${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders")
- set (_ggml_vk_output_dir "${CMAKE_CURRENT_BINARY_DIR}/vulkan-shaders.spv")
-
- file(GLOB _ggml_vk_shader_files CONFIGURE_DEPENDS "${_ggml_vk_input_dir}/*.comp")
-
- add_custom_command(
- OUTPUT ${_ggml_vk_header}
- ${_ggml_vk_source}
-
- COMMAND ${_ggml_vk_genshaders_cmd}
- --glslc ${Vulkan_GLSLC_EXECUTABLE}
- --input-dir ${_ggml_vk_input_dir}
- --output-dir ${_ggml_vk_output_dir}
- --target-hpp ${_ggml_vk_header}
- --target-cpp ${_ggml_vk_source}
- --no-clean
-
- DEPENDS ${_ggml_vk_shader_files}
- ${_ggml_vk_shader_gens_sources}
- vulkan-shaders-gen
-
- COMMENT "Generate vulkan shaders"
- )
+ # Set up toolchain for host compilation whether cross-compiling or not
+ if (CMAKE_CROSSCOMPILING)
+ if (GGML_VULKAN_SHADERS_GEN_TOOLCHAIN)
+ set(HOST_CMAKE_TOOLCHAIN_FILE ${GGML_VULKAN_SHADERS_GEN_TOOLCHAIN})
+ else()
+ detect_host_compiler()
+ if (NOT HOST_C_COMPILER OR NOT HOST_CXX_COMPILER)
+ message(FATAL_ERROR "Host compiler not found")
+ else()
+ message(STATUS "Host compiler: ${HOST_C_COMPILER} ${HOST_CXX_COMPILER}")
+ endif()
+ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/host-toolchain.cmake.in ${CMAKE_BINARY_DIR}/host-toolchain.cmake @ONLY)
+ set(HOST_CMAKE_TOOLCHAIN_FILE ${CMAKE_BINARY_DIR}/host-toolchain.cmake)
+ endif()
+ else()
+ # For non-cross-compiling, use empty toolchain (use host compiler)
+ set(HOST_CMAKE_TOOLCHAIN_FILE "")
+ endif()
+
+ include(ExternalProject)
+
+ if (CMAKE_CROSSCOMPILING)
+ list(APPEND VULKAN_SHADER_GEN_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${HOST_CMAKE_TOOLCHAIN_FILE})
+ message(STATUS "vulkan-shaders-gen toolchain file: ${HOST_CMAKE_TOOLCHAIN_FILE}")
+ endif()
+
+ ExternalProject_Add(
+ vulkan-shaders-gen
+ SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders
+ CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/$<CONFIG>
+ -DCMAKE_INSTALL_BINDIR=.
+ -DCMAKE_BUILD_TYPE=$<CONFIG>
+ ${VULKAN_SHADER_GEN_CMAKE_ARGS}
+
+ BUILD_COMMAND ${CMAKE_COMMAND} --build . --config $<CONFIG>
+
+ # NOTE: When DESTDIR is set using Makefile generators and
+ # "make install" triggers the build step, vulkan-shaders-gen
+ # would be installed into the DESTDIR prefix, so it is unset
+ # to ensure that does not happen.
+
+ INSTALL_COMMAND ${CMAKE_COMMAND} -E env --unset=DESTDIR
+ ${CMAKE_COMMAND} --install . --config $<CONFIG>
+ )
+
+ set (_ggml_vk_host_suffix $<IF:$<STREQUAL:${CMAKE_HOST_SYSTEM_NAME},Windows>,.exe,>)
+ set (_ggml_vk_genshaders_dir "${CMAKE_BINARY_DIR}/$<CONFIG>")
+ set (_ggml_vk_genshaders_cmd "${_ggml_vk_genshaders_dir}/vulkan-shaders-gen${_ggml_vk_host_suffix}")
+ set (_ggml_vk_header "${CMAKE_CURRENT_BINARY_DIR}/ggml-vulkan-shaders.hpp")
+ set (_ggml_vk_source "${CMAKE_CURRENT_BINARY_DIR}/ggml-vulkan-shaders.cpp")
+ set (_ggml_vk_input_dir "${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders")
+ set (_ggml_vk_output_dir "${CMAKE_CURRENT_BINARY_DIR}/vulkan-shaders.spv")
+
+ file(GLOB _ggml_vk_shader_files CONFIGURE_DEPENDS "${_ggml_vk_input_dir}/*.comp")
+
+ add_custom_command(
+ OUTPUT ${_ggml_vk_header}
+ ${_ggml_vk_source}
+
+ COMMAND ${_ggml_vk_genshaders_cmd}
+ --glslc ${Vulkan_GLSLC_EXECUTABLE}
+ --input-dir ${_ggml_vk_input_dir}
+ --output-dir ${_ggml_vk_output_dir}
+ --target-hpp ${_ggml_vk_header}
+ --target-cpp ${_ggml_vk_source}
+ --no-clean
+
+ DEPENDS ${_ggml_vk_shader_files}
+ ${_ggml_vk_shader_gens_sources}
+ vulkan-shaders-gen
+
+ COMMENT "Generate vulkan shaders"
+ )
set(GGML_HEADERS_VULKAN ${CMAKE_CURRENT_SOURCE_DIR}/../include/ggml-vulkan.h ${_ggml_vk_header})
set(GGML_SOURCES_VULKAN ggml-vulkan.cpp ${_ggml_vk_source})
diff --git a/ggml/src/ggml-backend.c b/ggml/src/ggml-backend.c
index 28850e0d..19dcb9bc 100644
--- a/ggml/src/ggml-backend.c
+++ b/ggml/src/ggml-backend.c
@@ -266,7 +266,7 @@ GGML_CALL void ggml_backend_tensor_get(const struct ggml_tensor * tensor, void *
#endif
}
-GGML_CALL void ggml_backend_tensor_memset(struct ggml_tensor* tensor, uint8_t value, size_t offset, size_t size) {
+static void ggml_backend_tensor_memset(struct ggml_tensor* tensor, uint8_t value, size_t offset, size_t size) {
ggml_backend_buffer_t buf = tensor->view_src ? tensor->view_src->buffer : tensor->buffer;
if (size == 0) {