-
Notifications
You must be signed in to change notification settings - Fork 12.4k
nix: make xcrun
visible in Nix sandbox for precompiling Metal shaders
#6118
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,6 +4,7 @@ | |
config, | ||
stdenv, | ||
mkShell, | ||
runCommand, | ||
cmake, | ||
ninja, | ||
pkg-config, | ||
|
@@ -35,7 +36,8 @@ | |
# 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 | ||
|
@@ -87,6 +89,11 @@ 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 = | ||
|
@@ -150,13 +157,23 @@ effectiveStdenv.mkDerivation ( | |
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`, | ||
# we could make those *.py into setuptools' entrypoints | ||
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 | ||
|
@@ -173,6 +190,8 @@ effectiveStdenv.mkDerivation ( | |
] | ||
++ optionals (effectiveStdenv.hostPlatform.isGnu && enableStatic) [ | ||
glibc.static | ||
] ++ optionals (effectiveStdenv.isDarwin && useMetalKit && precompileMetalShaders) [ | ||
xcrunHost | ||
]; | ||
|
||
buildInputs = | ||
|
@@ -217,7 +236,10 @@ effectiveStdenv.mkDerivation ( | |
# 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") | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I was going to mention this before and now that there's a merge conflict I have a reason to: multiple There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Are there any other uses of Right now, thinking of something like
Which would allow other backends to configure There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
I thought that was the merge conflict? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I guess I was confused, it must've been just a change in formatting There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ah, good to know about that variable. Merge conflict was from the following line (blas support) being deleted in master, likely a merge conflict line since I split the preceding line onto two lines |
||
(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. | ||
|
Uh oh!
There was an error while loading. Please reload this page.