nixos-conf/custom/override.nix
2026-03-26 04:54:48 +02:00

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 ];
};
}