diff --git a/custom/override.nix b/custom/override.nix index f4e77e2..9f4f93e 100644 --- a/custom/override.nix +++ b/custom/override.nix @@ -156,35 +156,33 @@ let buildSccacheLauncher = mkSccacheLauncher { name = "build-sccache"; }; - mkBuildSccacheAttrs = - old: - { - nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ buildSccacheLauncher ]; + mkBuildSccacheAttrs = old: { + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ buildSccacheLauncher ]; - preConfigure = (old.preConfigure or "") + '' + preConfigure = (old.preConfigure or "") + '' - mkdir -p ${final.lib.escapeShellArg sandboxSccacheDir} - export SCCACHE_SERVER_UDS="$TMPDIR/sccache/server.sock" - export SCCACHE_IDLE_TIMEOUT=0 - unset SCCACHE_NO_DAEMON - mkdir -p "$(dirname "$SCCACHE_SERVER_UDS")" - if ! ${buildSccacheLauncher}/bin/build-sccache --show-stats >/dev/null 2>&1; then - rm -f "$SCCACHE_SERVER_UDS" - if ! ${buildSccacheLauncher}/bin/build-sccache --start-server >/tmp/sccache-start.log 2>&1; then - if ! grep -Fq "Address already in use" /tmp/sccache-start.log; then - cat /tmp/sccache-start.log >&2 - exit 1 - fi + mkdir -p ${final.lib.escapeShellArg sandboxSccacheDir} + export SCCACHE_SERVER_UDS="$TMPDIR/sccache/server.sock" + export SCCACHE_IDLE_TIMEOUT=0 + unset SCCACHE_NO_DAEMON + mkdir -p "$(dirname "$SCCACHE_SERVER_UDS")" + if ! ${buildSccacheLauncher}/bin/build-sccache --show-stats >/dev/null 2>&1; then + rm -f "$SCCACHE_SERVER_UDS" + if ! ${buildSccacheLauncher}/bin/build-sccache --start-server >/tmp/sccache-start.log 2>&1; then + if ! grep -Fq "Address already in use" /tmp/sccache-start.log; then + cat /tmp/sccache-start.log >&2 + exit 1 fi fi - ''; + fi + ''; - postBuild = (old.postBuild or "") + '' + postBuild = (old.postBuild or "") + '' - ${buildSccacheLauncher}/bin/build-sccache --show-stats --stats-format text || true - ${buildSccacheLauncher}/bin/build-sccache --stop-server || true - ''; - }; + ${buildSccacheLauncher}/bin/build-sccache --show-stats --stats-format text || true + ${buildSccacheLauncher}/bin/build-sccache --stop-server || true + ''; + }; mkCmakeSccacheAttrs = old: let @@ -271,27 +269,28 @@ let sccacheDir ? "/var/cache/sccache/nix-builds/packages", extraConfig ? "", }: - final.overrideCC stdenv ( - mkWrappedCcForSccache { - inherit (stdenv) cc; - extraConfig = mkSccacheExtraConfig { - inherit extraConfig sccacheDir; - }; - } - ); + final.overrideCC stdenv (mkWrappedCcForSccache { + inherit (stdenv) cc; + extraConfig = mkSccacheExtraConfig { + inherit extraConfig sccacheDir; + }; + }); in { sccache = modify prev.sccache (old: { postPatch = (old.postPatch or "") + '' - substituteInPlace src/compiler/gcc.rs \ - --replace-fail \ - ' take_arg!("-isystem", PathBuf, CanBeSeparated, PreprocessorArgumentPath),' \ - ' take_arg!("-isystem", PathBuf, CanBeSeparated, PreprocessorArgumentPath), - take_arg!("-cxx-isystem", PathBuf, CanBeSeparated, PreprocessorArgumentPath),' + substituteInPlace src/compiler/gcc.rs \ + --replace-fail \ + ' take_arg!("-isystem", PathBuf, CanBeSeparated, PreprocessorArgumentPath),' \ + ' take_arg!("-isystem", PathBuf, CanBeSeparated, PreprocessorArgumentPath), + take_arg!("-cxx-isystem", PathBuf, CanBeSeparated, PreprocessorArgumentPath),' ''; passthru = (old.passthru or { }) // { links = - { unwrappedCC, extraConfig ? "" }: + { + unwrappedCC, + extraConfig ? "", + }: let sccacheLauncher = mkSccacheLauncher { name = "wrapped-sccache"; @@ -308,7 +307,8 @@ in isSccache = true; dev = unwrappedCC.dev or null; lib = unwrappedCC.lib or (final.lib.getLib unwrappedCC); - } // final.lib.optionalAttrs (unwrappedCC ? rsrc) { + } + // final.lib.optionalAttrs (unwrappedCC ? rsrc) { inherit (unwrappedCC) rsrc; }; dev = unwrappedCC.dev or null; @@ -362,35 +362,41 @@ in }; }); sccacheWrapper = - final.lib.makeOverridable ( + final.lib.makeOverridable + ( + { + extraConfig ? "", + cc, + }: + mkWrappedCcForSccache { + inherit cc extraConfig; + } + ) { - extraConfig ? "", - cc, - }: - mkWrappedCcForSccache { - inherit cc extraConfig; - } - ) { - extraConfig = ""; - inherit (final.stdenv) cc; - }; + extraConfig = ""; + inherit (final.stdenv) cc; + }; sccacheStdenv = final.lib.lowPrio ( - final.lib.makeOverridable ( - { - stdenv, - ... - }@extraArgs: - final.overrideCC stdenv ( - final.buildPackages.sccacheWrapper.override ( - { inherit (stdenv) cc; } - // final.lib.optionalAttrs (builtins.hasAttr "extraConfig" extraArgs) { - extraConfig = extraArgs.extraConfig; - } + final.lib.makeOverridable + ( + { + stdenv, + ... + }@extraArgs: + final.overrideCC stdenv ( + final.buildPackages.sccacheWrapper.override ( + { + inherit (stdenv) cc; + } + // final.lib.optionalAttrs (builtins.hasAttr "extraConfig" extraArgs) { + extraConfig = extraArgs.extraConfig; + } + ) ) ) - ) { - inherit (final) stdenv; - } + { + inherit (final) stdenv; + } ); sccache-config = sharedSccacheConfig; intel-sycl = modify prev."intel-sycl" ( @@ -459,27 +465,23 @@ in 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\""; + 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 ""); + 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 ""); + '' + + (old.postPatch or ""); postFixup = (old.postFixup or "") + '' for angleLibName in \ @@ -504,99 +506,99 @@ in prev.electron_39.override { electron-unwrapped = electronUnwrapped; }; - 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; + 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; + 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 + 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 '/^#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 '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 &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 \&deps) {' src/coll/algorithms/utils/sycl_coll_base.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 &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 \&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' {} + + 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 - ''; + 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" - ]; + 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 ]; + 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 - ); + 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: + modify prev.oneapi-dpl ( + old: (versionBumpAttrs old.version version { inherit version; @@ -647,21 +649,21 @@ inline sycl::event submit_wait_on_events(sycl::queue q, const std::vector/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 "NEO_ENABLE_XE" 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 + ''; } ); } diff --git a/flake.nix b/flake.nix index f6240ed..416cc9d 100644 --- a/flake.nix +++ b/flake.nix @@ -101,6 +101,7 @@ intel-ocl vpl-gpu-rt intel-compute-runtime + intel-compute-runtime.drivers ### intel-hw oneapi-ccl oneapi-dpl