Files
nix-dotfiles-v2/packages/intel-sycl/llvm/default.nix
T

157 lines
3.8 KiB
Nix

{
stdenv,
gcc,
writeShellApplication,
wrapCCWith,
src,
version,
cmake,
pkg-config,
python3,
perl,
libz,
libxml2,
ncurses,
hwloc,
level-zero,
unified-memory-framework,
emhash,
parallel-hashmap,
spirv-headers,
opencl-headers,
ocl-icd,
intel-compute-runtime,
pins,
}:
let
root = "/build/source";
cc = wrapCCWith {
cc = writeShellApplication {
name = "clang";
text = ''
exec ${root}/build/bin/clang-22 "$@"
'';
passthru.isClang = true;
};
extraBuildCommands = ''
echo "" > $out/nix-support/add-hardening.sh
'';
nixSupport = {
cc-cflags = [
"-isystem /build/source/build/include"
"-resource-dir=/build/source/build/lib/clang/22"
"--gcc-toolchain=${gcc.cc}"
];
cc-ldflags = [
"-L/build/source/build/lib"
"-L${gcc.cc}/lib/gcc/${stdenv.targetPlatform.config}/${gcc.version}"
"-L${gcc.cc.lib}/lib"
];
};
};
in
stdenv.mkDerivation {
inherit src version;
pname = "intel-llvm";
NIX_CFLAGS_COMPILE = [ "-Wno-unused-command-line-argument" ];
patches = [ ./gnu-install-dirs.patch ];
outputs = [
"out"
"lib"
"dev"
"rsrc"
"python"
];
nativeBuildInputs = [
cmake
pkg-config
python3
perl
];
buildInputs = [
libz
libxml2
ncurses
hwloc
unified-memory-framework
emhash
parallel-hashmap
level-zero
opencl-headers
ocl-icd
];
cmakeBuildType = "Release";
cmakeDir = "../llvm";
cmakeFlags = [
"-DCMAKE_BUILD_TYPE=Release"
"-DLLVM_TARGETS_TO_BUILD=Native"
"-DLLVM_INSTALL_UTILS=ON"
"-DLLVM_ENABLE_ZSTD=ON"
"-DLLVM_USE_STATIC_ZSTD=ON"
"-DLLVM_INSTALL_PACKAGE_DIR=${placeholder "dev"}/lib/cmake/llvm"
"-DLLVM_INCLUDE_TESTS=OFF"
"-DLLVM_BUILD_TESTS=OFF"
"-DLLVM_ENABLE_ASSERTIONS=OFF"
"-DLLVM_ENABLE_DOXYGEN=OFF"
"-DLLVM_ENABLE_SPHINX=OFF"
"-DLLVM_EXTERNAL_PROJECTS=sycl;sycl-jit;llvm-spirv;opencl;xpti;xptifw;libdevice"
"-DLLVM_EXTERNAL_SYCL_SOURCE_DIR=/build/source/sycl"
"-DLLVM_EXTERNAL_SYCL_JIT_SOURCE_DIR=/build/source/sycl-jit"
"-DLLVM_EXTERNAL_LLVM_SPIRV_SOURCE_DIR=/build/source/llvm-spirv"
"-DLLVM_EXTERNAL_XPTI_SOURCE_DIR=/build/source/xpti"
"-DLLVM_EXTERNAL_XPTIFW_SOURCE_DIR=/build/source/xptifw"
"-DLLVM_EXTERNAL_LIBDEVICE_SOURCE_DIR=/build/source/libdevice"
"-DLLVM_ENABLE_PROJECTS=clang;clang-tools-extra;sycl;sycl-jit;llvm-spirv;opencl;xpti;xptifw;libdevice"
"-DSYCL_ENABLE_XPTI_TRACING=ON"
"-DSYCL_COMPILER_VERSION=20260101"
"-DCLANG_RESOURCE_DIR=../lib/clang/22"
"-DFETCHCONTENT_SOURCE_DIR_VC-INTRINSICS=${pins.vc-intrinsics}"
"-DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=${spirv-headers}"
"-DUR_USE_EXTERNAL_UMF=ON"
"-DL0_COMPUTE_RUNTIME_HEADERS=${intel-compute-runtime.src}/level_zero/include"
];
postPatch = ''
substituteInPlace libdevice/cmake/modules/SYCLLibdevice.cmake \
--replace-fail "\''${clang_exe}" "${cc}/bin/clang"
substituteInPlace unified-runtime/cmake/FetchOpenCL.cmake \
--replace-fail "NO_CMAKE_PACKAGE_REGISTRY" ""
'';
postInstall = ''
mkdir -p $python/share
mv $out/share/opt-viewer $python/share/opt-viewer
moveToOutput "bin/llvm-config*" "$dev"
substituteInPlace "$dev/lib/cmake/llvm/LLVMExports-release.cmake" \
--replace-fail "$out/bin/llvm-config" "$dev/bin/llvm-config"
substituteInPlace "$dev/lib/cmake/llvm/LLVMExports.cmake" \
--replace-fail "\''${_IMPORT_PREFIX}/include" "$dev/include"
substituteInPlace "$dev/lib/cmake/llvm/LLVMConfig.cmake" \
--replace-fail 'set(LLVM_BINARY_DIR "''${LLVM_INSTALL_PREFIX}")' "set(LLVM_BINARY_DIR \"$lib\")"
'';
postFixup = ''
mkdir -p $rsrc
mv $out/lib/clang/22/include $rsrc/include
rm -rf $out/lib/clang
'';
passthru.isLLVM = true;
passthru.isClang = true;
}