aboutsummaryrefslogtreecommitdiff
path: root/flake.nix
diff options
context:
space:
mode:
Diffstat (limited to 'flake.nix')
-rw-r--r--flake.nix26
1 files changed, 18 insertions, 8 deletions
diff --git a/flake.nix b/flake.nix
index 2c9edbb..6191004 100644
--- a/flake.nix
+++ b/flake.nix
@@ -6,6 +6,13 @@
outputs = { self, nixpkgs, flake-utils }:
flake-utils.lib.eachDefaultSystem (system:
let
+ inherit (pkgs.stdenv) isAarch64 isDarwin;
+ inherit (pkgs.lib) optionals;
+ isM1 = isAarch64 && isDarwin;
+ osSpecific =
+ if isM1 then with pkgs.darwin.apple_sdk_11_0.frameworks; [ Accelerate MetalKit MetalPerformanceShaders MetalPerformanceShadersGraph ]
+ else if isDarwin then with pkgs.darwin.apple_sdk.frameworks; [ Accelerate CoreGraphics CoreVideo ]
+ else [ ];
pkgs = import nixpkgs {
inherit system;
};
@@ -18,17 +25,22 @@
packages.default = pkgs.stdenv.mkDerivation {
name = "llama.cpp";
src = ./.;
+ postPatch =
+ if isM1 then ''
+ substituteInPlace ./ggml-metal.m \
+ --replace '[[NSBundle mainBundle] pathForResource:@"ggml-metal" ofType:@"metal"];' "@\"$out/ggml-metal.metal\";"
+ '' else "";
nativeBuildInputs = with pkgs; [ cmake ];
- buildInputs = with pkgs; lib.optionals stdenv.isDarwin [
- darwin.apple_sdk.frameworks.Accelerate
- ];
- cmakeFlags = with pkgs; lib.optionals (system == "aarch64-darwin") [
+ buildInputs = osSpecific;
+ cmakeFlags = [ "-DLLAMA_BUILD_SERVER=ON" ] ++ (optionals isM1 [
"-DCMAKE_C_FLAGS=-D__ARM_FEATURE_DOTPROD=1"
- ];
+ "-DLLAMA_METAL=ON"
+ ]);
installPhase = ''
mkdir -p $out/bin
mv bin/* $out/bin/
mv $out/bin/main $out/bin/llama
+ mv $out/bin/server $out/bin/llama-server
echo "#!${llama-python}/bin/python" > $out/bin/convert.py
cat ${./convert.py} >> $out/bin/convert.py
@@ -40,9 +52,7 @@
packages = with pkgs; [
cmake
llama-python
- ] ++ lib.optionals stdenv.isDarwin [
- darwin.apple_sdk.frameworks.Accelerate
- ];
+ ] ++ osSpecific;
};
}
);