s390x build can not find quants.c

用户在 openSUSE Factory 的 s390x (zSystems) 平台上执行 Ollama v0.24.0 构建流程时触发。具体操作是通过 osc build 或在构建服务(如 build.opensuse.org)上执行 RPM 构建。

s390x build can not find quants.c

s390x build can not find quants.c

快速结论:此报错发生在对 s390x 架构编译 Ollama 0.24.0 版本时,CMake 找不到 ggml-cpu/arch/s390/quants.ccpu-feats.cpp 源文件。优先排查:检查 Ollama 仓库中 ml/backend/ggml/ggml/src/ggml-cpu/arch/s390/ 目录是否存在这两个源文件。此处 CMAKE 脚本已添加 s390x 后端变体定义,但实际源文件未提交。

问题场景

用户在 openSUSE Factory 的 s390x (zSystems) 平台上执行 Ollama v0.24.0 构建流程时触发。具体操作是通过 osc build 或在构建服务(如 build.opensuse.org)上执行 RPM 构建。

报错原文

CMake Error at ml/backend/ggml/ggml/src/ggml-cpu/CMakeLists.txt:663 (target_sources):
  Cannot find source file:

    ggml-cpu/arch/s390/quants.c

CMake Error at ml/backend/ggml/ggml/src/ggml-cpu/CMakeLists.txt:7 (add_library):
  Cannot find source file:

    ggml-cpu/arch/s390/cpu-feats.cpp

CMake Error at ml/backend/ggml/ggml/src/CMakeLists.txt:251 (add_library):
  No SOURCES given to target: ggml-cpu-z15

CMake Error at ml/backend/ggml/ggml/src/ggml-cpu/CMakeLists.txt:7 (add_library):
  No SOURCES given to target: ggml-cpu-z15-feats

CMake Error at ml/backend/ggml/ggml/src/CMakeLists.txt:251 (add_library):
  No SOURCES given to target: ggml-cpu-z16

CMake Error at ml/backend/ggml/ggml/src/ggml-cpu/CMakeLists.txt:7 (add_library):
  No SOURCES given to target: ggml-cpu-z16-feats

CMake Generate step failed.  Build files cannot be regenerated correctly.

原因分析

可能原因:上游 ggml 项目(ggml-org/ggml)的 s390 架构后端源码(quants.ccpu-feats.cpp)在 Ollama 仓库中被遗漏了。Ollama 0.24.0 的 CMakeLists.txt 已通过 ggml_add_cpu_backend_variant_implggml_add_cpu_backend_features 函数为 s390x(Z15/Z16)注册了 CPU 后端变体和功能特性,调用 target_sourcesadd_library 时引用了这些文件,但实际上源文件并未从 ggml 项目同步到 Ollama 仓库的相应路径下。另一种可能原因是:s390x 支持尚在开发中(相关源文件在 ggml 仓库中已存在,但 Ollama 的 vendor 过程未正确拷贝)。

环境排查

  • 确认构建平台架构:uname -m 是否返回 s390x
  • 确认 Ollama 版本:ollama --version 是否显示 0.24.0(该问题在 0.24.0 中报告)
  • 检查 ggml 子模块/供应商目录:ls ml/backend/ggml/ggml/src/ggml-cpu/arch/s390/ 是否为空
  • 检查上游 ggml 项目:https://github.com/ggml-org/ggml/tree/master/src/ggml-cpu/arch/s390 是否存在 quants.ccpu-feats.cpp
  • 注意:Ollama 从 0.30.0 版本开始切换了 llama.cpp 引擎的集成方式,quants.c 会在基础源码中包含,但官方未在 s390x 上测试过 0.30.0 的构建。

解决步骤

  1. 临时 CMake 保护(可优先尝试):ml/backend/ggml/ggml/src/ggml-cpu/CMakeLists.txt 中,于 s390 相关源文件引用位置前增加条件检查。如果 arch/s390/quants.c 不存在,则跳过 s390 后端变体的构建,打印警告而非硬性报错。示例逻辑(来自 Issue 评论建议):
    if(CMAKE_SYSTEM_PROCESSOR MATCHES "s390x")
      if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/ggml-cpu/arch/s390/quants.c")
        message(WARNING "s390x source files missing, skipping s390 backend variants")
        return()
      endif()
    endif()
  2. 从上游 ggml 导入缺失源文件:ggml-org/ggml/src/ggml-cpu/arch/s390 下载 quants.ccpu-feats.cpp,放入 Ollama 仓库的 ml/backend/ggml/ggml/src/ggml-cpu/arch/s390/ 目录,然后重新构建。
  3. 升级 Ollama 版本:尝试升级至 0.30.0 或更高版本(官方指出 0.30.0 版本改用新的引擎集成,quants.c 包含在基础源码中——但请注意官方并未在 s390x 实际测试该版本)。
  4. 如果仍希望使用 0.24.0 且在 z15 大型机环境中,将上述 CMake 保护补丁应用到本地构建脚本(如 RPM spec 或 Dockerfile)中,使构建继续。

验证方法

重新运行 CMake 配置/构建流程,确认不再出现 Cannot find source file: ggml-cpu/arch/s390/quants.cNo SOURCES given to target 等 CMake 错误。最终验证通过 cmake --build . --target ollama 成功生成二进制文件,并尝试在 s390x 机器上执行 ollama serveollama run 是否正确启动。

参考来源

ollama/ollama #16318

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 7744

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注