762 lines
27 KiB
Nix
762 lines
27 KiB
Nix
final: prev:
|
|
let
|
|
winePkg = final.wineWow64Packages.full;
|
|
sccacheLib = import ./sccache.nix { inherit final prev; };
|
|
inherit (sccacheLib)
|
|
sandboxSccacheDir
|
|
sharedSccacheConfig
|
|
sccacheRuntimeModeSetup
|
|
mkSccacheLauncher
|
|
mkBuildSccacheAttrs
|
|
mkCmakeSccacheAttrs
|
|
mkCmakeSccacheWithLlvmTargetAttrs
|
|
mkSccacheExtraConfig
|
|
;
|
|
versionBumpAttrs =
|
|
oldVersion: version: attrs:
|
|
if final.lib.versionOlder oldVersion version then attrs else { };
|
|
modify =
|
|
target: f:
|
|
if target ? overridePythonAttrs then
|
|
target.overridePythonAttrs f
|
|
else if target ? overrideAttrs then
|
|
target.overrideAttrs f
|
|
else if target ? overrideScope then
|
|
target.overrideScope f
|
|
else
|
|
throw "modify: target does not support overridePythonAttrs, overrideAttrs, or overrideScope";
|
|
mkRealCompilerBasePath =
|
|
{
|
|
name,
|
|
toolchain,
|
|
}:
|
|
final.runCommand name { } ''
|
|
resolve_orig_cc_root() {
|
|
local current_root="$1"
|
|
local next_root
|
|
|
|
while [ -r "$current_root/nix-support/orig-cc" ]; do
|
|
next_root="$(tr -d '\n' < "$current_root/nix-support/orig-cc")"
|
|
if [ -z "$next_root" ] || [ "$next_root" = "$current_root" ]; then
|
|
break
|
|
fi
|
|
current_root="$next_root"
|
|
done
|
|
|
|
printf '%s\n' "$current_root"
|
|
}
|
|
|
|
wrapped_clang="$(readlink -f ${toolchain}/bin/clang)"
|
|
wrapped_root="$(dirname "$(dirname "$wrapped_clang")")"
|
|
orig_cc_root="$(resolve_orig_cc_root "$wrapped_root")"
|
|
|
|
if [ -z "$orig_cc_root" ] || [ ! -d "$orig_cc_root/bin" ]; then
|
|
echo "mkRealCompilerBasePath: invalid orig-cc root: $orig_cc_root" >&2
|
|
exit 1
|
|
fi
|
|
if [ ! -x "$orig_cc_root/bin/clang" ] || [ ! -x "$orig_cc_root/bin/clang++" ]; then
|
|
echo "mkRealCompilerBasePath: clang or clang++ missing in $orig_cc_root/bin" >&2
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p "$out/bin"
|
|
|
|
for executable in ${toolchain}/bin/*; do
|
|
executable_name="$(basename "$executable")"
|
|
case "$executable_name" in
|
|
clang|clang++|cc|c++)
|
|
continue
|
|
;;
|
|
esac
|
|
ln -s "$executable" "$out/bin/$executable_name"
|
|
done
|
|
|
|
ln -s "$orig_cc_root/bin/clang" "$out/bin/clang"
|
|
ln -s "$orig_cc_root/bin/clang++" "$out/bin/clang++"
|
|
ln -s clang "$out/bin/cc"
|
|
ln -s clang++ "$out/bin/c++"
|
|
|
|
for path in ${toolchain}/*; do
|
|
path_name="$(basename "$path")"
|
|
if [ "$path_name" != bin ]; then
|
|
ln -s "$path" "$out/$path_name"
|
|
fi
|
|
done
|
|
'';
|
|
in
|
|
sccacheLib.overlay
|
|
// {
|
|
intel-sycl = modify prev.intel-sycl (
|
|
syFinal: syPrev:
|
|
let
|
|
llvmTargetForHost =
|
|
if syFinal.stdenv.hostPlatform.isx86_64 || syFinal.stdenv.hostPlatform.isi686 then
|
|
"X86"
|
|
else if syFinal.stdenv.hostPlatform.isAarch64 then
|
|
"AArch64"
|
|
else if syFinal.stdenv.hostPlatform.isRiscV64 then
|
|
"RISCV"
|
|
else if syFinal.stdenv.hostPlatform.isPower64 then
|
|
"PowerPC"
|
|
else
|
|
"Native";
|
|
sccacheWrappedDpcpp = final.sccache.links {
|
|
unwrappedCC = syFinal.dpcpp-compat;
|
|
extraConfig = mkSccacheExtraConfig { };
|
|
};
|
|
sccacheWrappedCompatStdenv = final.overrideCC syPrev.compatStdenv sccacheWrappedDpcpp;
|
|
# Inject sccache into stdenv without wrapping the compiler
|
|
# (avoids sccache-links-wrapper depending on intel-llvm-nightly directly)
|
|
sccacheStdenv = syPrev.stdenv.override (old: {
|
|
extraNativeBuildInputs = (old.extraNativeBuildInputs or [ ]) ++ [ final.sccache ];
|
|
preHook = (old.preHook or "") + ''
|
|
export SCCACHE_CONF=${final.lib.escapeShellArg sharedSccacheConfig}
|
|
${final.coreutils}/bin/mkdir -p ${final.lib.escapeShellArg sandboxSccacheDir}
|
|
export RUSTC_WRAPPER="${final.sccache}/bin/sccache"
|
|
'';
|
|
});
|
|
in
|
|
{
|
|
llvm = modify syPrev.llvm (mkCmakeSccacheWithLlvmTargetAttrs llvmTargetForHost);
|
|
lld = modify syPrev.lld (mkCmakeSccacheWithLlvmTargetAttrs llvmTargetForHost);
|
|
stdenv = sccacheStdenv;
|
|
compatStdenv = sccacheWrappedCompatStdenv;
|
|
}
|
|
);
|
|
# xdg-desktop-portal-cosmic = prev.xdg-desktop-portal-cosmic.overrideAttrs (old: {
|
|
# postPatch = (old.postPatch or "") + ''
|
|
# unitDir="$out/lib/systemd/user"
|
|
# ln -sfn org.freedesktop.impl.portal.desktop.cosmic.service \
|
|
# "$unitDir/xdg-desktop-portal-cosmic.service"
|
|
# '';
|
|
# });
|
|
# );
|
|
codex = modify prev.codex (
|
|
old:
|
|
let
|
|
version = "0.116.0";
|
|
in
|
|
(versionBumpAttrs old.version version (
|
|
let
|
|
src = prev.fetchFromGitHub {
|
|
owner = "openai";
|
|
repo = "codex";
|
|
tag = "rust-v${version}";
|
|
hash = "sha256-PTsKphg3gPlBUs5oMM34RhJJ4jxvD6hand5aVjXcuZ4=";
|
|
# hash = "";
|
|
};
|
|
in
|
|
{
|
|
inherit version src;
|
|
sourceRoot = "${src.name}/codex-rs";
|
|
|
|
cargoDeps = prev.rustPlatform.fetchCargoVendor {
|
|
inherit src;
|
|
sourceRoot = "${src.name}/codex-rs";
|
|
hash = "sha256-X5Yh8+3UrCZfzIplb4OzFfcfoklMu3FikU9vZ6CJbfc=";
|
|
# hash = prev.lib.fakeHash;
|
|
};
|
|
}
|
|
))
|
|
// {
|
|
buildInputs = (old.buildInputs or [ ]) ++ [ prev.libcap ];
|
|
|
|
preBuild = (old.preBuild or "") + ''
|
|
mkdir -p ${final.lib.escapeShellArg sandboxSccacheDir}
|
|
export CARGO_PROFILE_RELEASE_LTO=thin
|
|
export CARGO_PROFILE_RELEASE_CODEGEN_UNITS=8
|
|
'';
|
|
|
|
env = (old.env or { }) // {
|
|
RUSTC_WRAPPER = "${final.sccache}/bin/sccache";
|
|
SCCACHE_CONF = sharedSccacheConfig;
|
|
};
|
|
}
|
|
);
|
|
# electron_39 =
|
|
# let
|
|
# angleLib = final.lib.getLib final.angle;
|
|
# realElectronClangBasePath = mkRealCompilerBasePath {
|
|
# name = "electron-real-clang-base";
|
|
# toolchain = prev.electron_39.passthru.unwrapped.llvmCcAndBintools;
|
|
# };
|
|
# electronUnwrapped = modify prev.electron_39.passthru.unwrapped (
|
|
# old:
|
|
# let
|
|
# buildSccacheAttrs = mkBuildSccacheAttrs old;
|
|
# oldClangBasePath = "clang_base_path=\"${old.llvmCcAndBintools}\"";
|
|
# newClangBasePath = "clang_base_path=\"${realElectronClangBasePath}\"";
|
|
# baseGnFlags = builtins.replaceStrings [ oldClangBasePath ] [ newClangBasePath ] (old.gnFlags or "");
|
|
# electronGnFlags = "${baseGnFlags} cc_wrapper=\"${buildSccacheLauncher}/bin/build-sccache\"";
|
|
# in
|
|
# buildSccacheAttrs
|
|
# // {
|
|
# gnFlags = electronGnFlags;
|
|
# configurePhase = builtins.replaceStrings [ old.gnFlags or "" ] [ electronGnFlags ] (
|
|
# old.configurePhase or ""
|
|
# );
|
|
# patches = builtins.filter (
|
|
# patch: builtins.baseNameOf (toString patch) != "39-angle-patchdir.patch"
|
|
# ) (old.patches or [ ]);
|
|
# postPatch = ''
|
|
# substituteInPlace electron/patches/config.json \
|
|
# --replace-fail '"repo": "src/third_party/angle/src"' '"repo": "src/third_party/angle"'
|
|
# ''
|
|
# + (old.postPatch or "");
|
|
# postFixup = (old.postFixup or "") + ''
|
|
|
|
# for angleLibName in \
|
|
# libEGL.so \
|
|
# libEGL_vulkan_secondaries.so \
|
|
# libGLESv1_CM.so \
|
|
# libGLESv2.so \
|
|
# libGLESv2_vulkan_secondaries.so \
|
|
# libGLESv2_with_capture.so \
|
|
# libVkICD_mock_icd.so \
|
|
# libfeature_support.so
|
|
# do
|
|
# if [ -e "$libExecPath/$angleLibName" ] || [ -L "$libExecPath/$angleLibName" ]; then
|
|
# rm -f "$libExecPath/$angleLibName"
|
|
# fi
|
|
# ln -s ${angleLib}/lib/"$angleLibName" "$libExecPath/$angleLibName"
|
|
# done
|
|
# '';
|
|
# }
|
|
# );
|
|
# in
|
|
# prev.electron_39.override {
|
|
# electron-unwrapped = electronUnwrapped;
|
|
# };
|
|
electron_39 = prev.electron_39-bin;
|
|
oneapi-ccl =
|
|
modify
|
|
(prev.oneapi-ccl.override {
|
|
intel-sycl = final."intel-sycl";
|
|
})
|
|
(
|
|
old:
|
|
let
|
|
version = "2021.17.2";
|
|
intelSycl = final."intel-sycl".llvm;
|
|
intelSyclDev = final.lib.getDev intelSycl;
|
|
intelSyclLib = final.lib.getLib intelSycl;
|
|
levelZero = final.lib.getDev final.level-zero;
|
|
openclHeaders = final.opencl-headers;
|
|
cmakeSccacheAttrs = mkCmakeSccacheAttrs old;
|
|
in
|
|
(versionBumpAttrs old.version version {
|
|
inherit version;
|
|
|
|
src = prev.fetchFromGitHub {
|
|
owner = "uxlfoundation";
|
|
repo = "oneCCL";
|
|
rev = version;
|
|
hash = "sha256-dV1PadrcJSdwwpNxXAK1fo/B5p26Lvd36wqC+xM5KJM=";
|
|
};
|
|
})
|
|
// cmakeSccacheAttrs
|
|
// {
|
|
setOutputFlags = false;
|
|
|
|
postPatch = (old.postPatch or "") + ''
|
|
mkdir -p deps/level_zero
|
|
rm -rf deps/level_zero/include
|
|
ln -s ${levelZero}/include/level_zero deps/level_zero/include
|
|
|
|
sed -i '/^#if defined(SYCL_LANGUAGE_VERSION) && defined (__INTEL_LLVM_COMPILER)$/,/^#endif$/c\
|
|
#cmakedefine CCL_ENABLE_SYCL\
|
|
#cmakedefine CCL_ENABLE_ZE' include/oneapi/ccl/config.h.in
|
|
|
|
sed -i 's/^#define ICPX_VERSION 0$/#define ICPX_VERSION 140000/' src/common/utils/sycl_utils.hpp
|
|
|
|
sed -i '/^inline sycl::event get_last_event(const sycl::queue &q) {$/, /^inline sycl::event submit_wait_on_events(sycl::queue q, const std::vector<sycl::event> &deps) {$/c\
|
|
inline sycl::event get_last_event(const sycl::queue &q) {\
|
|
auto last_event_opt = q.ext_oneapi_get_last_event();\
|
|
if (last_event_opt.has_value()) {\
|
|
return last_event_opt.value();\
|
|
}\
|
|
return sycl::event{};\
|
|
}\
|
|
\
|
|
inline sycl::event submit_wait_on_events(sycl::queue q, const std::vector<sycl::event> \&deps) {' src/coll/algorithms/utils/sycl_coll_base.hpp
|
|
|
|
find src -type f \( -name '*.hpp' -o -name '*.cpp' \) \
|
|
-exec sed -i 's/reqd_sub_group_size(sg_size)/reqd_sub_group_size(32)/g' {} +
|
|
|
|
awk '
|
|
pending {
|
|
if ($0 ~ /^[[:space:]]*send_buf, new_send_count,/) {
|
|
sub(/send_buf, new_send_count,/, "q, send_buf, new_send_count,")
|
|
}
|
|
pending = 0
|
|
}
|
|
/^[[:space:]]*e = allgatherv_large\($/ {
|
|
pending = 1
|
|
}
|
|
{ print }
|
|
' src/coll/algorithms/allgatherv/sycl/allgatherv_sycl.cpp \
|
|
> src/coll/algorithms/allgatherv/sycl/allgatherv_sycl.cpp.tmp
|
|
mv src/coll/algorithms/allgatherv/sycl/allgatherv_sycl.cpp.tmp \
|
|
src/coll/algorithms/allgatherv/sycl/allgatherv_sycl.cpp
|
|
'';
|
|
|
|
cmakeFlags = (cmakeSccacheAttrs.cmakeFlags or [ ]) ++ [
|
|
"-DCMAKE_INSTALL_INCLUDEDIR=include"
|
|
"-DINTEL_SYCL_INCLUDE_DIRS=${intelSyclDev}/include"
|
|
"-DINTEL_SYCL_LIBRARIES=${intelSyclLib}/lib/libsycl.so"
|
|
];
|
|
|
|
buildInputs = (old.buildInputs or [ ]) ++ [ openclHeaders ];
|
|
|
|
meta = (old.meta or { }) // {
|
|
broken = false;
|
|
};
|
|
}
|
|
);
|
|
oneapi-math-sycl-blas = modify prev.oneapi-math-sycl-blas (old: mkCmakeSccacheAttrs old);
|
|
oneapi-math = modify prev.oneapi-math (old: mkCmakeSccacheAttrs old);
|
|
oneapi-dpl =
|
|
let
|
|
version = "2022.11.1";
|
|
in
|
|
modify prev.oneapi-dpl (
|
|
old:
|
|
(versionBumpAttrs old.version version {
|
|
inherit version;
|
|
|
|
src = prev.fetchFromGitHub {
|
|
owner = "uxlfoundation";
|
|
repo = "oneDPL";
|
|
rev = "oneDPL-${version}-release";
|
|
hash = "sha256-NfyV34mdKfCxlU+l6ETKWcC9MwvVEgwcBedtLe6WCV4=";
|
|
};
|
|
|
|
meta = (old.meta or { }) // {
|
|
changelog = "https://github.com/uxlfoundation/oneDPL/releases/tag/oneDPL-${version}-release";
|
|
};
|
|
})
|
|
// (mkCmakeSccacheAttrs old)
|
|
);
|
|
llama-cpp = modify prev.llama-cpp (
|
|
old:
|
|
let
|
|
version = "8124";
|
|
in
|
|
(versionBumpAttrs old.version version {
|
|
inherit version;
|
|
src = prev.fetchFromGitHub {
|
|
owner = "ggml-org";
|
|
repo = "llama.cpp";
|
|
tag = "b${version}";
|
|
hash = old.src.hash;
|
|
};
|
|
})
|
|
// (mkCmakeSccacheAttrs old)
|
|
);
|
|
pythonPackagesExtensions = prev.pythonPackagesExtensions ++ [
|
|
(pyFinal: pyPrev: {
|
|
haystack-ai = modify pyPrev.haystack-ai (
|
|
old:
|
|
let
|
|
version = "2.24.1";
|
|
in
|
|
(versionBumpAttrs old.version version {
|
|
inherit version;
|
|
|
|
src = final.fetchFromGitHub {
|
|
owner = "deepset-ai";
|
|
repo = "haystack";
|
|
rev = "v${version}";
|
|
hash = "sha256-tlQ3Bp+HcIsmoUoOMkm2APUSgNcdsujMUnSx+un/r8c=";
|
|
};
|
|
})
|
|
// {
|
|
propagatedBuildInputs =
|
|
(old.propagatedBuildInputs or [ ])
|
|
++ (with pyPrev; [
|
|
docstring-parser
|
|
filetype
|
|
jinja2
|
|
openai
|
|
])
|
|
++ [
|
|
pyFinal."haystack-experimental"
|
|
];
|
|
|
|
meta = (old.meta or { }) // {
|
|
broken = false;
|
|
};
|
|
}
|
|
);
|
|
sseclient-py = modify pyPrev.sseclient-py (old: rec {
|
|
format = "pyproject";
|
|
nativeBuildInputs =
|
|
(old.nativeBuildInputs or [ ])
|
|
++ (with pyPrev; [
|
|
hatchling
|
|
#pypaBuildHook
|
|
#pypaInstallHook
|
|
]);
|
|
doCheck = false;
|
|
});
|
|
vllm = modify pyPrev.vllm (
|
|
old:
|
|
let
|
|
version = "0.17.1";
|
|
in
|
|
versionBumpAttrs old.version version {
|
|
inherit version;
|
|
|
|
src = final.fetchFromGitHub {
|
|
owner = "vllm-project";
|
|
repo = "vllm";
|
|
rev = "v${version}";
|
|
hash = "sha256-EZozwA+GIjN8/CBNhtdeM3HsPhVdx1/J0B9gvvn2qKU=";
|
|
};
|
|
}
|
|
);
|
|
triton-xpu = pyFinal.buildPythonPackage rec {
|
|
pname = "pytorch_triton_xpu";
|
|
version = "3.5.0";
|
|
format = "wheel";
|
|
src = final.fetchurl {
|
|
url = "https://download.pytorch.org/whl/${pname}-${version}-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl";
|
|
hash = "sha256-DSTBcWCI8nZNDSTGQidzIZW2pCcGw8X8ie60kEv6CBg=";
|
|
};
|
|
build-system = with final.python3Packages; [
|
|
setuptools
|
|
];
|
|
nativeBuildInputs = (
|
|
with final;
|
|
[
|
|
autoPatchelfHook
|
|
]
|
|
);
|
|
buildInputs = [ final.zlib ];
|
|
postFixup = ''
|
|
substituteInPlace $out/${pyFinal.python.sitePackages}/triton/backends/intel/driver.py \
|
|
--replace-fail 'ze_root = os.getenv("ZE_PATH", default="/usr/local")' \
|
|
'ze_root = os.getenv("ZE_PATH", default="${final.level-zero}")'
|
|
substituteInPlace $out/${pyFinal.python.sitePackages}/triton/runtime/build.py \
|
|
--replace-fail 'icpx = shutil.which("icpx")' \
|
|
'icpx = "${final."intel-sycl".clang}/bin/clang++"'
|
|
'';
|
|
};
|
|
torch =
|
|
let
|
|
intelHwSrc = builtins.fetchGit {
|
|
url = "https://github.com/MordragT/nixos.git";
|
|
rev = "5fc6b35b8aafafbe9fa8bda6e0dc4ddbb0327b43";
|
|
};
|
|
torchDir = intelHwSrc + /pkgs/by-lang/intel-python/torch;
|
|
torchFn = import torchDir;
|
|
torchSyclRoot =
|
|
let
|
|
intelSyclLlvm = final."intel-sycl".llvm;
|
|
intelSyclDev = final.lib.getDev intelSyclLlvm;
|
|
intelSyclLib = final.lib.getLib intelSyclLlvm;
|
|
in
|
|
final.runCommand "torch-sycl-root" { } ''
|
|
mkdir -p "$out/bin" "$out/include" "$out/lib"
|
|
|
|
ln -s ${final."intel-sycl".stdenv.cc}/bin/clang "$out/bin/clang"
|
|
ln -s ${final."intel-sycl".stdenv.cc}/bin/clang++ "$out/bin/clang++"
|
|
ln -s clang "$out/bin/icx"
|
|
ln -s clang++ "$out/bin/icpx"
|
|
|
|
for path in ${intelSyclDev}/include/*; do
|
|
ln -s "$path" "$out/include/"
|
|
done
|
|
|
|
for path in ${intelSyclLib}/lib/libsycl*.so*; do
|
|
ln -s "$path" "$out/lib/"
|
|
done
|
|
|
|
ln -s ${final.ocl-icd}/lib/libOpenCL.so "$out/lib/libOpenCL.so"
|
|
ln -s ${final.ocl-icd}/lib/libOpenCL.so.1 "$out/lib/libOpenCL.so.1"
|
|
'';
|
|
torchCmakeSccache = mkSccacheLauncher {
|
|
name = "torch-cmake-sccache";
|
|
passthroughWrappedCompiler = true;
|
|
};
|
|
in
|
|
(torchFn {
|
|
inherit (final)
|
|
lib
|
|
cmake
|
|
which
|
|
pkg-config
|
|
breakpointHook
|
|
writeShellScript
|
|
;
|
|
inherit (final)
|
|
openssl
|
|
ocl-icd
|
|
opencl-headers
|
|
level-zero
|
|
;
|
|
inherit (final)
|
|
fetchFromGitHub
|
|
fetchFromGitLab
|
|
runCommand
|
|
callPackage
|
|
applyPatches
|
|
;
|
|
inherit (final.buildPackages) ninja;
|
|
inherit (pyFinal)
|
|
buildPythonPackage
|
|
python
|
|
pybind11
|
|
astunparse
|
|
expecttest
|
|
filelock
|
|
fsspec
|
|
hypothesis
|
|
jinja2
|
|
networkx
|
|
packaging
|
|
psutil
|
|
pyyaml
|
|
requests
|
|
sympy
|
|
types-dataclasses
|
|
typing-extensions
|
|
pillow
|
|
six
|
|
tensorboard
|
|
protobuf
|
|
;
|
|
intel-sycl = final."intel-sycl";
|
|
oneapi-dnn = final.oneapi-dnn;
|
|
pti-gpu = final.pti-gpu;
|
|
intel-compute-runtime = final.intel-compute-runtime;
|
|
triton-xpu = pyFinal.triton-xpu;
|
|
inherit (final) git-unroll binutils;
|
|
}).overrideAttrs
|
|
(old: {
|
|
nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [
|
|
final.shaderc
|
|
final.glibc.bin
|
|
torchCmakeSccache
|
|
];
|
|
buildInputs = (old.buildInputs or [ ]) ++ [
|
|
final.vulkan-headers
|
|
final.vulkan-loader
|
|
];
|
|
postPatch = (old.postPatch or "") + ''
|
|
substituteInPlace cmake/Modules/FindOpenMP.cmake \
|
|
--replace-fail 'set(OMP_FLAG_Clang "-fopenmp=libomp" "-fopenmp=libiomp5" "-fopenmp")' \
|
|
'set(OMP_FLAG_Clang "-fopenmp=libomp -I''${OpenMP_PREFIX}/include" "-fopenmp=libiomp5 -I''${OpenMP_PREFIX}/include" "-fopenmp -I''${OpenMP_PREFIX}/include" "-fopenmp=libomp" "-fopenmp=libiomp5" "-fopenmp")'
|
|
'';
|
|
preBuild = ''
|
|
export MAX_JOBS=$NIX_BUILD_CORES
|
|
|
|
mkdir -p ${final.lib.escapeShellArg sandboxSccacheDir}
|
|
export SCCACHE_CONF=${final.lib.escapeShellArg sharedSccacheConfig}
|
|
${sccacheRuntimeModeSetup}
|
|
|
|
export SYCL_ROOT=${final.lib.escapeShellArg torchSyclRoot}
|
|
export CMPLR_ROOT=${final.lib.escapeShellArg torchSyclRoot}
|
|
export LD_LIBRARY_PATH="$SYCL_ROOT/lib''${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
|
|
export CMAKE_C_COMPILER_LAUNCHER=${torchCmakeSccache}/bin/torch-cmake-sccache
|
|
export CMAKE_CXX_COMPILER_LAUNCHER=${torchCmakeSccache}/bin/torch-cmake-sccache
|
|
|
|
omp_lib_dir=
|
|
for dep in $buildInputs $nativeBuildInputs; do
|
|
if [ -f "$dep/include/omp.h" ]; then
|
|
export OMP_PREFIX="$dep"
|
|
export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -I$dep/include"
|
|
export CFLAGS="$CFLAGS -I$dep/include"
|
|
export CXXFLAGS="$CXXFLAGS -I$dep/include"
|
|
if [ -f "$dep/nix-support/propagated-build-inputs" ]; then
|
|
for propagated in $(cat "$dep/nix-support/propagated-build-inputs"); do
|
|
if [ -f "$propagated/lib/libomp.so" ] || [ -f "$propagated/lib/libiomp5.so" ]; then
|
|
omp_lib_dir="$propagated/lib"
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
break
|
|
fi
|
|
done
|
|
if [ -n "$omp_lib_dir" ]; then
|
|
export LIBRARY_PATH="$omp_lib_dir''${LIBRARY_PATH:+:$LIBRARY_PATH}"
|
|
export NIX_LDFLAGS="$NIX_LDFLAGS -L$omp_lib_dir -Wl,-rpath,$omp_lib_dir"
|
|
export LDFLAGS="$LDFLAGS -L$omp_lib_dir -Wl,-rpath,$omp_lib_dir"
|
|
fi
|
|
export SCCACHE_WRAPPED_COMPILER_PASSTHROUGH=1
|
|
python setup.py build --cmake-only
|
|
unset SCCACHE_WRAPPED_COMPILER_PASSTHROUGH
|
|
cmake --build build
|
|
'';
|
|
postBuild = (old.postBuild or "") + ''
|
|
${torchCmakeSccache}/bin/torch-cmake-sccache --show-stats --stats-format text || true
|
|
'';
|
|
env = (old.env or { }) // {
|
|
SYCL_ROOT = "${torchSyclRoot}";
|
|
CMPLR_ROOT = "${torchSyclRoot}";
|
|
USE_VULKAN = "1";
|
|
USE_OPENCL = "1";
|
|
USE_XCCL = "0";
|
|
USE_OPENMP = "1";
|
|
VULKAN_SDK = "${final.shaderc}";
|
|
USE_CUDNN = "0";
|
|
USE_CUDSS = "0";
|
|
USE_CUFILE = "0";
|
|
USE_CUSPARSELT = "0";
|
|
USE_STATIC_NCCL = "0";
|
|
USE_NVRTC = "0";
|
|
USE_ROCM = "0";
|
|
USE_RCCL = "0";
|
|
USE_MPS = "0";
|
|
USE_PYTORCH_METAL = "0";
|
|
USE_PYTORCH_METAL_EXPORT = "0";
|
|
USE_COREML_DELEGATE = "0";
|
|
USE_MAGMA = "0";
|
|
USE_NNPACK = "0";
|
|
USE_XNNPACK = "0";
|
|
USE_PYTORCH_QNNPACK = "0";
|
|
USE_SNPE = "0";
|
|
USE_NNAPI = "0";
|
|
USE_KINETO = "0";
|
|
USE_ITT = "0";
|
|
USE_DISTRIBUTED = "0";
|
|
USE_GLOO = "0";
|
|
USE_MPI = "0";
|
|
USE_TENSORPIPE = "0";
|
|
USE_UCC = "0";
|
|
CC = "${final."intel-sycl".compatStdenv.cc}/bin/clang";
|
|
CXX = "${final."intel-sycl".compatStdenv.cc}/bin/clang++";
|
|
};
|
|
});
|
|
})
|
|
];
|
|
lutris-unwrapped = modify prev.lutris-unwrapped (
|
|
old:
|
|
let
|
|
version = "0.5.22";
|
|
in
|
|
versionBumpAttrs old.version version {
|
|
inherit version;
|
|
src = prev.fetchFromGitHub {
|
|
owner = "lutris";
|
|
repo = "lutris";
|
|
tag = "v${version}";
|
|
hash = "sha256-4mNknvfJQJEPZjQoNdKLQcW4CI93D6BUDPj8LtD940A=";
|
|
};
|
|
}
|
|
);
|
|
winetricks = modify prev.winetricks (old: {
|
|
nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ final.makeWrapper ];
|
|
|
|
postFixup = (old.postFixup or "") + ''
|
|
wrapProgram "$out/bin/winetricks" \
|
|
--prefix PATH : "${final.lib.makeBinPath [ winePkg ]}" \
|
|
--set-default WINE "${winePkg}/bin/wine" \
|
|
--run 'wine_dir="$(${final.coreutils}/bin/dirname "$(${final.coreutils}/bin/readlink -f "$WINE")")"' \
|
|
--run ': "''${WINE_BIN:=$wine_dir/.wine}"' \
|
|
--run 'export WINE WINESERVER WINE_BIN WINESERVER_BIN'
|
|
'';
|
|
});
|
|
intel-openmp-nightly = modify prev.intel-openmp-nightly (
|
|
old:
|
|
let
|
|
cmakeSccacheAttrs = mkCmakeSccacheAttrs old;
|
|
in
|
|
cmakeSccacheAttrs
|
|
// {
|
|
cmakeFlags = (cmakeSccacheAttrs.cmakeFlags or [ ]);
|
|
}
|
|
);
|
|
intel-compute-runtime = modify prev.intel-compute-runtime (
|
|
old:
|
|
let
|
|
cmakeSccacheAttrs = mkCmakeSccacheAttrs old;
|
|
#
|
|
# Build against the drm/tip 7.0.0-rc4 kernel headers for xe driver ABI compatibility
|
|
kernelSrc = builtins.fetchGit {
|
|
url = "https://gitlab.freedesktop.org/drm/tip.git";
|
|
rev = "61409ba11a36fa5aff4ce0f0086a6026a43c5bce";
|
|
shallow = true;
|
|
};
|
|
kernelHeaders = final.runCommand "xe-kernel-headers" { } ''
|
|
mkdir -p $out/include/drm
|
|
cp -v ${kernelSrc}/include/drm/xe_drm.h $out/include/drm/ 2>/dev/null || true
|
|
cp -v ${kernelSrc}/include/uapi/drm/xe_drm.h $out/include/drm/ 2>/dev/null || true
|
|
# Also copy other drm headers the compute runtime might need
|
|
for f in ${kernelSrc}/include/drm/*.h ${kernelSrc}/include/uapi/drm/*.h; do
|
|
[ -f "$f" ] && cp -v "$f" $out/include/drm/ 2>/dev/null || true
|
|
done
|
|
'';
|
|
in
|
|
cmakeSccacheAttrs
|
|
// {
|
|
cmakeFlags = (cmakeSccacheAttrs.cmakeFlags or [ ]) ++ [
|
|
(prev.lib.cmakeBool "DISABLE_WDDM_LINUX" true)
|
|
(prev.lib.cmakeBool "NEO_ENABLE_I915_PRELIM_DETECTION" false)
|
|
(prev.lib.cmakeBool "NEO_ENABLE_XE_PRELIM_DETECTION" false)
|
|
(prev.lib.cmakeBool "SUPPORT_GEN12LP" false)
|
|
(prev.lib.cmakeBool "SUPPORT_XE_HPG_CORE" false)
|
|
(prev.lib.cmakeBool "SUPPORT_XE_HPC_CORE" false)
|
|
(prev.lib.cmakeBool "SUPPORT_XE3_CORE" false)
|
|
(prev.lib.cmakeBool "SUPPORT_XE3P_CORE" false)
|
|
(prev.lib.cmakeBool "SUPPORT_XE2_HPG_CORE" true)
|
|
(prev.lib.cmakeBool "SUPPORT_LNL" false)
|
|
(prev.lib.cmakeBool "SUPPORT_BMG" true)
|
|
];
|
|
buildInputs = (old.buildInputs or [ ]) ++ [ kernelHeaders ];
|
|
postPatch = (old.postPatch or "") + ''
|
|
# Copy xe_drm.h from the drm/tip kernel into all compute-runtime header locations
|
|
if [ -f "${kernelHeaders}/include/drm/xe_drm.h" ]; then
|
|
for dest in \
|
|
third_party/uapi/drm-next/xe \
|
|
third_party/uapi/drm-uapi-helper/xe \
|
|
third_party/uapi-eudebug/drm \
|
|
; do
|
|
if [ -d "$dest" ]; then
|
|
cp -v "${kernelHeaders}/include/drm/xe_drm.h" "$dest/"
|
|
fi
|
|
done
|
|
fi
|
|
|
|
# Patch GMM resource creation failures to be non-fatal.
|
|
# intel-gmmlib can't create resource info for BMG on kernel 7.0 xe driver
|
|
# in certain initialization paths. Patch the abort and add null guards.
|
|
|
|
# 1. resource_info.cpp: return nullptr instead of aborting
|
|
sed -i 's/UNRECOVERABLE_IF(resourceInfo->peekHandle() == 0);/if(resourceInfo->peekHandle() == 0) { delete resourceInfo; return nullptr; }/' \
|
|
shared/source/gmm_helper/resource_info.cpp
|
|
|
|
# 2. gmm.cpp: change UNRECOVERABLE_IF to graceful return first (line 104)
|
|
sed -i 's/UNRECOVERABLE_IF(this->gmmResourceInfo == nullptr);/if (this->gmmResourceInfo == nullptr) { return; }/' \
|
|
shared/source/gmm_helper/gmm.cpp
|
|
|
|
# 3. gmm.cpp: add null checks after GmmResourceInfo::create calls that lack them
|
|
# Lines 76 and 85 (line 103 already handled by step 2 after the UNRECOVERABLE_IF replacement)
|
|
sed -i '76a\ if (this->gmmResourceInfo == nullptr) { return; }' \
|
|
shared/source/gmm_helper/gmm.cpp
|
|
sed -i '87a\ if (this->gmmResourceInfo == nullptr) { return; }' \
|
|
shared/source/gmm_helper/gmm.cpp
|
|
'';
|
|
}
|
|
);
|
|
umu-launcher-unwrapped = modify prev.umu-launcher-unwrapped rec {
|
|
version = "1.4.0";
|
|
|
|
src = prev.fetchFromGitHub {
|
|
inherit version;
|
|
owner = "Open-Wine-Components";
|
|
repo = "umu-launcher";
|
|
tag = version;
|
|
hash = "sha256-7BdA/iAAIn2NR/uLzxdvsIh5/1SZacSfkiXJVJBT3EQ=";
|
|
};
|
|
|
|
cargoDeps = prev.rustPlatform.fetchCargoVendor {
|
|
inherit src;
|
|
hash = "sha256-CVcbktCBRZGnEuDVvl2iJpRgKh+ShFe5mjT6oMHIjtQ=";
|
|
};
|
|
};
|
|
umu-launcher = prev.umu-launcher.override {
|
|
extraLibraries = prevPkgs: [ prevPkgs.zstd ];
|
|
};
|
|
}
|