config,
stdenv,
mkShell,
+ runCommand,
cmake,
ninja,
pkg-config,
# It's necessary to consistently use backendStdenv when building with CUDA support,
# otherwise we get libstdc++ errors downstream.
effectiveStdenv ? if useCuda then cudaPackages.backendStdenv else stdenv,
- enableStatic ? effectiveStdenv.hostPlatform.isStatic
+ enableStatic ? effectiveStdenv.hostPlatform.isStatic,
+ precompileMetalShaders ? false
}@inputs:
let
]
);
+ xcrunHost = runCommand "xcrunHost" {} ''
+ mkdir -p $out/bin
+ ln -s /usr/bin/xcrun $out/bin
+ '';
+
# apple_sdk is supposed to choose sane defaults, no need to handle isAarch64
# separately
darwinBuildInputs =
postPatch = ''
substituteInPlace ./ggml-metal.m \
--replace '[bundle pathForResource:@"ggml-metal" ofType:@"metal"];' "@\"$out/bin/ggml-metal.metal\";"
+ substituteInPlace ./ggml-metal.m \
+ --replace '[bundle pathForResource:@"default" ofType:@"metallib"];' "@\"$out/bin/default.metallib\";"
# TODO: Package up each Python script or service appropriately.
# If we were to migrate to buildPythonPackage and prepare the `pyproject.toml`,
substituteInPlace ./*.py --replace "/usr/bin/env python" "${llama-python}/bin/python"
'';
+ # With PR#6015 https://github.com/ggerganov/llama.cpp/pull/6015,
+ # `default.metallib` may be compiled with Metal compiler from XCode
+ # and we need to escape sandbox on MacOS to access Metal compiler.
+ # `xcrun` is used find the path of the Metal compiler, which is varible
+ # and not on $PATH
+ # see https://github.com/ggerganov/llama.cpp/pull/6118 for discussion
+ __noChroot = effectiveStdenv.isDarwin && useMetalKit && precompileMetalShaders;
+
nativeBuildInputs =
[
cmake
]
++ optionals (effectiveStdenv.hostPlatform.isGnu && enableStatic) [
glibc.static
+ ] ++ optionals (effectiveStdenv.isDarwin && useMetalKit && precompileMetalShaders) [
+ xcrunHost
];
buildInputs =
# Should likely use `rocmPackages.clr.gpuTargets`.
"-DAMDGPU_TARGETS=gfx803;gfx900;gfx906:xnack-;gfx908:xnack-;gfx90a:xnack+;gfx90a:xnack-;gfx940;gfx941;gfx942;gfx1010;gfx1012;gfx1030;gfx1100;gfx1101;gfx1102"
]
- ++ optionals useMetalKit [ (lib.cmakeFeature "CMAKE_C_FLAGS" "-D__ARM_FEATURE_DOTPROD=1") ];
+ ++ optionals useMetalKit [
+ (lib.cmakeFeature "CMAKE_C_FLAGS" "-D__ARM_FEATURE_DOTPROD=1")
+ (cmakeBool "LLAMA_METAL_EMBED_LIBRARY" (!precompileMetalShaders))
+ ];
# TODO(SomeoneSerge): It's better to add proper install targets at the CMake level,
# if they haven't been added yet.