|
|
@@ -1,5 +1,6 @@
|
|
|
|
{
|
|
|
|
{
|
|
|
|
lib,
|
|
|
|
lib,
|
|
|
|
|
|
|
|
pkgs,
|
|
|
|
autoAddDriverRunpath,
|
|
|
|
autoAddDriverRunpath,
|
|
|
|
cmake,
|
|
|
|
cmake,
|
|
|
|
fetchFromGitHub,
|
|
|
|
fetchFromGitHub,
|
|
|
@@ -35,8 +36,8 @@
|
|
|
|
llama-cpp,
|
|
|
|
llama-cpp,
|
|
|
|
shaderc,
|
|
|
|
shaderc,
|
|
|
|
vulkan-headers,
|
|
|
|
vulkan-headers,
|
|
|
|
vulkan-loader,
|
|
|
|
|
|
|
|
hexagon-sdk,
|
|
|
|
hexagon-sdk,
|
|
|
|
|
|
|
|
vulkan-loader,
|
|
|
|
ninja,
|
|
|
|
ninja,
|
|
|
|
}:
|
|
|
|
}:
|
|
|
|
|
|
|
|
|
|
|
@@ -44,7 +45,14 @@ let
|
|
|
|
# It's necessary to consistently use backendStdenv when building with CUDA support,
|
|
|
|
# It's necessary to consistently use backendStdenv when building with CUDA support,
|
|
|
|
# otherwise we get libstdc++ errors downstream.
|
|
|
|
# otherwise we get libstdc++ errors downstream.
|
|
|
|
# cuda imposes an upper bound on the gcc version
|
|
|
|
# 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)
|
|
|
|
inherit (lib)
|
|
|
|
cmakeBool
|
|
|
|
cmakeBool
|
|
|
|
cmakeFeature
|
|
|
|
cmakeFeature
|
|
|
@@ -72,16 +80,20 @@ let
|
|
|
|
vulkan-headers
|
|
|
|
vulkan-headers
|
|
|
|
vulkan-loader
|
|
|
|
vulkan-loader
|
|
|
|
];
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hexagonBuildInputs = [
|
|
|
|
|
|
|
|
hexagon-sdk
|
|
|
|
|
|
|
|
];
|
|
|
|
in
|
|
|
|
in
|
|
|
|
effectiveStdenv.mkDerivation (finalAttrs: {
|
|
|
|
effectiveStdenv.mkDerivation (finalAttrs: {
|
|
|
|
pname = "llama-cpp";
|
|
|
|
pname = "llama-cpp";
|
|
|
|
version = "6981";
|
|
|
|
version = "8871";
|
|
|
|
|
|
|
|
|
|
|
|
src = fetchFromGitHub {
|
|
|
|
src = fetchFromGitHub {
|
|
|
|
owner = "ggml-org";
|
|
|
|
owner = "ggml-org";
|
|
|
|
repo = "llama.cpp";
|
|
|
|
repo = "llama.cpp";
|
|
|
|
tag = "b${finalAttrs.version}";
|
|
|
|
tag = "b${finalAttrs.version}";
|
|
|
|
hash = "sha256-0WtiHDlMeb+m2XcMwkPFY1mtwVTwRJUoxQSwzpiRbts=";
|
|
|
|
hash = "sha256-dSMomkkG3YFwXAcYTym6Z03u8ZAWFFio8jdQJPMJ/yg=";
|
|
|
|
leaveDotGit = true;
|
|
|
|
leaveDotGit = true;
|
|
|
|
postFetch = ''
|
|
|
|
postFetch = ''
|
|
|
|
git -C "$out" rev-parse --short HEAD > $out/COMMIT
|
|
|
|
git -C "$out" rev-parse --short HEAD > $out/COMMIT
|
|
|
@@ -91,8 +103,10 @@ effectiveStdenv.mkDerivation (finalAttrs: {
|
|
|
|
|
|
|
|
|
|
|
|
nativeBuildInputs = [
|
|
|
|
nativeBuildInputs = [
|
|
|
|
cmake
|
|
|
|
cmake
|
|
|
|
|
|
|
|
pkgs.clang
|
|
|
|
ninja
|
|
|
|
ninja
|
|
|
|
pkg-config
|
|
|
|
pkg-config
|
|
|
|
|
|
|
|
blas
|
|
|
|
]
|
|
|
|
]
|
|
|
|
++ optionals cudaSupport [
|
|
|
|
++ optionals cudaSupport [
|
|
|
|
cudaPackages.cuda_nvcc
|
|
|
|
cudaPackages.cuda_nvcc
|
|
|
@@ -105,7 +119,10 @@ effectiveStdenv.mkDerivation (finalAttrs: {
|
|
|
|
++ optionals rocmSupport rocmBuildInputs
|
|
|
|
++ optionals rocmSupport rocmBuildInputs
|
|
|
|
++ optionals blasSupport [ blas ]
|
|
|
|
++ optionals blasSupport [ blas ]
|
|
|
|
++ optionals vulkanSupport vulkanBuildInputs
|
|
|
|
++ optionals vulkanSupport vulkanBuildInputs
|
|
|
|
++ [ curl ];
|
|
|
|
++ optionals hexagonSupport hexagonBuildInputs
|
|
|
|
|
|
|
|
++ [
|
|
|
|
|
|
|
|
curl
|
|
|
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
|
|
preConfigure = ''
|
|
|
|
preConfigure = ''
|
|
|
|
prependToVar cmakeFlags "-DLLAMA_BUILD_COMMIT:STRING=$(cat COMMIT)"
|
|
|
|
prependToVar cmakeFlags "-DLLAMA_BUILD_COMMIT:STRING=$(cat COMMIT)"
|
|
|
@@ -146,9 +163,17 @@ effectiveStdenv.mkDerivation (finalAttrs: {
|
|
|
|
(cmakeBool "CMAKE_SKIP_BUILD_RPATH" true)
|
|
|
|
(cmakeBool "CMAKE_SKIP_BUILD_RPATH" true)
|
|
|
|
]
|
|
|
|
]
|
|
|
|
++ optionals hexagonSupport [
|
|
|
|
++ 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 "GGML_HEXAGON_FP32_QUANTIZE_GROUP_SIZE" "128")
|
|
|
|
(cmakeFeature "HEXAGON_SDK_ROOT" "${hexagon-sdk}/opt/hexagon")
|
|
|
|
(cmakeFeature "HEXAGON_SDK_ROOT" "${hexagon-sdk}/opt")
|
|
|
|
(cmakeFeature "HEXAGON_TOOLS_ROOT" "${hexagon-sdk}/opt/hexagon/tools/HEXAGON_Tools/19.0.04")
|
|
|
|
(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
|
|
|
|
# upstream plans on adding targets at the cmakelevel, remove those
|
|
|
@@ -190,9 +215,9 @@ effectiveStdenv.mkDerivation (finalAttrs: {
|
|
|
|
xddxdd
|
|
|
|
xddxdd
|
|
|
|
];
|
|
|
|
];
|
|
|
|
platforms = lib.platforms.unix;
|
|
|
|
platforms = lib.platforms.unix;
|
|
|
|
badPlatforms = optionals (cudaSupport || openclSupport) lib.platforms.darwin (
|
|
|
|
badPlatforms = optionals (cudaSupport || openclSupport) lib.platforms.darwin;
|
|
|
|
hexagonSupport && !effectiveStdenv.hostPlatform.aarch64-linux
|
|
|
|
broken =
|
|
|
|
);
|
|
|
|
(metalSupport && !effectiveStdenv.hostPlatform.isDarwin)
|
|
|
|
broken = metalSupport && !effectiveStdenv.hostPlatform.isDarwin;
|
|
|
|
|| (hexagonSupport && !effectiveStdenv.hostPlatform.isAarch64);
|
|
|
|
};
|
|
|
|
};
|
|
|
|
})
|
|
|
|
})
|
|
|
|