llama.cpp b10932修复Clang预编译头时间戳导致的缓存构建失败
ggml-org发布的llama.cpp b10932在cmake中让Clang预编译头不再记录源文件修改时间,解决从其他checkout恢复缓存头后构建报错的问题,同时照例提供多平台预编译包。
AI解读:这条更新解决的是一个CI和本地缓存场景里的具体毛病:Clang会把预编译头所依赖源文件的修改时间写进头文件本身,一旦时间对不上,它就直接拒绝使用这个头文件,构建随之失败。
问题通常出现在缓存复用的时候。从一个checkout恢复出来的预编译头带着原仓库的时间戳,换到另一个checkout上时间自然对不上,于是构建报错。改动让cmake在clang下不再把时间戳写进预编译头。
受影响的主要是用ccache缓存编译结果、又用Clang系编译器的人。补丁覆盖的范围包括被ccache当作MSVC、实际底层是clang的编译器,以及clang-cl和Intel LLVM驱动。
对普通用户来说,这次发布本身没有模型或推理能力上的变化,价值集中在构建稳定性。仓库同时照常放出macOS、Linux、Windows、Android等平台的预编译包,直接下载使用的人基本不受这个修复影响。
llama.cpp发布b10932版本,其中一项cmake改动是让Clang的预编译头不再记录源文件修改时间(PR #28816)。
改动说明指出,Clang会把预编译头所依赖源文件的修改时间存进头文件内部,一旦时间不一致,Clang就会拒绝使用该头文件。
当一个缓存的头文件从另一个checkout恢复时,它携带的是那个checkout的时间戳,因此在当前构建中会导致失败。
新选项覆盖的编译器范围,是ccache视为MSVC、但底层实为clang的那些编译器,以及clang-cl和Intel LLVM驱动。
该版本照例提供各平台预编译产物,包括macOS(arm64、x64)、iOS XCFramework、Linux(Ubuntu x64/arm64/s390x,含CPU、Vulkan、ROCm 10.0、OpenVINO 2026.3.1、SYCL FP32/FP16)、Android arm64、Windows(CPU、OpenCL Adreno、CUDA 12.4/13.3/13.4、Vulkan、OpenVINO、SYCL、ROCm 10.0)以及UI包。
macOS arm64的KleidiAI版本标注为DISABLED,openEuler相关产物同样标注为DISABLED。
被修复的缓存构建问题
根据b10932的发布说明,Clang将预编译头所依赖源文件的修改时间保存在头文件内部,并在这些时间不一致时拒绝使用该头文件。当一个缓存的头文件从另一个checkout恢复时,它带着那次checkout的时间戳,构建因此失败。
cmake的改动是在clang下不把时间戳写进预编译头,从而避免这类因时间戳不一致导致的构建失败。
- PR编号:#28816
- 问题触发条件:缓存恢复的预编译头携带原checkout的时间戳
- 改动效果:clang下预编译头不再包含源文件修改时间
覆盖的编译器范围
发布说明写明,该选项覆盖ccache归类为MSVC、但底层实际是clang的编译器,此外还包括clang-cl和Intel LLVM驱动。
- ccache视为MSVC的clang系编译器
- clang-cl
- Intel LLVM驱动
该版本提供的预编译产物
b10932照常附带多平台二进制包与UI包,便于不自行编译的用户直接下载。列表显示部分产物处于禁用状态。
- macOS Apple Silicon (arm64);macOS Apple Silicon (arm64, 启用KleidiAI) 标注为DISABLED
- macOS Intel (x64);iOS XCFramework
- Linux:Ubuntu x64/arm64/s390x(CPU)、Vulkan(x64/arm64)、ROCm 10.0、OpenVINO 2026.3.1、SYCL FP32与FP16
- Android arm64 (CPU)
- Windows:x64/arm64 CPU、arm64 OpenCL Adreno、CUDA 12.4/13.3/13.4、Vulkan、OpenVINO 2026.3.1、SYCL、ROCm 10.0
- openEuler产物标注为DISABLED;UI包单独提供