intel-graphics-compiler: move opencl-clang into the package (#440534)

This commit is contained in:
Emily
2025-09-14 17:15:16 +00:00
committed by GitHub
4 changed files with 70 additions and 195 deletions
@@ -2,82 +2,105 @@
lib,
stdenv,
fetchFromGitHub,
bash,
cmake,
runCommandLocal,
ninja,
git,
bison,
flex,
zlib,
intel-compute-runtime,
llvmPackages_15,
opencl-clang,
python3,
spirv-tools,
spirv-headers,
spirv-llvm-translator,
buildWithPatches ? true,
}:
let
vc_intrinsics_src = fetchFromGitHub {
owner = "intel";
repo = "vc-intrinsics";
rev = "v0.23.1";
hash = "sha256-7coQegLcgIKiqnonZmgrKlw6FCB3ltSh6oMMvdopeQc=";
};
inherit (llvmPackages_15) lld llvm;
inherit (if buildWithPatches then opencl-clang else llvmPackages_15) clang libclang;
spirv-llvm-translator' = spirv-llvm-translator.override { inherit llvm; };
# Handholding the braindead build script
# cmake requires an absolute path
prebuilds = runCommandLocal "igc-cclang-prebuilds" { } ''
mkdir $out
ln -s ${clang}/bin/clang $out/
ln -s ${opencl-clang}/lib/* $out/
ln -s ${lib.getLib libclang}/lib/clang/${lib.getVersion clang}/include/opencl-c.h $out/
ln -s ${lib.getLib libclang}/lib/clang/${lib.getVersion clang}/include/opencl-c-base.h $out/
'';
in
stdenv.mkDerivation rec {
pname = "intel-graphics-compiler";
version = "2.16.0";
src = fetchFromGitHub {
owner = "intel";
repo = "intel-graphics-compiler";
tag = "v${version}";
hash = "sha256-vtVktc77OT7OANVXnLvEQx+NEQBPrTE5FFynXhpsK7o=";
};
# See the repository for expected versions:
# <https://github.com/intel/intel-graphics-compiler/blob/v2.16.0/documentation/build_ubuntu.md#revision-table>
srcs = [
(fetchFromGitHub {
name = "igc";
owner = "intel";
repo = "intel-graphics-compiler";
tag = "v${version}";
hash = "sha256-vtVktc77OT7OANVXnLvEQx+NEQBPrTE5FFynXhpsK7o=";
})
(fetchFromGitHub {
name = "llvm-project";
owner = "llvm";
repo = "llvm-project";
tag = "llvmorg-15.0.7";
hash = "sha256-wjuZQyXQ/jsmvy6y1aksCcEDXGBjuhpgngF3XQJ/T4s=";
})
(fetchFromGitHub {
name = "vc-intrinsics";
owner = "intel";
repo = "vc-intrinsics";
tag = "v0.23.1";
hash = "sha256-7coQegLcgIKiqnonZmgrKlw6FCB3ltSh6oMMvdopeQc=";
})
(fetchFromGitHub {
name = "opencl-clang";
owner = "intel";
repo = "opencl-clang";
tag = "v15.0.3";
hash = "sha256-JkYFmnDh7Ot3Br/818aLN33COEG7+xyOf8OhdoJX9Cw==";
})
(fetchFromGitHub {
name = "llvm-spirv";
owner = "KhronosGroup";
repo = "SPIRV-LLVM-Translator";
tag = "v15.0.15";
hash = "sha256-kFVDS+qwoG1AXrZ8LytoiLVbZkTGR9sO+Wrq3VGgWNQ=";
})
];
sourceRoot = ".";
cmakeDir = "../igc";
postUnpack = ''
chmod -R +w .
mv opencl-clang llvm-spirv llvm-project/llvm/projects/
'';
postPatch = ''
substituteInPlace IGC/AdaptorOCL/igc-opencl.pc.in \
substituteInPlace igc/IGC/AdaptorOCL/igc-opencl.pc.in \
--replace-fail '/@CMAKE_INSTALL_INCLUDEDIR@' "/include" \
--replace-fail '/@CMAKE_INSTALL_LIBDIR@' "/lib"
chmod +x IGC/Scripts/igc_create_linker_script.sh
patchShebangs --build IGC/Scripts/igc_create_linker_script.sh
chmod +x igc/IGC/Scripts/igc_create_linker_script.sh
patchShebangs --build igc/IGC/Scripts/igc_create_linker_script.sh
# The build system only applies patches when the sources are in a
# Git repository.
git -C llvm-project init
git -C llvm-project -c user.name=nixbld -c user.email= commit --allow-empty -m stub
substituteInPlace llvm-project/llvm/projects/opencl-clang/cmake/modules/CMakeFunctions.cmake \
--replace-fail 'COMMAND ''${GIT_EXECUTABLE} am --3way --ignore-whitespace -C0 ' \
'COMMAND patch -p1 --ignore-whitespace -i '
'';
nativeBuildInputs = [
bash
bison
cmake
flex
git
ninja
(python3.withPackages (
ps: with ps; [
mako
pyyaml
]
))
zlib
];
buildInputs = [
lld
llvm
spirv-headers
spirv-llvm-translator'
spirv-tools
];
@@ -87,11 +110,10 @@ stdenv.mkDerivation rec {
doCheck = false;
cmakeFlags = [
"-DVC_INTRINSICS_SRC=${vc_intrinsics_src}"
"-DCCLANG_BUILD_PREBUILDS=ON"
"-DCCLANG_BUILD_PREBUILDS_DIR=${prebuilds}"
"-DIGC_OPTION__SPIRV_TOOLS_MODE=Prebuilds"
"-DIGC_OPTION__VC_INTRINSICS_MODE=Source"
"-DIGC_OPTION__USE_PREINSTALLED_SPIRV_HEADERS=ON"
"-DSPIRV-Headers_INCLUDE_DIR=${spirv-headers}/include"
"-DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=${spirv-headers.src}"
"-Wno-dev"
];
@@ -102,7 +124,7 @@ stdenv.mkDerivation rec {
meta = with lib; {
description = "LLVM-based compiler for OpenCL targeting Intel Gen graphics hardware";
homepage = "https://github.com/intel/intel-graphics-compiler";
changelog = "https://github.com/intel/intel-graphics-compiler/releases/tag/${src.rev}";
changelog = "https://github.com/intel/intel-graphics-compiler/releases/tag/${version}";
license = licenses.mit;
platforms = platforms.linux;
maintainers = with maintainers; [ SuperSandro2000 ];
@@ -1,25 +0,0 @@
diff --git a/cl_headers/CMakeLists.txt b/cl_headers/CMakeLists.txt
index 3dd2ea4..aeae6e9 100644
--- a/cl_headers/CMakeLists.txt
+++ b/cl_headers/CMakeLists.txt
@@ -11,12 +11,14 @@ add_custom_command(
)
endfunction(copy_file)
-if(USE_PREBUILT_LLVM)
- set(OPENCL_HEADERS_DIR
- "${LLVM_LIBRARY_DIRS}/clang/${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}/include/")
-else(USE_PREBUILT_LLVM)
- set(OPENCL_HEADERS_DIR "${CLANG_SOURCE_DIR}/lib/Headers")
-endif(USE_PREBUILT_LLVM)
+if(NOT DEFINED OPENCL_HEADERS_DIR)
+ if(USE_PREBUILT_LLVM)
+ set(OPENCL_HEADERS_DIR
+ "${LLVM_LIBRARY_DIRS}/clang/${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}/include/")
+ else(USE_PREBUILT_LLVM)
+ set(OPENCL_HEADERS_DIR "${CLANG_SOURCE_DIR}/lib/Headers")
+ endif(USE_PREBUILT_LLVM)
+endif()
copy_file(${OPENCL_HEADERS_DIR}/opencl-c.h opencl-c.h)
add_custom_target (
-123
View File
@@ -1,123 +0,0 @@
{
lib,
stdenv,
applyPatches,
fetchFromGitHub,
cmake,
git,
llvmPackages_15,
spirv-llvm-translator,
buildWithPatches ? true,
}:
let
addPatches =
component: pkg:
pkg.overrideAttrs (oldAttrs: {
postPatch = oldAttrs.postPatch or "" + ''
for p in ${passthru.patchesOut}/${component}/*; do
patch -p1 -i "$p"
done
'';
});
llvmPkgs = llvmPackages_15;
inherit (llvmPkgs) llvm;
spirv-llvm-translator' = spirv-llvm-translator.override { inherit llvm; };
libclang = if buildWithPatches then passthru.libclang else llvmPkgs.libclang;
passthru = rec {
spirv-llvm-translator = spirv-llvm-translator';
llvm = addPatches "llvm" llvmPkgs.llvm;
libclang = addPatches "clang" llvmPkgs.libclang;
clang-unwrapped = libclang.out;
clang = llvmPkgs.clang.override {
cc = clang-unwrapped;
};
patchesOut = stdenv.mkDerivation {
pname = "opencl-clang-patches";
inherit version src;
# Clang patches assume the root is the llvm root dir
# but clang root in nixpkgs is the clang sub-directory
postPatch = ''
for filename in patches/clang/*.patch; do
substituteInPlace "$filename" \
--replace-fail "a/clang/" "a/" \
--replace-fail "b/clang/" "b/"
done
'';
installPhase = ''
[ -d patches ] && cp -r patches/ $out || mkdir $out
mkdir -p $out/clang $out/llvm
'';
};
};
version = "15.0.3";
src = applyPatches {
src = fetchFromGitHub {
owner = "intel";
repo = "opencl-clang";
tag = "v${version}";
hash = "sha256-JkYFmnDh7Ot3Br/818aLN33COEG7+xyOf8OhdoJX9Cw=";
};
patches = [
# Build script tries to find Clang OpenCL headers under ${llvm}
# Work around it by specifying that directory manually.
./opencl-headers-dir.patch
];
postPatch = ''
# fix not be able to find clang from PATH
substituteInPlace cl_headers/CMakeLists.txt \
--replace-fail " NO_DEFAULT_PATH" ""
''
+ lib.optionalString stdenv.hostPlatform.isDarwin ''
# Uses linker flags that are not supported on Darwin.
sed -i -e '/SET_LINUX_EXPORTS_FILE/d' CMakeLists.txt
substituteInPlace CMakeLists.txt \
--replace-fail '-Wl,--no-undefined' ""
'';
};
in
stdenv.mkDerivation {
pname = "opencl-clang";
inherit version src;
nativeBuildInputs = [
cmake
git
llvm.dev
];
buildInputs = [
libclang
llvm
spirv-llvm-translator'
];
cmakeFlags = [
"-DPREFERRED_LLVM_VERSION=${lib.getVersion llvm}"
"-DOPENCL_HEADERS_DIR=${lib.getLib libclang}/lib/clang/${lib.getVersion libclang}/include/"
"-DLLVMSPIRV_INCLUDED_IN_LLVM=OFF"
"-DSPIRV_TRANSLATOR_DIR=${spirv-llvm-translator'}"
];
inherit passthru;
meta = with lib; {
homepage = "https://github.com/intel/opencl-clang/";
description = "Clang wrapper library with an OpenCL-oriented API and the ability to compile OpenCL C kernels to SPIR-V modules";
license = licenses.ncsa;
maintainers = [ ];
platforms = platforms.all;
# error: invalid value 'CL3.0' in '-cl-std=CL3.0'
broken = stdenv.hostPlatform.isDarwin;
};
}
+1
View File
@@ -1808,6 +1808,7 @@ mapAliases {
opencv2 = throw "opencv2 has been removed as it is obsolete and was not used by any other package; please migrate to OpenCV 4"; # Added 2024-08-20
opencv3 = throw "opencv3 has been removed as it is obsolete and was not used by any other package; please migrate to OpenCV 4"; # Added 2024-08-20
openafs_1_8 = openafs; # Added 2022-08-22
opencl-clang = throw "opencl-clang has been integrated into intel-graphics-compiler"; # Added 2025-09-10
opencl-info = throw "opencl-info has been removed, as the upstream is unmaintained; consider using 'clinfo' instead"; # Added 2024-06-12
opencomposite-helper = throw "opencomposite-helper has been removed from nixpkgs as it causes issues with some applications. See https://wiki.nixos.org/wiki/VR#OpenComposite for the recommended setup"; # Added 2024-09-07
openconnect_gnutls = openconnect; # Added 2022-03-29