Compare commits
2
Commits
1228969d80
...
0188aff399
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0188aff399
|
||
|
|
34974204db
|
@@ -0,0 +1,6 @@
|
||||
{ llama-cpp }:
|
||||
|
||||
llama-cpp.override {
|
||||
hexagonSupport = true;
|
||||
blasSupport = false;
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
autoAddDriverRunpath,
|
||||
cmake,
|
||||
fetchFromGitHub,
|
||||
@@ -35,8 +36,8 @@
|
||||
llama-cpp,
|
||||
shaderc,
|
||||
vulkan-headers,
|
||||
vulkan-loader,
|
||||
hexagon-sdk,
|
||||
vulkan-loader,
|
||||
ninja,
|
||||
}:
|
||||
|
||||
@@ -44,7 +45,14 @@ let
|
||||
# It's necessary to consistently use backendStdenv when building with CUDA support,
|
||||
# otherwise we get libstdc++ errors downstream.
|
||||
# cuda imposes an upper bound on the gcc version
|
||||
effectiveStdenv = if cudaSupport then cudaPackages.backendStdenv else stdenv;
|
||||
buildPkgs = import pkgs.path {
|
||||
system = "x86_64-linux"; # builder uses x86_64
|
||||
};
|
||||
|
||||
# hexagon needs a x86 build env
|
||||
crossPkgs = buildPkgs.pkgsCross.aarch64-multiplatform;
|
||||
|
||||
effectiveStdenv = if hexagonSupport then crossPkgs.stdenv else stdenv;
|
||||
inherit (lib)
|
||||
cmakeBool
|
||||
cmakeFeature
|
||||
@@ -72,16 +80,20 @@ let
|
||||
vulkan-headers
|
||||
vulkan-loader
|
||||
];
|
||||
|
||||
hexagonBuildInputs = [
|
||||
hexagon-sdk
|
||||
];
|
||||
in
|
||||
effectiveStdenv.mkDerivation (finalAttrs: {
|
||||
pname = "llama-cpp";
|
||||
version = "6981";
|
||||
version = "8871";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "ggml-org";
|
||||
repo = "llama.cpp";
|
||||
tag = "b${finalAttrs.version}";
|
||||
hash = "sha256-0WtiHDlMeb+m2XcMwkPFY1mtwVTwRJUoxQSwzpiRbts=";
|
||||
hash = "sha256-dSMomkkG3YFwXAcYTym6Z03u8ZAWFFio8jdQJPMJ/yg=";
|
||||
leaveDotGit = true;
|
||||
postFetch = ''
|
||||
git -C "$out" rev-parse --short HEAD > $out/COMMIT
|
||||
@@ -91,8 +103,10 @@ effectiveStdenv.mkDerivation (finalAttrs: {
|
||||
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
pkgs.clang
|
||||
ninja
|
||||
pkg-config
|
||||
blas
|
||||
]
|
||||
++ optionals cudaSupport [
|
||||
cudaPackages.cuda_nvcc
|
||||
@@ -105,7 +119,10 @@ effectiveStdenv.mkDerivation (finalAttrs: {
|
||||
++ optionals rocmSupport rocmBuildInputs
|
||||
++ optionals blasSupport [ blas ]
|
||||
++ optionals vulkanSupport vulkanBuildInputs
|
||||
++ [ curl ];
|
||||
++ optionals hexagonSupport hexagonBuildInputs
|
||||
++ [
|
||||
curl
|
||||
];
|
||||
|
||||
preConfigure = ''
|
||||
prependToVar cmakeFlags "-DLLAMA_BUILD_COMMIT:STRING=$(cat COMMIT)"
|
||||
@@ -146,9 +163,17 @@ effectiveStdenv.mkDerivation (finalAttrs: {
|
||||
(cmakeBool "CMAKE_SKIP_BUILD_RPATH" true)
|
||||
]
|
||||
++ optionals hexagonSupport [
|
||||
# (cmakeFeature "CMAKE_TOOLCHAIN_FILE" "${finalAttrs.src}/cmake/arm64-linux-clang.cmake")
|
||||
(cmakeFeature "CMAKE_C_FLAGS" "-D__ARM_FEATURE_DOTPROD=1")
|
||||
(cmakeFeature "CMAKE_CXX_FLAGS" "")
|
||||
(cmakeBool "GGML_OPENMP" false)
|
||||
(cmakeBool "GGML_LLAMAFILE" false)
|
||||
(cmakeFeature "GGML_OPENCL" "OFF")
|
||||
(cmakeFeature "PREBUILT_LIB_DIR" "linux_aarch64")
|
||||
(cmakeFeature "GGML_HEXAGON_FP32_QUANTIZE_GROUP_SIZE" "128")
|
||||
(cmakeFeature "HEXAGON_SDK_ROOT" "${hexagon-sdk}/opt/hexagon")
|
||||
(cmakeFeature "HEXAGON_TOOLS_ROOT" "${hexagon-sdk}/opt/hexagon/tools/HEXAGON_Tools/19.0.04")
|
||||
(cmakeFeature "HEXAGON_SDK_ROOT" "${hexagon-sdk}/opt")
|
||||
(cmakeFeature "HEXAGON_TOOLS_ROOT" "${hexagon-sdk}/opt/tools/HEXAGON_Tools/19.0.04")
|
||||
(cmakeFeature "LLAMA_OPENSSL" "OFF")
|
||||
];
|
||||
|
||||
# upstream plans on adding targets at the cmakelevel, remove those
|
||||
@@ -190,9 +215,9 @@ effectiveStdenv.mkDerivation (finalAttrs: {
|
||||
xddxdd
|
||||
];
|
||||
platforms = lib.platforms.unix;
|
||||
badPlatforms = optionals (cudaSupport || openclSupport) lib.platforms.darwin (
|
||||
hexagonSupport && !effectiveStdenv.hostPlatform.aarch64-linux
|
||||
);
|
||||
broken = metalSupport && !effectiveStdenv.hostPlatform.isDarwin;
|
||||
badPlatforms = optionals (cudaSupport || openclSupport) lib.platforms.darwin;
|
||||
broken =
|
||||
(metalSupport && !effectiveStdenv.hostPlatform.isDarwin)
|
||||
|| (hexagonSupport && !effectiveStdenv.hostPlatform.isAarch64);
|
||||
};
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user