From 3ac19eb970f01b6063f939ea3eb26eb985427ef6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aleix=20Bon=C3=A9?= Date: Thu, 18 Dec 2025 11:52:24 +0100 Subject: [PATCH] Add llvm intel --- overlay.nix | 1 + pkgs/llvm-intel/default.nix | 200 +++++++++++++++++++++++++++++++++++ pkgs/llvm-intel/fix-ur.patch | 23 ++++ 3 files changed, 224 insertions(+) create mode 100644 pkgs/llvm-intel/default.nix create mode 100644 pkgs/llvm-intel/fix-ur.patch diff --git a/overlay.nix b/overlay.nix index 91fe014e..01711a68 100644 --- a/overlay.nix +++ b/overlay.nix @@ -34,6 +34,7 @@ let linuxPackages_latest = prev.linuxPackages_latest.extend(_final: _prev: { amd-uprof-driver = _prev.callPackage ./pkgs/amd-uprof/driver.nix { }; }); + llvm-intel = callPackage ./pkgs/llvm-intel/default.nix { }; lmbench = callPackage ./pkgs/lmbench/default.nix { }; # Broken and unmantained # mcxx = callPackage ./pkgs/mcxx/default.nix { }; diff --git a/pkgs/llvm-intel/default.nix b/pkgs/llvm-intel/default.nix new file mode 100644 index 00000000..61a93498 --- /dev/null +++ b/pkgs/llvm-intel/default.nix @@ -0,0 +1,200 @@ +{ + stdenv, + lib, + ninja, + addDriverRunpath, + cmake, + emhash, + fetchFromGitHub, + khronos-ocl-icd-loader, + libbacktrace, + opencl-headers, + parallel-hashmap, + perl, + pkg-config, + python3, + spirv-headers, + spirv-tools, + symlinkJoin, + zlib, + + cudaPackages, + enableCuda ? true, +}: + +let + version = "6.2.1"; + src = fetchFromGitHub { + owner = "intel"; + repo = "llvm"; + tag = "v${version}"; + sha256 = "sha256-j8+DmGKO0qDF5JjH+DlkLKs1kBz6dS7ukwySd/Crqv0="; + }; + + pinned = { + inherit parallel-hashmap; + + vc-intrinsics.src = fetchFromGitHub { + owner = "intel"; + repo = "vc-intrinsics"; + rev = "4e51b2467104a257c22788e343dafbdde72e28bb"; + sha256 = "sha256-AHXeKbih4bzmcuu+tx2TeS7Ixmk54uS1vKFVxI6ZP8g="; + }; + + unified-memory-framework.src = fetchFromGitHub { + owner = "oneapi-src"; + repo = "unified-memory-framework"; + tag = "v0.11.0"; + sha256 = "sha256-k8QdP2u1QOoeCZ6ps4sM8+1iZq/H3q0lqCfVk8mz9KI="; + }; + + ocl-headers = opencl-headers.overrideAttrs { + version = "2024.10.24"; + src = fetchFromGitHub { + owner = "KhronosGroup"; + repo = "OpenCL-Headers"; + tag = "v2024.10.24"; + sha256 = "sha256-KDlruE0IG8d+lAChxYyc6dg5XOvqCMrMyO69sdAzejA="; + }; + }; + + ocl-icd = khronos-ocl-icd-loader; + + spirv-headers = spirv-headers.overrideAttrs { + version = "1.4.309.0"; + src = fetchFromGitHub { + owner = "KhronosGroup"; + repo = "SPIRV-Headers"; + tag = "vulkan-sdk-1.4.309.0"; + sha256 = "sha256-Q1i6i5XimULuGufP6mimwDW674anAETUiIEvDQwvg5Y="; + }; + }; + }; + + fetchcontent_cmakeFlags = lib.mapAttrsToList ( + name: value: (lib.cmakeFeature "FETCHCONTENT_SOURCE_DIR_${lib.toUpper name}" (toString value.src)) + ) pinned; + + # Hack to fix #include + emhash' = symlinkJoin { + name = "emhash"; + paths = [ emhash ]; + postBuild = '' + pushd $out/include + ln -s . emhash + popd + ''; + }; + +in +stdenv.mkDerivation { + pname = "intel-llvm"; + inherit src version; + + enableParallelBuilding = true; + strictDeps = true; + + nativeBuildInputs = [ + perl + cmake + ninja + pkg-config + python3 + spirv-tools + addDriverRunpath + ] + ++ lib.optionals enableCuda [ + cudaPackages.cuda_nvcc + ]; + + buildInputs = [ + emhash' + libbacktrace + zlib + + pinned.ocl-icd + pinned.ocl-headers + pinned.spirv-headers + ] + ++ lib.optionals enableCuda [ + cudaPackages.cudatoolkit + ]; + + patches = [ ./fix-ur.patch ]; # Has been fixed in next release + + preBuild = '' + chmod -R u+w /build/source + ''; + + cmakeDir = "../llvm"; + + cmakeFlags = + let + cmakeList = name: l: lib.cmakeOptionType "list" name (builtins.concatStringsSep ";" l); + + LLVM_EXTERNAL_PROJECTS = [ + "sycl" + "llvm-spirv" + "opencl" + "xpti" + "xptifw" + "compiler-rt" + "sycl-jit" + ] + ++ lib.optionals enableCuda [ + "libclc" + ]; + in + [ + (lib.cmakeBool "LLVM_ENABLE_ASSERTIONS" true) + + (cmakeList "LLVM_TARGETS_TO_BUILD" ( + [ + "host" + "SPIRV" + ] + ++ lib.optionals enableCuda [ "NVPTX" ] + )) + (cmakeList "LLVM_EXTERNAL_PROJECTS" LLVM_EXTERNAL_PROJECTS) + (cmakeList "LLVM_ENABLE_PROJECTS" ([ "clang" ] ++ LLVM_EXTERNAL_PROJECTS)) + + (lib.cmakeBool "UR_USE_EXTERNAL_UMF" false) + (lib.cmakeOptionType "path" "UR_OPENCL_INCLUDE_DIR" (toString pinned.ocl-headers)) + (lib.cmakeOptionType "path" "UR_OPENCL_ICD_LOADER_LIBRARY" (toString pinned.ocl-icd)) + (lib.cmakeFeature "UR_OPENCL_ICD_LOADER_LIBRARY" (toString pinned.ocl-icd)) + + (lib.cmakeBool "BUILD_SHARED_LIBS" false) + (lib.cmakeBool "LLVM_BUILD_TOOLS" true) + (lib.cmakeBool "LLVM_ENABLE_ZSTD" true) + (lib.cmakeBool "LLVM_USE_STATIC_ZSTD" true) + (lib.cmakeBool "LLVM_ENABLE_DOXYGEN" false) + (lib.cmakeBool "LLVM_ENABLE_LLD" false) + (lib.cmakeBool "LLVM_ENABLE_SPHINX" false) + (lib.cmakeBool "LLVM_SPIRV_ENABLE_LIBSPIRV_DIS" false) + (lib.cmakeBool "SYCL_ENABLE_WERROR" false) + (lib.cmakeBool "SYCL_INCLUDE_TESTS" false) + (lib.cmakeBool "SYCL_ENABLE_EXTENSION_JIT" true) + (lib.cmakeBool "SYCL_ENABLE_MAJOR_RELEASE_PREVIEW_LIB" false) + (lib.cmakeBool "SYCL_ENABLE_XPTI_TRACING" true) + (lib.cmakeBool "XPTI_ENABLE_WERROR" false) + + (cmakeList "SYCL_ENABLE_BACKENDS" ([ "opencl" ] ++ lib.optionals enableCuda [ "cuda" ])) + ] + ++ fetchcontent_cmakeFlags + ++ lib.optionals enableCuda [ + (lib.cmakeOptionType "list" "LIBCLC_TARGETS_TO_BUILD" "nvptx64--nvidiacl") + (lib.cmakeBool "LIBCLC_GENERATE_REMANGLED_VARIANTS" true) + (lib.cmakeBool "LIBCLC_NATIVECPU_HOST_TARGET" false) + ]; + + meta = { + homepage = "https://github.com/intel/llvm"; + description = "Intel staging area for llvm.org contribution"; + maintainers = with lib.maintainers.bsc; [ abonerib ]; + platforms = lib.platforms.linux; + license = [ + lib.licenses.asl20 + lib.licenses.llvm-exception + ]; + }; +} diff --git a/pkgs/llvm-intel/fix-ur.patch b/pkgs/llvm-intel/fix-ur.patch new file mode 100644 index 00000000..edece57a --- /dev/null +++ b/pkgs/llvm-intel/fix-ur.patch @@ -0,0 +1,23 @@ +diff --git a/unified-runtime/source/adapters/cuda/CMakeLists.txt b/unified-runtime/source/adapters/cuda/CMakeLists.txt +index a8401c71a..2ab363926 100644 +--- a/unified-runtime/source/adapters/cuda/CMakeLists.txt ++++ b/unified-runtime/source/adapters/cuda/CMakeLists.txt +@@ -62,14 +62,14 @@ add_library(cudadrv SHARED IMPORTED GLOBAL) + if (WIN32) + set_target_properties( + cudadrv PROPERTIES +- IMPORTED_IMPLIB ${CUDA_cuda_driver_LIBRARY} +- INTERFACE_INCLUDE_DIRECTORIES ${CUDAToolkit_INCLUDE_DIRS} ++ IMPORTED_IMPLIB "${CUDA_cuda_driver_LIBRARY}" ++ INTERFACE_INCLUDE_DIRECTORIES "${CUDAToolkit_INCLUDE_DIRS}" + ) + else() + set_target_properties( + cudadrv PROPERTIES +- IMPORTED_LOCATION ${CUDA_cuda_driver_LIBRARY} +- INTERFACE_INCLUDE_DIRECTORIES ${CUDAToolkit_INCLUDE_DIRS} ++ IMPORTED_LOCATION "${CUDA_cuda_driver_LIBRARY}" ++ INTERFACE_INCLUDE_DIRECTORIES "${CUDAToolkit_INCLUDE_DIRS}" + ) + endif() +