{ lib, # Build skeleton: nixpkgs' own llama-cpp derivation (b-tag layout, cmake/npm # plumbing), retargeted at the pinned tag below. llama-cpp, fetchFromGitHub, rocmPackages, # nixpkgs-latest's nodejs/npm hooks: referenced only to strip them from # nativeBuildInputs (the npm/web UI build is disabled below). nodejs_latest, npmHooks, # Strix Halo (Radeon 8060S). clr/rocBLAS/hipBLAS come prefixed for this arch # by the scoped rocmPackages in ./default.nix. rocmGpuTargets ? [ "gfx1151" ], }: let # Upstream release tag. Bump with: # nix flake prefetch github:ggml-org/llama.cpp/b # then update buildNumber and the src hash. buildNumber = "9645"; # HIP flags from the llm-engine.nix bring-up config. The -I paths for # hipBLASLt/rocWMMA are dropped because this tag's HIP backend links # hipBLAS/rocBLAS only; GGML_HIPBLASLT and GGML_CUDA_ENABLE_UNIFIED_MEMORY # are also unused by b9645 (cmake warns and ignores them). hipFlags = lib.concatStringsSep " " [ "-mllvm" "-amdgpu-early-inline-all=true" "-mllvm" "-amdgpu-function-calls=false" "-mprefer-vector-width=512" "-famd-opt" "-mllvm" "-inline-threshold=600" "-mllvm" "-unroll-threshold=150" ]; in (llama-cpp.override { inherit rocmPackages rocmGpuTargets; rocmSupport = true; vulkanSupport = true; cudaSupport = false; }).overrideAttrs (old: { version = buildNumber; src = fetchFromGitHub { owner = "ggml-org"; repo = "llama.cpp"; tag = "b${buildNumber}"; # Tarball hash (this tag has no submodules). hash = "sha256-ntRwfI2/yVqi3QjQfO0ZajMFSD8r/6XPiuy0X2BhwVk="; }; # The embedded web UI is disabled via cmakeFlags, so none of the npm # machinery is needed: no dependency tree, and npmConfigHook hard-fails # when npmDeps is null, so it (and nodejs) must come off the inputs. npmDeps = null; npmRoot = null; npmDepsHash = null; nativeBuildInputs = builtins.filter (x: x != nodejs_latest && x != npmHooks.npmConfigHook) ( old.nativeBuildInputs or [ ] ); # The release tarball has no .git; upstream wants the build id in COMMIT. postPatch = '' echo ${buildNumber} > COMMIT ''; # Replaces the base derivation's npm build step. CMAKE_HIP_FLAGS holds # several space-separated flags, so it must be appended as an array element: # plain cmakeFlags scalars are word-split by the cmake hook. preConfigure = '' prependToVar cmakeFlags "-DLLAMA_BUILD_COMMIT:STRING=$(cat COMMIT)" cmakeFlagsArray+=("-DCMAKE_HIP_FLAGS=${hipFlags}") ''; cmakeFlags = builtins.filter (f: !(builtins.isString f && builtins.match ".*LLAMA_BUILD_NUMBER.*" f != null)) ( old.cmakeFlags or [ ] ) ++ [ "-DCMAKE_C_FLAGS=-march=znver5" "-DCMAKE_CXX_FLAGS=-march=znver5" "-DGGML_CPU=ON" "-DGGML_AVX=ON" "-DGGML_AVX_VNNI=ON" "-DGGML_AVX2=ON" "-DGGML_BMI2=ON" "-DGGML_AVX512=ON" "-DGGML_AVX512_VNNI=ON" "-DGGML_AVX512_VBMI=ON" "-DGGML_AVX512_BF16=ON" "-DGGML_FMA=ON" "-DGGML_F16C=ON" "-DHIP_PLATFORM=amd" "-DGGML_CUDA_FORCE_CUBLAS=OFF" "-DGGML_HIPBLASLT=ON" "-DGGML_HIP_NO_VMM=ON" "-DGGML_HIP_GRAPHS=ON" "-DGGML_CUDA_ENABLE_UNIFIED_MEMORY=ON" "-DGGML_HIP_ROCWMMA_FATTN=OFF" "-DGGML_HIP_MMQ_MFMA=ON" "-DGGML_CUDA_FA_ALL_QUANTS=ON" "-DCMAKE_BUILD_TYPE=Release" "-DLLAMA_BUILD_NUMBER:STRING=${buildNumber}" (lib.cmakeBool "LLAMA_BUILD_UI" false) (lib.cmakeBool "LLAMA_USE_PREBUILT_UI" false) ]; # The base's update script tracks nixpkgs' llama-cpp attr, not this pin. passthru = builtins.removeAttrs (old.passthru or { }) [ "updateScript" ] // { category = "AI Inference"; }; })