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