Archived
1
0
forked from rarias/bscpkgs

10 Commits

Author SHA1 Message Date
9aa866ee76 ompss: no bintools intel 2025-06-16 15:54:55 +02:00
3f6950c1f0 ompss: unset flags when intel for real this time 2025-06-16 15:54:55 +02:00
53f556626e ompss: set flags when intel 2025-06-16 15:54:55 +02:00
f3483e8a88 llvm: add include cc 2025-06-16 15:54:55 +02:00
2d637cc88c llvm: disable hardening 2025-06-16 15:54:55 +02:00
8836ca4359 intel: more messing around 2025-06-16 15:54:55 +02:00
8ffb971348 intel: reorder wrapper isystems 2025-06-16 15:54:54 +02:00
bdbfd77446 Simplify findMatch in intel-oneapi 2023
This should be a noop
2025-06-16 13:54:25 +02:00
83ae2f489d Fix parsing of new apt package list for oneapi 2023
New apt list does not have Package: as the first entry for all packages
2025-06-16 13:54:24 +02:00
39157ea318 Add oneMath
With support for MKL and CUDA enabled by default
2025-06-16 13:54:24 +02:00
5 changed files with 133 additions and 38 deletions

View File

@@ -24,6 +24,7 @@ let
intelPackages_2024 = final.intel-apt.hpckit_2024; intelPackages_2024 = final.intel-apt.hpckit_2024;
intelPackages_2025 = final.intel-apt.hpckit_2025; intelPackages_2025 = final.intel-apt.hpckit_2025;
intelPackages = final.intelPackages_2025; intelPackages = final.intelPackages_2025;
oneMath = callPackage ./pkgs/onemath/default.nix { };
jemallocNanos6 = callPackage ./pkgs/nanos6/jemalloc.nix { }; jemallocNanos6 = callPackage ./pkgs/nanos6/jemalloc.nix { };
lmbench = callPackage ./pkgs/lmbench/default.nix { }; lmbench = callPackage ./pkgs/lmbench/default.nix { };
mcxx = callPackage ./pkgs/mcxx/default.nix { }; mcxx = callPackage ./pkgs/mcxx/default.nix { };

View File

@@ -47,40 +47,31 @@ let
installPhase = '' installPhase = ''
awk -F': ' '\ awk -F': ' '\
BEGIN { print "[ {" } \ BEGIN { print "[ {" } \
NR>1 && /^Package: / { print "} {"; } \ NF==0 { empty=1; } \
NF && empty { print "} {"; empty=0; } \
/: / { printf "%s = \"%s\";\n", $1, $2 } \ /: / { printf "%s = \"%s\";\n", $1, $2 } \
END { print "} ]" }' $srcs > $out END { print "} ]" }' $srcs > $out
''; '';
}; };
aptPackages = import aptPackageIndex; findMatch = name:
apthost = "https://apt.repos.intel.com/oneapi/";
getSum = pkgList: name:
let let
matches = lib.filter (x: name == x.Package) pkgList; aptPackages = import aptPackageIndex;
#n = lib.length matches; matches = lib.filter (x: name == x.Package) aptPackages;
#match = builtins.trace (name + " -- ${builtins.toString n}") (lib.elemAt matches 0);
match = lib.elemAt matches 0;
in
match.SHA256;
getUrl = pkgList: name:
let
matches = lib.filter (x: name == x.Package) pkgList;
#match = assert lib.length matches == 1; lib.elemAt matches 0;
n = lib.length matches; n = lib.length matches;
match = match = builtins.traceVerbose (name + " -- ${builtins.toString n}") (builtins.head matches);
#builtins.trace (name + " -- n=${builtins.toString n}")
(lib.elemAt matches 0); apthost = "https://apt.repos.intel.com/oneapi/";
in in
apthost + match.Filename; {
url = apthost + match.Filename;
sha256 = match.SHA256;
};
uncompressDebs = debs: name: stdenv.mkDerivation { uncompressDebs = debs: name: stdenv.mkDerivation {
name = name; name = name;
srcs = debs; srcs = debs;
buildInputs = [ dpkg ]; nativeBuildInputs = [ dpkg ];
phases = [ "installPhase" ]; phases = [ "installPhase" ];
installPhase = '' installPhase = ''
mkdir -p $out mkdir -p $out
@@ -93,10 +84,7 @@ let
joinDebs = name: names: joinDebs = name: names:
let let
urls = builtins.map (x: getUrl aptPackages x) names; debs = builtins.map (x: builtins.fetchurl (findMatch x)) names;
sums = builtins.map (x: getSum aptPackages x) names;
getsrc = url: sha256: builtins.fetchurl { inherit url sha256; };
debs = lib.zipListsWith getsrc urls sums;
in in
uncompressDebs debs "${name}-source"; uncompressDebs debs "${name}-source";
@@ -453,7 +441,7 @@ let
''; '';
}; };
ifort-wrapper = wrapIntel rec { ifort-wrapper = wrapIntel {
cc = intel-compiler-fortran; cc = intel-compiler-fortran;
mygcc = gcc; mygcc = gcc;
extraBuild = '' extraBuild = ''

View File

@@ -46,14 +46,24 @@ let
in (wrapCCWith { in (wrapCCWith {
inherit cc; inherit cc;
extraBuildCommands = '' extraBuildCommands = ''
echo "-isystem ${cc}/include" >> $out/nix-support/cc-cflags
echo "-isystem ${cc}/include/intel64" >> $out/nix-support/cc-cflags
echo "-L${gcc.cc}/lib/gcc/${targetConfig}/${gcc.version}" >> $out/nix-support/cc-ldflags echo "-L${gcc.cc}/lib/gcc/${targetConfig}/${gcc.version}" >> $out/nix-support/cc-ldflags
echo "-L${gcc.cc.lib}/lib" >> $out/nix-support/cc-ldflags echo "-L${gcc.cc.lib}/lib" >> $out/nix-support/cc-ldflags
echo "-L${cc}/lib" >> $out/nix-support/cc-ldflags echo "-L${cc}/lib" >> $out/nix-support/cc-ldflags
echo "--gcc-toolchain=${gcc.cc}" >> $out/nix-support/libcxx-cxxflags echo "--gcc-toolchain=${gcc.cc}" >> $out/nix-support/cc-cflags
# For some reason, If we don't resolve the realpath things go wrong
for stddef in ${cc}/lib/clang/*/include/stddef.h ; do
dir=$(dirname $(realpath "$stddef"))
echo "-isystem $dir" >> $out/nix-support/cc-cflags
done
echo "-isystem ${cc}/include" >> $out/nix-support/cc-cflags
echo "-isystem ${cc}/include/intel64" >> $out/nix-support/cc-cflags
for dir in ${gcc.cc}/lib/gcc/${targetConfig}/*/include; do
echo "-isystem $dir" >> $out/nix-support/cc-cflags
done
for dir in ${gcc.cc}/include/c++/*; do for dir in ${gcc.cc}/include/c++/*; do
echo "-isystem $dir" >> $out/nix-support/libcxx-cxxflags echo "-isystem $dir" >> $out/nix-support/libcxx-cxxflags
@@ -68,12 +78,6 @@ let
# Disable hardening by default # Disable hardening by default
echo "" > $out/nix-support/add-hardening.sh echo "" > $out/nix-support/add-hardening.sh
# For some reason, If we don't resolve the realpath things go wrong
for stddef in ${cc}/lib/clang/*/include/stddef.h ; do
dir=$(dirname $(realpath "$stddef"))
echo "-isystem $dir" >> $out/nix-support/cc-cflags
done
'' + extraBuildCommands; '' + extraBuildCommands;
} // (removeAttrs args ["cc" "extraBuildCommands" "extraInstall"]) } // (removeAttrs args ["cc" "extraBuildCommands" "extraInstall"])
).overrideAttrs (old: { ).overrideAttrs (old: {
@@ -147,6 +151,10 @@ stdenvNoCC.mkDerivation (finalAttrs: {
ln -s $out/bin/icpx $out/bin/c++ ln -s $out/bin/icpx $out/bin/c++
ln -s $out/bin/icx $out/bin/cc ln -s $out/bin/icx $out/bin/cc
# 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
sed -i 's/.*isCxx=0/isCxx=1/' $out/bin/icpx sed -i 's/.*isCxx=0/isCxx=1/' $out/bin/icpx
ln -s ${finalAttrs.finalPackage.pkgs.compiler}/lib $out/lib ln -s ${finalAttrs.finalPackage.pkgs.compiler}/lib $out/lib

View File

@@ -3,6 +3,7 @@
, lib , lib
, gcc , gcc
, clangOmpss2Unwrapped , clangOmpss2Unwrapped
, writeShellScript
, openmp ? null , openmp ? null
, wrapCCWith , wrapCCWith
, llvmPackages_latest , llvmPackages_latest
@@ -37,6 +38,22 @@ let
inherit gcc; inherit gcc;
cc = clangOmpss2Unwrapped; cc = clangOmpss2Unwrapped;
gccVersion = with versions; let v = gcc.version; in concatStringsSep "." [(major v) (minor v) (patch v)]; gccVersion = with versions; let v = gcc.version; in concatStringsSep "." [(major v) (minor v) (patch v)];
resetIntelCCFlags = let tconf = builtins.replaceStrings ["-"] ["_"] targetConfig;
in writeShellScript "remove-intel.sh" ''
if [ "$NIX_CC_WRAPPER_INTEL" = 1 ]; then
unset NIX_CFLAGS_COMPILE_${tconf}
unset NIX_CFLAGS_COMPILE_BEFORE_${tconf}
unset NIX_CFLAGS_LINK_${tconf}
unset NIX_CXXSTDLIB_COMPILE_${tconf}
unset NIX_CXXSTDLIB_LINK_${tconf}
unset NIX_GNATFLAGS_COMPILE_${tconf}
unset NIX_CC_WRAPPER_FLAGS_SET_${tconf}
# unset NIX_BINTOOLS_WRAPPER_FLAGS_${tconf}
fi
'';
in wrapCCWith { in wrapCCWith {
inherit cc bintools; inherit cc bintools;
# extraPackages adds packages to depsTargetTargetPropagated # extraPackages adds packages to depsTargetTargetPropagated
@@ -47,6 +64,9 @@ in wrapCCWith {
echo "-L${gcc.cc}/lib/gcc/${targetConfig}/${gccVersion}" >> $out/nix-support/cc-ldflags echo "-L${gcc.cc}/lib/gcc/${targetConfig}/${gccVersion}" >> $out/nix-support/cc-ldflags
echo "-L${gcc.cc.lib}/lib" >> $out/nix-support/cc-ldflags echo "-L${gcc.cc.lib}/lib" >> $out/nix-support/cc-ldflags
for dir in ${gcc.cc}/lib/gcc/${targetConfig}/*/include; do
echo "-isystem $dir" >> $out/nix-support/cc-cflags
done
for dir in ${gcc.cc}/include/c++/*; do for dir in ${gcc.cc}/include/c++/*; do
echo "-isystem $dir" >> $out/nix-support/libcxx-cxxflags echo "-isystem $dir" >> $out/nix-support/libcxx-cxxflags
done done
@@ -58,7 +78,12 @@ in wrapCCWith {
wrap clang++ $wrapper $ccPath/clang++ wrap clang++ $wrapper $ccPath/clang++
'' + optionalString (openmp != null) '' sed -i 's|# Flirting.*|&\nsource ${resetIntelCCFlags}|' $out/bin/clang
sed -i 's|# Flirting.*|&\nsource ${resetIntelCCFlags}|' $out/bin/clang++
echo "" > $out/nix-support/add-hardening.sh
'' + lib.optionalString (openmp != null) ''
echo "export OPENMP_RUNTIME=${ompname}" >> $out/nix-support/cc-wrapper-hook echo "export OPENMP_RUNTIME=${ompname}" >> $out/nix-support/cc-wrapper-hook
'' + optionalString (ompss2rt != null) '' '' + optionalString (ompss2rt != null) ''
echo "export OMPSS2_RUNTIME=${rtname}" >> $out/nix-support/cc-wrapper-hook echo "export OMPSS2_RUNTIME=${rtname}" >> $out/nix-support/cc-wrapper-hook

73
pkgs/onemath/default.nix Normal file
View File

@@ -0,0 +1,73 @@
{ lib
, intelPackages
, withCFlags
, fetchFromGitHub
, cmake
, cudaPackages
, enableNvidia ? true
, withHipTargets ? null # only one target at a time supported
, rocmPackages
, enableMkl ? true
}:
let
enableHip = withHipTargets != null;
stdenv = withCFlags (lib.optionals enableNvidia [ "--cuda-path=${cudaPackages.cudatoolkit}" ]) intelPackages.stdenv;
in
stdenv.mkDerivation rec {
pname = "oneMath";
version = "0.7";
src = fetchFromGitHub {
owner = "uxlfoundation";
repo = "oneMath";
rev = "v${version}";
sha256 = "sha256-De04PUmI68Jx4rJ+MRb+RepayZCapgnouCUCrAu6G38=";
};
cmakeFlags = [
(lib.cmakeBool "ENABLE_MKLCPU_BACKEND" enableMkl)
(lib.cmakeBool "ENABLE_MKLGPU_BACKEND" enableMkl)
(lib.cmakeBool "ENABLE_CUBLAS_BACKEND" enableNvidia)
(lib.cmakeBool "ENABLE_CUFFT_BACKEND" enableNvidia)
(lib.cmakeBool "ENABLE_CURAND_BACKEND" enableNvidia)
(lib.cmakeBool "ENABLE_CUSOLVER_BACKEND" enableNvidia)
(lib.cmakeBool "ENABLE_CUSPARSE_BACKEND" enableNvidia)
(lib.cmakeBool "ENABLE_ROCBLAS_BACKEND" enableHip)
(lib.cmakeBool "ENABLE_ROCFFT_BACKEND" enableHip)
(lib.cmakeBool "ENABLE_ROCSOLVER_BACKEND" enableHip)
(lib.cmakeBool "ENABLE_ROCRAND_BACKEND" enableHip)
(lib.cmakeBool "ENABLE_ROCSPARSE_BACKEND" enableHip)
(lib.cmakeBool "BUILD_FUNCTIONAL_TESTS" false)
(lib.cmakeBool "BUILD_EXAMPLES" false)
] ++ lib.optionals enableHip [
(lib.cmakeFeature "HIP_TARGETS" withHipTargets)
];
nativeBuildInputs = [ cmake ];
buildInputs = lib.optionals (enableMkl) [
intelPackages.mkl
intelPackages.tbb
] ++ lib.optionals (enableHip) [
rocmPackages.rocmPath
rocmPackages.rocblas
rocmPackages.rocfft
rocmPackages.rocsolver
rocmPackages.rocrand
rocmPackages.rocsparse
] ++ lib.optionals (enableNvidia) [
(lib.getDev cudaPackages.cuda_cudart)
cudaPackages.cudatoolkit
cudaPackages.libcublas
cudaPackages.libcurand
cudaPackages.libcufft
cudaPackages.libcusparse
cudaPackages.libcusolver
];
}