forked from rarias/jungle
Refactor intel-oneapi into deb and open subfolders
This commit is contained in:
71
pkgs/intel-oneapi/common/wrapper.nix
Normal file
71
pkgs/intel-oneapi/common/wrapper.nix
Normal file
@@ -0,0 +1,71 @@
|
||||
{
|
||||
stdenv,
|
||||
lib,
|
||||
gcc,
|
||||
libgcc,
|
||||
wrapCCWith,
|
||||
}:
|
||||
|
||||
{
|
||||
cc,
|
||||
extraPath ? lib.makeBinPath (
|
||||
[ gcc.cc ] ++ (lib.optionals (cc.enableCuda or false) [ cc.cudaPackages.cudatoolkit ])
|
||||
),
|
||||
extraBuildCommands ? "",
|
||||
extraInstallCommands ? "",
|
||||
}:
|
||||
|
||||
let
|
||||
targetConfig = stdenv.targetPlatform.config;
|
||||
in
|
||||
(wrapCCWith {
|
||||
inherit cc;
|
||||
|
||||
nixSupport = {
|
||||
cc-ldflags = [
|
||||
"-L${gcc.cc}/lib/gcc/${targetConfig}/${gcc.version}"
|
||||
"-L${gcc.cc.lib}/lib"
|
||||
"-L${libgcc.out}/lib"
|
||||
"-L${gcc.libc}/lib"
|
||||
"-L${cc}/lib"
|
||||
];
|
||||
cc-cflags = [
|
||||
"--gcc-toolchain=${gcc.cc}"
|
||||
"-isystem ${cc.original or cc}/lib/clang/${toString cc.llvmMajorVersion}/include"
|
||||
"-isystem ${cc}/include"
|
||||
"-isystem ${cc}/include/intel64"
|
||||
"-isystem ${gcc.cc}/lib/gcc/${targetConfig}/${gcc.version}/include"
|
||||
];
|
||||
libcxx-cxxflags = [
|
||||
"-isystem ${gcc.cc}/include/c++/${gcc.version}"
|
||||
"-isystem ${gcc.cc}/include/c++/${gcc.version}/${targetConfig}"
|
||||
];
|
||||
};
|
||||
|
||||
extraBuildCommands = ''
|
||||
# FIXME: We should find a better way to modify the PATH instead of using
|
||||
# this ugly hack. See https://jungle.bsc.es/git/rarias/bscpkgs/issues/9
|
||||
echo 'path_backup="${extraPath}:$path_backup"' >>$out/nix-support/cc-wrapper-hook
|
||||
|
||||
# Disable hardening by default
|
||||
echo "" > $out/nix-support/add-hardening.sh
|
||||
|
||||
pushd $ccPath
|
||||
for i in $ {llvm,sycl}-* ; do
|
||||
ln -s $ccPath/$i $out/bin/$i
|
||||
done
|
||||
popd
|
||||
|
||||
# Use this to detect when a compiler subprocess is called
|
||||
# from icpx (--fsycl-host-compiler)
|
||||
echo 'export NIX_CC_WRAPPER_INTEL=1' >>$out/nix-support/cc-wrapper-hook
|
||||
|
||||
# oneMath looks for sycl libraries in bin/../lib
|
||||
ln -s ${cc}/lib $out/lib
|
||||
ln -s ${cc}/include $out/include
|
||||
''
|
||||
+ extraBuildCommands;
|
||||
}).overrideAttrs
|
||||
(old: {
|
||||
installPhase = old.installPhase + extraInstallCommands;
|
||||
})
|
||||
@@ -4,12 +4,10 @@
|
||||
lib,
|
||||
symlinkJoin,
|
||||
autoPatchelfHook,
|
||||
wrapCCWith,
|
||||
wrapIntel,
|
||||
overrideCC,
|
||||
gcc,
|
||||
hwloc,
|
||||
libelf,
|
||||
libgcc,
|
||||
libffi_3_3,
|
||||
libpsm2,
|
||||
libuuid,
|
||||
@@ -41,79 +39,16 @@ lib.makeOverridable (
|
||||
|
||||
inherit (components) llvmMajorVersion;
|
||||
|
||||
__components = removeAttrs components [ "extraPackages" "llvmMajorVersion" ];
|
||||
__components = removeAttrs components [
|
||||
"extraPackages"
|
||||
"llvmMajorVersion"
|
||||
];
|
||||
_components = __components;
|
||||
# _components = lib.traceSeqN 2 {
|
||||
# inherit unpatched __components;
|
||||
# deps = builtins.map (x: "${x.pname}-${x.version}") unpatched.deps;
|
||||
# } __components;
|
||||
|
||||
wrapIntel =
|
||||
cc:
|
||||
let
|
||||
targetConfig = stdenv.targetPlatform.config;
|
||||
in
|
||||
(wrapCCWith {
|
||||
inherit cc;
|
||||
|
||||
nixSupport = {
|
||||
cc-ldflags = [
|
||||
"-L${gcc.cc}/lib/gcc/${targetConfig}/${gcc.version}"
|
||||
"-L${gcc.cc.lib}/lib"
|
||||
"-L${libgcc.out}/lib"
|
||||
"-L${cc}/lib"
|
||||
];
|
||||
cc-cflags = [
|
||||
"--gcc-toolchain=${gcc.cc}"
|
||||
"-isystem ${cc.original or cc}/lib/clang/${toString cc.llvmMajorVersion}/include"
|
||||
"-isystem ${cc}/include"
|
||||
"-isystem ${cc}/include/intel64"
|
||||
"-isystem ${gcc.cc}/lib/gcc/${targetConfig}/${gcc.version}/include"
|
||||
];
|
||||
libcxx-cxxflags = [
|
||||
# "--gcc-toolchain=${gcc.cc}"
|
||||
"-isystem ${gcc.cc}/include/c++/${gcc.version}"
|
||||
"-isystem ${gcc.cc}/include/c++/${gcc.version}/${targetConfig}"
|
||||
];
|
||||
};
|
||||
|
||||
extraBuildCommands = ''
|
||||
# FIXME: We should find a better way to modify the PATH instead of using
|
||||
# this ugly hack. See https://jungle.bsc.es/git/rarias/bscpkgs/issues/9
|
||||
echo 'path_backup="${gcc.cc}/bin:$path_backup"' >>$out/nix-support/cc-wrapper-hook
|
||||
|
||||
# Disable hardening by default
|
||||
echo "" > $out/nix-support/add-hardening.sh
|
||||
|
||||
wrap icx $wrapper $ccPath/icx
|
||||
wrap icpx $wrapper $ccPath/icpx
|
||||
wrap ifx $wrapper $ccPath/ifx
|
||||
|
||||
ln -s $out/bin/icpx $out/bin/c++
|
||||
ln -s $out/bin/icx $out/bin/cc
|
||||
|
||||
ln -s $ccPath/sycl-ls $out/bin/sycl-ls
|
||||
ln -s $ccPath/sycl-trace $out/bin/sycl-trace
|
||||
|
||||
sed -i 's/.*isCxx=0/isCxx=1/' $out/bin/icpx
|
||||
|
||||
# Use this to detect when a compiler subprocess is called
|
||||
# from icpx (--fsycl-host-compiler)
|
||||
echo 'export NIX_CC_WRAPPER_INTEL=1' >>$out/nix-support/cc-wrapper-hook
|
||||
|
||||
# oneMath looks for sycl libraries in bin/../lib
|
||||
ln -s ${cc}/lib $out/lib
|
||||
ln -s ${cc}/include $out/include
|
||||
'';
|
||||
}).overrideAttrs
|
||||
(old: {
|
||||
installPhase = old.installPhase + ''
|
||||
export named_cc="icx"
|
||||
export named_cxx="icpx"
|
||||
export named_fc="ifx"
|
||||
'';
|
||||
});
|
||||
|
||||
in
|
||||
stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
pname = lib.removeSuffix "-extracted" unpatched.pname;
|
||||
@@ -196,7 +131,25 @@ lib.makeOverridable (
|
||||
|
||||
stdenv = overrideCC stdenv finalAttrs.finalPackage.cc;
|
||||
|
||||
cc = wrapIntel finalAttrs.finalPackage.pkgs.compiler;
|
||||
cc = wrapIntel {
|
||||
cc = finalAttrs.finalPackage.pkgs.compiler;
|
||||
extraBuildCommands = ''
|
||||
wrap icx $wrapper $ccPath/icx
|
||||
wrap icpx $wrapper $ccPath/icpx
|
||||
wrap ifx $wrapper $ccPath/ifx
|
||||
|
||||
ln -s $out/bin/icpx $out/bin/c++
|
||||
ln -s $out/bin/icx $out/bin/cc
|
||||
|
||||
sed -i 's/.*isCxx=0/isCxx=1/' $out/bin/icpx
|
||||
'';
|
||||
|
||||
extraInstallCommands = ''
|
||||
export named_cc="icx"
|
||||
export named_cxx="icpx"
|
||||
export named_fc="ifx"
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
})
|
||||
246
pkgs/intel-oneapi/open/default.nix
Normal file
246
pkgs/intel-oneapi/open/default.nix
Normal file
@@ -0,0 +1,246 @@
|
||||
{
|
||||
stdenv,
|
||||
lib,
|
||||
ninja,
|
||||
autoAddDriverRunpath,
|
||||
wrapCC,
|
||||
cmake,
|
||||
emhash,
|
||||
fetchFromGitHub,
|
||||
khronos-ocl-icd-loader,
|
||||
libbacktrace,
|
||||
opencl-headers,
|
||||
parallel-hashmap,
|
||||
perl,
|
||||
pkg-config,
|
||||
python3,
|
||||
spirv-headers,
|
||||
spirv-tools,
|
||||
symlinkJoin,
|
||||
zlib,
|
||||
|
||||
config,
|
||||
|
||||
cudaPackages ? null,
|
||||
enableCuda ? config.cudaSupport,
|
||||
}:
|
||||
|
||||
let
|
||||
|
||||
llvmMajorVersion = "21";
|
||||
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/...>
|
||||
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
|
||||
]
|
||||
++ lib.optionals enableCuda [
|
||||
autoAddDriverRunpath
|
||||
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"
|
||||
"libdevice"
|
||||
]
|
||||
++ 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)
|
||||
];
|
||||
|
||||
hardeningDisable = [ "zerocallusedregs" ];
|
||||
|
||||
postPatch =
|
||||
|
||||
let
|
||||
# See the postPatch phase for details on why this is used
|
||||
ccWrapperStub = wrapCC (
|
||||
stdenv.mkDerivation {
|
||||
name = "ccWrapperStub";
|
||||
dontUnpack = true;
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin
|
||||
cat > $out/bin/clang-${llvmMajorVersion} <<'EOF'
|
||||
#!/bin/sh
|
||||
exec "$NIX_BUILD_TOP/source/build/bin/clang-${llvmMajorVersion}" "$@"
|
||||
EOF
|
||||
chmod +x $out/bin/clang-${llvmMajorVersion}
|
||||
cp $out/bin/clang-${llvmMajorVersion} $out/bin/clang
|
||||
cp $out/bin/clang-${llvmMajorVersion} $out/bin/clang++
|
||||
'';
|
||||
passthru.isClang = true;
|
||||
}
|
||||
);
|
||||
in
|
||||
''
|
||||
# Parts of libdevice are built using the freshly-built compiler.
|
||||
# As it tries to link to system libraries, we need to wrap it with the
|
||||
# usual nix cc-wrapper.
|
||||
# Since the compiler to be wrapped is not available at this point,
|
||||
# we use a stub that points to where it will be later on
|
||||
# in `$NIX_BUILD_TOP/source/build/bin/clang-${llvmMajorVersion}`
|
||||
substituteInPlace libdevice/cmake/modules/SYCLLibdevice.cmake \
|
||||
--replace-fail "\''${clang_exe}" "${ccWrapperStub}/bin/clang++"
|
||||
'';
|
||||
|
||||
passthru = {
|
||||
inherit llvmMajorVersion;
|
||||
inherit enableCuda cudaPackages;
|
||||
};
|
||||
|
||||
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
|
||||
];
|
||||
};
|
||||
}
|
||||
23
pkgs/intel-oneapi/open/fix-ur.patch
Normal file
23
pkgs/intel-oneapi/open/fix-ur.patch
Normal file
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user