Compare commits
7 Commits
pkgs/tasyc
...
8dab0d82ba
| Author | SHA1 | Date | |
|---|---|---|---|
| 8dab0d82ba | |||
| 958dcd4774 | |||
| 7a6e4232de | |||
| 3b56e905e5 | |||
| 2d41309466 | |||
| deb0cd1488 | |||
| cd1f502ecc |
@@ -2,11 +2,36 @@
|
|||||||
|
|
||||||
{
|
{
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
vim wget git htop tmux pciutils tcpdump ripgrep nix-index nixos-option
|
cmake
|
||||||
nix-diff ipmitool freeipmi ethtool lm_sensors cmake gnumake file tree
|
ethtool
|
||||||
ncdu perf ldns pv
|
file
|
||||||
|
freeipmi
|
||||||
|
git
|
||||||
|
gnumake
|
||||||
|
home-manager
|
||||||
|
htop
|
||||||
|
ipmitool
|
||||||
|
ldns
|
||||||
|
lm_sensors
|
||||||
|
ncdu
|
||||||
|
nix-diff
|
||||||
|
nix-index
|
||||||
|
nix-output-monitor
|
||||||
|
nixfmt-tree
|
||||||
|
nixos-option
|
||||||
|
pciutils
|
||||||
|
perf
|
||||||
|
pv
|
||||||
|
ripgrep
|
||||||
|
tcpdump
|
||||||
|
tmux
|
||||||
|
tree
|
||||||
|
vim
|
||||||
|
wget
|
||||||
|
|
||||||
# From jungle overlay
|
# From jungle overlay
|
||||||
osumb nixgen
|
nixgen
|
||||||
|
osumb
|
||||||
];
|
];
|
||||||
|
|
||||||
programs.direnv.enable = true;
|
programs.direnv.enable = true;
|
||||||
|
|||||||
@@ -194,6 +194,19 @@
|
|||||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOlRX7ZCnqtUJYCxKgWmgSrFCYuA2LHY96rVwqxXPl86 aaguirre@BSC-8488184117"
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOlRX7ZCnqtUJYCxKgWmgSrFCYuA2LHY96rVwqxXPl86 aaguirre@BSC-8488184117"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
emonteir = {
|
||||||
|
uid = 9656;
|
||||||
|
isNormalUser = true;
|
||||||
|
home = "/home/Computational/emonteir";
|
||||||
|
description = "Erwin Royson Monteiro";
|
||||||
|
group = "Computational";
|
||||||
|
hosts = [ "apex" "fox" ];
|
||||||
|
hashedPassword = "$6$0mU88zd3ZuK5NiJQ$DFWL5RMLH6esQM5UyhBCiiNryw4lDDmvJp7Usz3tmevnsiSJr6u0RsUKAnR/K8GRBFrV1.GocrgNjKjik5GY//";
|
||||||
|
openssh.authorizedKeys.keys = [
|
||||||
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOKZKot/Y3F5Wq9pQIXlCbyvQuVVeWMCsAC96Nd+LTcG erwin@Oreo"
|
||||||
|
];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
groups = {
|
groups = {
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ let
|
|||||||
name = "jungle-web";
|
name = "jungle-web";
|
||||||
src = pkgs.fetchgit {
|
src = pkgs.fetchgit {
|
||||||
url = "https://jungle.bsc.es/git/rarias/jungle-website.git";
|
url = "https://jungle.bsc.es/git/rarias/jungle-website.git";
|
||||||
rev = "52abaf4d71652a9ef77a0b098db14ca33bffff4c";
|
rev = "5f18335d14126d2fef134c0cd441771436f7dfa1";
|
||||||
hash = "sha256-/ul9GazbOrOkmlvSgDz/+2W+V+ir5725Y7mVLc3rb0M=";
|
hash = "sha256-s9VBF91sQ7hg9+lrwNFPYgoXTTyXaQcAulCiGJgWERo=";
|
||||||
};
|
};
|
||||||
buildInputs = [ pkgs.hugo ];
|
buildInputs = [ pkgs.hugo ];
|
||||||
buildPhase = ''
|
buildPhase = ''
|
||||||
|
|||||||
27
m/module/tc1-board.nix
Normal file
27
m/module/tc1-board.nix
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
{ lib, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
# Allow user access to FTDI USB device
|
||||||
|
services.udev.packages = lib.singleton (pkgs.writeTextFile {
|
||||||
|
# Needs to be < 73
|
||||||
|
name = "60-ftdi-tc1.rules";
|
||||||
|
text = ''
|
||||||
|
# Bus 003 Device 003: ID 0403:6011 Future Technology Devices International, Ltd FT4232H Quad HS USB-UART/FIFO IC
|
||||||
|
# Use := to make sure it doesn't get changed later
|
||||||
|
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6011", MODE:="0666"
|
||||||
|
'';
|
||||||
|
destination = "/etc/udev/rules.d/60-ftdi-tc1.rules";
|
||||||
|
});
|
||||||
|
|
||||||
|
# Allow access to USB for docker in GitLab runner
|
||||||
|
services.gitlab-runner = {
|
||||||
|
services.gitlab-bsc-docker = {
|
||||||
|
registrationFlags = [
|
||||||
|
# We need raw access to the USB port to reboot the board
|
||||||
|
"--docker-devices /dev/bus/usb/003/003"
|
||||||
|
# And TTY access for the serial port
|
||||||
|
"--docker-devices /dev/ttyUSB2"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -16,6 +16,7 @@
|
|||||||
../module/p.nix
|
../module/p.nix
|
||||||
../module/vpn-dac.nix
|
../module/vpn-dac.nix
|
||||||
../module/hut-substituter.nix
|
../module/hut-substituter.nix
|
||||||
|
../module/tc1-board.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
# Select the this using the ID to avoid mismatches
|
# Select the this using the ID to avoid mismatches
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ let
|
|||||||
name = "jungle-web";
|
name = "jungle-web";
|
||||||
src = pkgs.fetchgit {
|
src = pkgs.fetchgit {
|
||||||
url = "https://jungle.bsc.es/git/rarias/jungle-website.git";
|
url = "https://jungle.bsc.es/git/rarias/jungle-website.git";
|
||||||
rev = "52abaf4d71652a9ef77a0b098db14ca33bffff4c";
|
rev = "5f18335d14126d2fef134c0cd441771436f7dfa1";
|
||||||
hash = "sha256-/ul9GazbOrOkmlvSgDz/+2W+V+ir5725Y7mVLc3rb0M=";
|
hash = "sha256-s9VBF91sQ7hg9+lrwNFPYgoXTTyXaQcAulCiGJgWERo=";
|
||||||
};
|
};
|
||||||
buildInputs = [ pkgs.hugo ];
|
buildInputs = [ pkgs.hugo ];
|
||||||
buildPhase = ''
|
buildPhase = ''
|
||||||
|
|||||||
16
overlay.nix
16
overlay.nix
@@ -19,11 +19,7 @@ let
|
|||||||
cudainfo = prev.callPackage ./pkgs/cudainfo/default.nix { };
|
cudainfo = prev.callPackage ./pkgs/cudainfo/default.nix { };
|
||||||
#extrae = callPackage ./pkgs/extrae/default.nix { }; # Broken and outdated
|
#extrae = callPackage ./pkgs/extrae/default.nix { }; # Broken and outdated
|
||||||
gpi-2 = callPackage ./pkgs/gpi-2/default.nix { };
|
gpi-2 = callPackage ./pkgs/gpi-2/default.nix { };
|
||||||
intel-apt = callPackage ./pkgs/intel-oneapi/packages.nix { };
|
|
||||||
intelPackages_2023 = callPackage ./pkgs/intel-oneapi/2023.nix { };
|
intelPackages_2023 = callPackage ./pkgs/intel-oneapi/2023.nix { };
|
||||||
intelPackages_2024 = final.intel-apt.hpckit_2024;
|
|
||||||
intelPackages_2025 = final.intel-apt.hpckit_2025;
|
|
||||||
intelPackages = final.intelPackages_2025;
|
|
||||||
jemallocNanos6 = callPackage ./pkgs/nanos6/jemalloc.nix { };
|
jemallocNanos6 = callPackage ./pkgs/nanos6/jemalloc.nix { };
|
||||||
# FIXME: Extend this to all linuxPackages variants. Open problem, see:
|
# FIXME: Extend this to all linuxPackages variants. Open problem, see:
|
||||||
# https://discourse.nixos.org/t/whats-the-right-way-to-make-a-custom-kernel-module-available/4636
|
# https://discourse.nixos.org/t/whats-the-right-way-to-make-a-custom-kernel-module-available/4636
|
||||||
@@ -48,7 +44,6 @@ let
|
|||||||
#nix-wrap = callPackage ./pkgs/nix-wrap/default.nix { };
|
#nix-wrap = callPackage ./pkgs/nix-wrap/default.nix { };
|
||||||
nodes = callPackage ./pkgs/nodes/default.nix { };
|
nodes = callPackage ./pkgs/nodes/default.nix { };
|
||||||
nosv = callPackage ./pkgs/nosv/default.nix { };
|
nosv = callPackage ./pkgs/nosv/default.nix { };
|
||||||
oneMath = callPackage ./pkgs/onemath/default.nix { };
|
|
||||||
openmp = callPackage ./pkgs/llvm-ompss2/openmp.nix { monorepoSrc = final.clangOmpss2Unwrapped.src; version = final.clangOmpss2Unwrapped.version; };
|
openmp = callPackage ./pkgs/llvm-ompss2/openmp.nix { monorepoSrc = final.clangOmpss2Unwrapped.src; version = final.clangOmpss2Unwrapped.version; };
|
||||||
openmpv = final.openmp.override { enableNosv = true; enableOvni = true; };
|
openmpv = final.openmp.override { enableNosv = true; enableOvni = true; };
|
||||||
osumb = callPackage ./pkgs/osu/default.nix { };
|
osumb = callPackage ./pkgs/osu/default.nix { };
|
||||||
@@ -66,8 +61,6 @@ let
|
|||||||
stdenvClangOmpss2NodesOmpv = final.stdenv.override { cc = final.clangOmpss2NodesOmpv; allowedRequisites = null; };
|
stdenvClangOmpss2NodesOmpv = final.stdenv.override { cc = final.clangOmpss2NodesOmpv; allowedRequisites = null; };
|
||||||
tagaspi = callPackage ./pkgs/tagaspi/default.nix { };
|
tagaspi = callPackage ./pkgs/tagaspi/default.nix { };
|
||||||
tampi = callPackage ./pkgs/tampi/default.nix { };
|
tampi = callPackage ./pkgs/tampi/default.nix { };
|
||||||
tasycl = callPackage ./pkgs/tasycl/default.nix { };
|
|
||||||
tasycl-acpp = callPackage ./pkgs/tasycl/default.nix { useIntel = false; };
|
|
||||||
upc-qaire-exporter = prev.callPackage ./pkgs/upc-qaire-exporter/default.nix { };
|
upc-qaire-exporter = prev.callPackage ./pkgs/upc-qaire-exporter/default.nix { };
|
||||||
wxparaver = callPackage ./pkgs/paraver/default.nix { };
|
wxparaver = callPackage ./pkgs/paraver/default.nix { };
|
||||||
};
|
};
|
||||||
@@ -77,8 +70,6 @@ let
|
|||||||
#sigsegv = callPackage ./test/reproducers/sigsegv.nix { };
|
#sigsegv = callPackage ./test/reproducers/sigsegv.nix { };
|
||||||
hello-c = callPackage ./test/compilers/hello-c.nix { };
|
hello-c = callPackage ./test/compilers/hello-c.nix { };
|
||||||
hello-cpp = callPackage ./test/compilers/hello-cpp.nix { };
|
hello-cpp = callPackage ./test/compilers/hello-cpp.nix { };
|
||||||
hello-sycl = callPackage ./test/compilers/hello-sycl.nix { };
|
|
||||||
hello-syclompss = callPackage ./test/compilers/icpx-ompss2.nix { };
|
|
||||||
lto = callPackage ./test/compilers/lto.nix { };
|
lto = callPackage ./test/compilers/lto.nix { };
|
||||||
asan = callPackage ./test/compilers/asan.nix { };
|
asan = callPackage ./test/compilers/asan.nix { };
|
||||||
intel2023-icx-c = hello-c.override { stdenv = final.intelPackages_2023.stdenv; };
|
intel2023-icx-c = hello-c.override { stdenv = final.intelPackages_2023.stdenv; };
|
||||||
@@ -88,13 +79,6 @@ let
|
|||||||
intel2023-ifort = callPackage ./test/compilers/hello-f.nix {
|
intel2023-ifort = callPackage ./test/compilers/hello-f.nix {
|
||||||
stdenv = final.intelPackages_2023.stdenv-ifort;
|
stdenv = final.intelPackages_2023.stdenv-ifort;
|
||||||
};
|
};
|
||||||
intel2024-icx-c = hello-c.override { stdenv = final.intelPackages_2024.stdenv; };
|
|
||||||
intel2025-icx-c = hello-c.override { stdenv = final.intelPackages_2025.stdenv; };
|
|
||||||
intel2024-icx-cpp = hello-cpp.override { stdenv = final.intelPackages_2024.stdenv; };
|
|
||||||
intel2025-icx-cpp = hello-cpp.override { stdenv = final.intelPackages_2025.stdenv; };
|
|
||||||
# intel2023-sycl = hello-sycl.override { intelPackages = final.intelPackages_2023; }; # broken
|
|
||||||
intel2024-sycl = hello-sycl.override { intelPackages = final.intelPackages_2024; };
|
|
||||||
intel2025-sycl = hello-sycl.override { intelPackages = final.intelPackages_2025; };
|
|
||||||
clangOmpss2-lto = lto.override { stdenv = final.stdenvClangOmpss2Nanos6; };
|
clangOmpss2-lto = lto.override { stdenv = final.stdenvClangOmpss2Nanos6; };
|
||||||
clangOmpss2-asan = asan.override { stdenv = final.stdenvClangOmpss2Nanos6; };
|
clangOmpss2-asan = asan.override { stdenv = final.stdenvClangOmpss2Nanos6; };
|
||||||
clangOmpss2-task = callPackage ./test/compilers/ompss2.nix {
|
clangOmpss2-task = callPackage ./test/compilers/ompss2.nix {
|
||||||
|
|||||||
@@ -40,19 +40,45 @@ let
|
|||||||
mpi = "2021.9.0";
|
mpi = "2021.9.0";
|
||||||
};
|
};
|
||||||
|
|
||||||
findMatch = name:
|
aptPackageIndex = stdenv.mkDerivation {
|
||||||
let
|
name = "intel-oneapi-packages";
|
||||||
aptPackages = builtins.fromJSON (builtins.readFile ./packages.json);
|
srcs = [
|
||||||
matches = lib.filter (x: name == x.pname) aptPackages;
|
# Run update.sh to update the package lists
|
||||||
n = lib.length matches;
|
./amd64-packages ./all-packages
|
||||||
match = builtins.traceVerbose (name + " -- ${builtins.toString n}") (builtins.head matches);
|
];
|
||||||
|
phases = [ "installPhase" ];
|
||||||
|
installPhase = ''
|
||||||
|
awk -F': ' '\
|
||||||
|
BEGIN { print "[ {" } \
|
||||||
|
NR>1 && /^Package: / { print "} {"; } \
|
||||||
|
/: / { printf "%s = \"%s\";\n", $1, $2 } \
|
||||||
|
END { print "} ]" }' $srcs > $out
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
apthost = "https://apt.repos.intel.com/oneapi/";
|
aptPackages = import aptPackageIndex;
|
||||||
|
|
||||||
|
apthost = "https://apt.repos.intel.com/oneapi/";
|
||||||
|
|
||||||
|
getSum = pkgList: name:
|
||||||
|
let
|
||||||
|
matches = lib.filter (x: name == x.Package) pkgList;
|
||||||
|
#n = lib.length matches;
|
||||||
|
#match = builtins.trace (name + " -- ${builtins.toString n}") (lib.elemAt matches 0);
|
||||||
|
match = lib.elemAt matches 0;
|
||||||
in
|
in
|
||||||
{
|
match.SHA256;
|
||||||
url = apthost + match.filename;
|
|
||||||
sha256 = 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;
|
||||||
|
match =
|
||||||
|
#builtins.trace (name + " -- n=${builtins.toString n}")
|
||||||
|
(lib.elemAt matches 0);
|
||||||
|
in
|
||||||
|
apthost + match.Filename;
|
||||||
|
|
||||||
uncompressDebs = debs: name: stdenv.mkDerivation {
|
uncompressDebs = debs: name: stdenv.mkDerivation {
|
||||||
name = name;
|
name = name;
|
||||||
@@ -72,7 +98,10 @@ let
|
|||||||
|
|
||||||
joinDebs = name: names:
|
joinDebs = name: names:
|
||||||
let
|
let
|
||||||
debs = builtins.map (x: builtins.fetchurl (findMatch x)) names;
|
urls = builtins.map (x: getUrl aptPackages 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";
|
||||||
|
|
||||||
@@ -441,7 +470,7 @@ let
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
ifort-wrapper = wrapIntel {
|
ifort-wrapper = wrapIntel rec {
|
||||||
cc = intel-compiler-fortran;
|
cc = intel-compiler-fortran;
|
||||||
mygcc = gcc;
|
mygcc = gcc;
|
||||||
extraBuild = ''
|
extraBuild = ''
|
||||||
|
|||||||
8769
pkgs/intel-oneapi/all-packages
Normal file
8769
pkgs/intel-oneapi/all-packages
Normal file
File diff suppressed because it is too large
Load Diff
34075
pkgs/intel-oneapi/amd64-packages
Normal file
34075
pkgs/intel-oneapi/amd64-packages
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -1,297 +0,0 @@
|
|||||||
{
|
|
||||||
lib,
|
|
||||||
stdenv,
|
|
||||||
callPackage,
|
|
||||||
dpkg,
|
|
||||||
fetchurl,
|
|
||||||
|
|
||||||
sqlite,
|
|
||||||
elfutils,
|
|
||||||
}:
|
|
||||||
|
|
||||||
let
|
|
||||||
inherit (builtins)
|
|
||||||
attrNames
|
|
||||||
attrValues
|
|
||||||
concatMap
|
|
||||||
elem
|
|
||||||
filter
|
|
||||||
fromJSON
|
|
||||||
getAttr
|
|
||||||
groupBy
|
|
||||||
head
|
|
||||||
isNull
|
|
||||||
listToAttrs
|
|
||||||
map
|
|
||||||
mapAttrs
|
|
||||||
readFile
|
|
||||||
replaceStrings
|
|
||||||
splitVersion
|
|
||||||
;
|
|
||||||
inherit (lib)
|
|
||||||
converge
|
|
||||||
findFirst
|
|
||||||
groupBy'
|
|
||||||
hasPrefix
|
|
||||||
optional
|
|
||||||
pipe
|
|
||||||
take
|
|
||||||
toInt
|
|
||||||
toList
|
|
||||||
versionAtLeast
|
|
||||||
versionOlder
|
|
||||||
;
|
|
||||||
|
|
||||||
aptData = fromJSON (readFile ./packages.json);
|
|
||||||
|
|
||||||
# Compare versions in debian control file syntax
|
|
||||||
# See: https://www.debian.org/doc/debian-policy/ch-relationships.html#syntax-of-relationship-fields
|
|
||||||
#
|
|
||||||
# NOTE: this is not a proper version comparison
|
|
||||||
#
|
|
||||||
# A proper version solver, should aggregate dependencies with the same name
|
|
||||||
# and compute the constraint (e.g. a (>= 2) a (<< 5) -> 2 <= a << 5)
|
|
||||||
#
|
|
||||||
# But in the intel repo, there are no such "duplicated" dependencies to specify
|
|
||||||
# upper limits, which leads to issues when intel-hpckit-2021 depends on things
|
|
||||||
# like intel-basekit >= 2021.1.0-2403 and we end up installing the newest
|
|
||||||
# basekit instead of the one from 2021.
|
|
||||||
#
|
|
||||||
# To mitigate this, >= is set to take the latest version with matching major
|
|
||||||
# and minor (only revision and patch are allowed to change)
|
|
||||||
compareVersions =
|
|
||||||
got: kind: want:
|
|
||||||
let
|
|
||||||
g0 = take 2 (splitVersion got);
|
|
||||||
w0 = take 2 (splitVersion want);
|
|
||||||
in
|
|
||||||
if isNull want then
|
|
||||||
true
|
|
||||||
else if kind == "=" then
|
|
||||||
got == want
|
|
||||||
else if kind == "<<" then
|
|
||||||
versionOlder got want
|
|
||||||
else if kind == "<=" then
|
|
||||||
versionAtLeast want got
|
|
||||||
else if kind == ">>" then
|
|
||||||
versionOlder want got
|
|
||||||
else if kind == ">=" then
|
|
||||||
(g0 == w0) && versionAtLeast got want # always match major version
|
|
||||||
else
|
|
||||||
throw "unknown operation: ${kind}";
|
|
||||||
|
|
||||||
findMatching =
|
|
||||||
{
|
|
||||||
pname,
|
|
||||||
kind,
|
|
||||||
version,
|
|
||||||
}:
|
|
||||||
findFirst (x: pname == x.pname && compareVersions x.version kind version) null aptData;
|
|
||||||
|
|
||||||
isIntel = pkg: (hasPrefix "intel-" pkg.pname);
|
|
||||||
|
|
||||||
expandDeps =
|
|
||||||
pkg: (map findMatching (filter isIntel pkg.dependencies)) ++ (optional (pkg.size != 0) pkg);
|
|
||||||
|
|
||||||
# get the oldest by major version. If they have the same major version, take
|
|
||||||
# the newest. This prevents most issues with resolutions
|
|
||||||
# versionOlder b a -> true if b is older than a (b `older` a)
|
|
||||||
getNewerInMajor =
|
|
||||||
a: b:
|
|
||||||
let
|
|
||||||
va = a.version;
|
|
||||||
vb = b.version;
|
|
||||||
va0 = head (splitVersion va);
|
|
||||||
vb0 = head (splitVersion vb);
|
|
||||||
in
|
|
||||||
if isNull a then
|
|
||||||
b
|
|
||||||
else if va0 != vb0 then
|
|
||||||
if va0 > vb0 then b else a
|
|
||||||
else if versionOlder vb va then
|
|
||||||
a
|
|
||||||
else
|
|
||||||
b;
|
|
||||||
removeDups = l: attrValues (groupBy' getNewerInMajor null (getAttr "provides") l);
|
|
||||||
|
|
||||||
_resolveDeps = converge (l: removeDups (concatMap expandDeps l));
|
|
||||||
resolveDeps =
|
|
||||||
pkg:
|
|
||||||
let
|
|
||||||
deps = _resolveDeps (toList pkg);
|
|
||||||
namedDeps = (map (x: "${x.pname}-${x.version}") deps);
|
|
||||||
in
|
|
||||||
builtins.traceVerbose (builtins.deepSeq namedDeps namedDeps) deps;
|
|
||||||
|
|
||||||
blacklist = [
|
|
||||||
"intel-basekit-env"
|
|
||||||
"intel-basekit-getting-started"
|
|
||||||
"intel-hpckit-env"
|
|
||||||
"intel-hpckit-getting-started"
|
|
||||||
"intel-oneapi-advisor"
|
|
||||||
"intel-oneapi-common-licensing"
|
|
||||||
"intel-oneapi-common-oneapi-vars"
|
|
||||||
"intel-oneapi-common-vars"
|
|
||||||
"intel-oneapi-compiler-cpp-eclipse-cfg"
|
|
||||||
"intel-oneapi-compiler-dpcpp-eclipse-cfg"
|
|
||||||
"intel-oneapi-condaindex"
|
|
||||||
"intel-oneapi-dev-utilities-eclipse-cfg"
|
|
||||||
"intel-oneapi-dpcpp-ct-eclipse-cfg"
|
|
||||||
"intel-oneapi-eclipse-ide"
|
|
||||||
"intel-oneapi-hpc-toolkit-getting-started"
|
|
||||||
"intel-oneapi-icc-eclipse-plugin-cpp"
|
|
||||||
"intel-oneapi-vtune"
|
|
||||||
"intel-oneapi-vtune-eclipse-plugin-vtune"
|
|
||||||
];
|
|
||||||
|
|
||||||
isInBlacklist = pkg: elem pkg.provides blacklist;
|
|
||||||
removeBlacklist = filter (e: !(isInBlacklist e));
|
|
||||||
|
|
||||||
dpkgExtractAll =
|
|
||||||
pname: version:
|
|
||||||
{ srcs, deps }:
|
|
||||||
stdenv.mkDerivation {
|
|
||||||
inherit pname version srcs;
|
|
||||||
|
|
||||||
nativeBuildInputs = [ dpkg ];
|
|
||||||
phases = [ "installPhase" ];
|
|
||||||
|
|
||||||
passthru = { inherit deps; };
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
mkdir -p $out
|
|
||||||
for src in $srcs; do
|
|
||||||
echo "Unpacking $src"
|
|
||||||
dpkg -x $src $out
|
|
||||||
done
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
apthost = "https://apt.repos.intel.com/oneapi/";
|
|
||||||
fetchDeb =
|
|
||||||
p:
|
|
||||||
fetchurl {
|
|
||||||
url = apthost + p.filename;
|
|
||||||
inherit (p) sha256;
|
|
||||||
};
|
|
||||||
|
|
||||||
buildIntel =
|
|
||||||
pkg:
|
|
||||||
pipe pkg [
|
|
||||||
resolveDeps
|
|
||||||
removeBlacklist
|
|
||||||
(l: {
|
|
||||||
srcs = map fetchDeb l;
|
|
||||||
deps = l;
|
|
||||||
})
|
|
||||||
(dpkgExtractAll "${pkg.provides}-extracted" pkg.version)
|
|
||||||
];
|
|
||||||
|
|
||||||
findHpcKit =
|
|
||||||
year:
|
|
||||||
findMatching {
|
|
||||||
pname = "intel-hpckit";
|
|
||||||
kind = "<<";
|
|
||||||
version = toString (year + 1);
|
|
||||||
};
|
|
||||||
years = map toInt (attrNames components);
|
|
||||||
|
|
||||||
patchIntel = callPackage ./patch_intel.nix { };
|
|
||||||
|
|
||||||
# Version information for each hpckit. This is used to normalize the paths
|
|
||||||
# so that files are in $out/{bin,lib,include...} instead of all over the place
|
|
||||||
# in $out/opt/intel/oneapi/*/*/{...}.
|
|
||||||
#
|
|
||||||
# The most important is the compiler component, which is used to build the
|
|
||||||
# stdenv for the hpckit.
|
|
||||||
#
|
|
||||||
# NOTE: this have to be manually specified, so we can avoid IFD. To add a
|
|
||||||
# new version, add a new field with an empty attrset, (e.g. "2026" = {}; ),
|
|
||||||
# build hpckit_2026.unpatched and use the values from
|
|
||||||
# result/opt/intel/oneapi/* to populate the attrset.
|
|
||||||
#
|
|
||||||
# WARN: if there are more than one version in the folders of the unpatched
|
|
||||||
# components, our dependency resolution hacks have probably failed and the
|
|
||||||
# package set may be broken.
|
|
||||||
components = {
|
|
||||||
"2025" = {
|
|
||||||
ishmem = "1.4";
|
|
||||||
pti = "0.13";
|
|
||||||
tcm = "1.4";
|
|
||||||
umf = "0.11";
|
|
||||||
|
|
||||||
ccl = "2021.16";
|
|
||||||
compiler = "2025.2";
|
|
||||||
dal = "2025.8";
|
|
||||||
debugger = "2025.2";
|
|
||||||
dev-utilities = "2025.2";
|
|
||||||
dnnl = "2025.2";
|
|
||||||
dpcpp-ct = "2025.2";
|
|
||||||
dpl = "2022.9";
|
|
||||||
ipp = "2022.2";
|
|
||||||
ippcp = "2025.2";
|
|
||||||
mkl = "2025.2";
|
|
||||||
mpi = "2021.16";
|
|
||||||
tbb = "2022.2";
|
|
||||||
};
|
|
||||||
"2024" = {
|
|
||||||
tcm = "1.1";
|
|
||||||
|
|
||||||
ccl = "2021.13";
|
|
||||||
compiler = "2024.2";
|
|
||||||
dal = "2024.6";
|
|
||||||
debugger = "2024.2";
|
|
||||||
dev-utilities = "2024.2";
|
|
||||||
diagnostics = "2024.2";
|
|
||||||
dnnl = "2024.2";
|
|
||||||
dpcpp-ct = "2024.2";
|
|
||||||
dpl = "2022.6";
|
|
||||||
ipp = "2021.12";
|
|
||||||
ippcp = "2021.12";
|
|
||||||
mkl = "2024.2";
|
|
||||||
mpi = "2021.13";
|
|
||||||
tbb = "2021.13";
|
|
||||||
|
|
||||||
extraPackages = [
|
|
||||||
sqlite
|
|
||||||
elfutils
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
replaceDots = replaceStrings [ "." ] [ "_" ];
|
|
||||||
|
|
||||||
in
|
|
||||||
lib.recurseIntoAttrs (
|
|
||||||
listToAttrs (
|
|
||||||
map (
|
|
||||||
year:
|
|
||||||
let
|
|
||||||
year_str = toString year;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
name = "hpckit_${year_str}";
|
|
||||||
value = patchIntel {
|
|
||||||
unpatched = buildIntel (findHpcKit year);
|
|
||||||
components = components.${year_str};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
) years
|
|
||||||
)
|
|
||||||
)
|
|
||||||
// {
|
|
||||||
apt = pipe aptData [
|
|
||||||
(groupBy (p: replaceDots p.provides))
|
|
||||||
(mapAttrs (
|
|
||||||
_: l:
|
|
||||||
listToAttrs (
|
|
||||||
map (pkg: {
|
|
||||||
name = replaceDots ("v" + pkg.version);
|
|
||||||
value = pkg;
|
|
||||||
}) l
|
|
||||||
)
|
|
||||||
))
|
|
||||||
];
|
|
||||||
|
|
||||||
inherit resolveDeps patchIntel buildIntel;
|
|
||||||
}
|
|
||||||
@@ -1,189 +0,0 @@
|
|||||||
{
|
|
||||||
stdenv,
|
|
||||||
stdenvNoCC,
|
|
||||||
lib,
|
|
||||||
symlinkJoin,
|
|
||||||
autoPatchelfHook,
|
|
||||||
wrapCCWith,
|
|
||||||
overrideCC,
|
|
||||||
gcc,
|
|
||||||
hwloc,
|
|
||||||
libelf,
|
|
||||||
libffi_3_3,
|
|
||||||
libpsm2,
|
|
||||||
libuuid,
|
|
||||||
libxml2,
|
|
||||||
numactl,
|
|
||||||
ocl-icd,
|
|
||||||
openssl,
|
|
||||||
python3,
|
|
||||||
rdma-core,
|
|
||||||
ucx,
|
|
||||||
zlib,
|
|
||||||
}:
|
|
||||||
|
|
||||||
lib.makeOverridable (
|
|
||||||
{
|
|
||||||
unpatched,
|
|
||||||
components ? { },
|
|
||||||
extraPackages ? components.extraPackages or [ ],
|
|
||||||
}:
|
|
||||||
|
|
||||||
let
|
|
||||||
inherit (builtins)
|
|
||||||
attrValues
|
|
||||||
filter
|
|
||||||
mapAttrs
|
|
||||||
removeAttrs
|
|
||||||
;
|
|
||||||
|
|
||||||
__components = removeAttrs components [ "extraPackages" ];
|
|
||||||
_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${cc}/lib"
|
|
||||||
];
|
|
||||||
cc-cflags = [
|
|
||||||
"--gcc-toolchain=${gcc.cc}"
|
|
||||||
"-isystem \"${cc.original}/lib/clang/*/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
|
|
||||||
|
|
||||||
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;
|
|
||||||
inherit (unpatched) version;
|
|
||||||
src = unpatched;
|
|
||||||
|
|
||||||
phases = [
|
|
||||||
"installPhase"
|
|
||||||
"fixupPhase"
|
|
||||||
];
|
|
||||||
buildInputs = [
|
|
||||||
libffi_3_3
|
|
||||||
libelf
|
|
||||||
libxml2
|
|
||||||
hwloc
|
|
||||||
numactl
|
|
||||||
libuuid
|
|
||||||
libpsm2
|
|
||||||
zlib
|
|
||||||
ocl-icd
|
|
||||||
rdma-core
|
|
||||||
ucx
|
|
||||||
openssl
|
|
||||||
python3
|
|
||||||
stdenv.cc.cc.lib
|
|
||||||
]
|
|
||||||
++ extraPackages;
|
|
||||||
|
|
||||||
autoPatchelfIgnoreMissingDeps = [
|
|
||||||
"libhwloc.so.5"
|
|
||||||
"libcuda.so.1"
|
|
||||||
"libze_loader.so.1"
|
|
||||||
];
|
|
||||||
|
|
||||||
# There are broken symlinks that go outside packages, ignore them
|
|
||||||
dontCheckForBrokenSymlinks = true;
|
|
||||||
|
|
||||||
nativeBuildInputs = [ autoPatchelfHook ];
|
|
||||||
installPhase = ''
|
|
||||||
cp -r $src/opt/intel/oneapi/ $out
|
|
||||||
'';
|
|
||||||
|
|
||||||
passthru =
|
|
||||||
let
|
|
||||||
pkgs = mapAttrs (
|
|
||||||
folder: version:
|
|
||||||
let
|
|
||||||
original = "${finalAttrs.finalPackage}/${folder}/${version}";
|
|
||||||
in
|
|
||||||
symlinkJoin {
|
|
||||||
pname = "intel-${folder}";
|
|
||||||
inherit version;
|
|
||||||
paths = [ original ];
|
|
||||||
passthru = { inherit original; };
|
|
||||||
}
|
|
||||||
) _components;
|
|
||||||
in
|
|
||||||
pkgs
|
|
||||||
// {
|
|
||||||
inherit unpatched;
|
|
||||||
pkgs = lib.recurseIntoAttrs pkgs;
|
|
||||||
components = _components;
|
|
||||||
|
|
||||||
# This contains all packages properly symlinked into toplevel directories
|
|
||||||
# in $out.
|
|
||||||
#
|
|
||||||
# NOTE: there are clashes with packages that have symlinks outside their
|
|
||||||
# scope (libtcm and env/vars.sh)
|
|
||||||
all = symlinkJoin {
|
|
||||||
pname = finalAttrs.finalPackage.pname + "-symlinked";
|
|
||||||
inherit (finalAttrs.finalPackage) version;
|
|
||||||
paths = filter lib.isDerivation (attrValues finalAttrs.finalPackage.pkgs);
|
|
||||||
};
|
|
||||||
|
|
||||||
stdenv = overrideCC stdenv finalAttrs.finalPackage.cc;
|
|
||||||
|
|
||||||
cc = wrapIntel finalAttrs.finalPackage.pkgs.compiler;
|
|
||||||
};
|
|
||||||
|
|
||||||
})
|
|
||||||
)
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
#!/usr/bin/env -S jq -f
|
|
||||||
|
|
||||||
def extract_fields: {
|
|
||||||
pname : .Package,
|
|
||||||
version : .Version,
|
|
||||||
provides : .Package | sub("[0-9.-]*$"; ""),
|
|
||||||
filename : .Filename,
|
|
||||||
size : ."Installed-Size" | tonumber,
|
|
||||||
sha256 : .SHA256,
|
|
||||||
dependencies : .Depends,
|
|
||||||
} ;
|
|
||||||
|
|
||||||
# parses dependencies into a list of [{.pname, .kind, .version}]
|
|
||||||
# some dependencies do not have a version specified, in which case, kind = version = null
|
|
||||||
#
|
|
||||||
# example dependencies:
|
|
||||||
# intel-oneapi-common-vars (>= 2023.0.0-25325), intel-oneapi-common-licensing-2023.0.0
|
|
||||||
|
|
||||||
def split_dependencies : map(try(.dependencies |= split(",\\s?"; "")) // .dependencies |= []) ;
|
|
||||||
|
|
||||||
def match_version : capture("(?<pname>[a-zA-Z0-9_\\-.]*) *(\\((?<kind>[<>=]*) *(?<version>.*)\\))?"; "") ;
|
|
||||||
|
|
||||||
def parse_dependencies : map_values(.dependencies.[] |= match_version) ;
|
|
||||||
|
|
||||||
def sort_version_decreasing : sort_by(.version | split("[-.]"; "") | map(tonumber)) | reverse ;
|
|
||||||
|
|
||||||
map(extract_fields) | split_dependencies | parse_dependencies | sort_version_decreasing
|
|
||||||
|
|
||||||
# [.[] | select(.pname == "intel-hpckit") | .version]
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
#!/usr/bin/env -S awk -f
|
|
||||||
|
|
||||||
BEGIN {
|
|
||||||
FS=": "
|
|
||||||
|
|
||||||
prev_empty=1
|
|
||||||
t=" "
|
|
||||||
|
|
||||||
print "[ {"
|
|
||||||
}
|
|
||||||
|
|
||||||
!NF { # empty line, update separator so next non empty line closes the dict
|
|
||||||
prev_empty=1
|
|
||||||
t="},\n{ "
|
|
||||||
next # skip line (we won't match anything else)
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
printf t "\"%s\" : \"%s\"\n", $1, $2
|
|
||||||
|
|
||||||
if (prev_empty) {
|
|
||||||
# we were the first after a group of empty lines, following ones have to
|
|
||||||
# have a comma
|
|
||||||
prev_empty=0
|
|
||||||
t=", "
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
END { print "} ]" }
|
|
||||||
@@ -1,11 +1,4 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
out_64=$(mktemp intel-api.64.XXXXXX)
|
curl https://apt.repos.intel.com/oneapi/dists/all/main/binary-amd64/Packages -o amd64-packages
|
||||||
out_all=$(mktemp intel-api.all.XXXXXX)
|
curl https://apt.repos.intel.com/oneapi/dists/all/main/binary-all/Packages -o all-packages
|
||||||
trap 'rm -f "$out_64" "$out_all"' EXIT INT HUP
|
|
||||||
|
|
||||||
curl https://apt.repos.intel.com/oneapi/dists/all/main/binary-amd64/Packages -o "$out_64"
|
|
||||||
curl https://apt.repos.intel.com/oneapi/dists/all/main/binary-all/Packages -o "$out_all"
|
|
||||||
|
|
||||||
# NOTE: we use `jq -r tostring` to minify the json (3.2Mb -> 2.3Mb)
|
|
||||||
cat "$out_64" "$out_all" | ./toJson.awk | ./process.jq | jq -r tostring >packages.json
|
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
, lib
|
, lib
|
||||||
, gcc
|
, gcc
|
||||||
, clangOmpss2Unwrapped
|
, clangOmpss2Unwrapped
|
||||||
, writeShellScript
|
|
||||||
, openmp ? null
|
, openmp ? null
|
||||||
, wrapCCWith
|
, wrapCCWith
|
||||||
, llvmPackages_latest
|
, llvmPackages_latest
|
||||||
@@ -38,7 +37,10 @@ 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)];
|
||||||
|
in wrapCCWith {
|
||||||
|
inherit cc bintools;
|
||||||
|
# extraPackages adds packages to depsTargetTargetPropagated
|
||||||
|
extraPackages = optional (openmp != null) openmp;
|
||||||
extraBuildCommands = ''
|
extraBuildCommands = ''
|
||||||
echo "-target ${targetConfig}" >> $out/nix-support/cc-cflags
|
echo "-target ${targetConfig}" >> $out/nix-support/cc-cflags
|
||||||
echo "-B${gcc.cc}/lib/gcc/${targetConfig}/${gccVersion}" >> $out/nix-support/cc-cflags
|
echo "-B${gcc.cc}/lib/gcc/${targetConfig}/${gccVersion}" >> $out/nix-support/cc-cflags
|
||||||
@@ -55,50 +57,14 @@ let
|
|||||||
echo "--gcc-toolchain=${gcc}" >> $out/nix-support/cc-cflags
|
echo "--gcc-toolchain=${gcc}" >> $out/nix-support/cc-cflags
|
||||||
|
|
||||||
wrap clang++ $wrapper $ccPath/clang++
|
wrap clang++ $wrapper $ccPath/clang++
|
||||||
|
|
||||||
|
'' + optionalString (openmp != null) ''
|
||||||
|
echo "export OPENMP_RUNTIME=${ompname}" >> $out/nix-support/cc-wrapper-hook
|
||||||
|
'' + optionalString (ompss2rt != null) ''
|
||||||
|
echo "export OMPSS2_RUNTIME=${rtname}" >> $out/nix-support/cc-wrapper-hook
|
||||||
|
echo "export ${homevar}=${ompss2rt}" >> $out/nix-support/cc-wrapper-hook
|
||||||
|
'' + optionalString (ompss2rt != null && ompss2rt.pname == "nodes") ''
|
||||||
|
echo "export NOSV_HOME=${ompss2rt.nosv}" >> $out/nix-support/cc-wrapper-hook
|
||||||
'';
|
'';
|
||||||
|
}
|
||||||
|
|
||||||
envExports = lib.optionalString (openmp != null) ''
|
|
||||||
echo "export OPENMP_RUNTIME=${ompname}" >> $out/nix-support/cc-wrapper-hook
|
|
||||||
'' + optionalString (ompss2rt != null) ''
|
|
||||||
echo "export OMPSS2_RUNTIME=${rtname}" >> $out/nix-support/cc-wrapper-hook
|
|
||||||
echo "export ${homevar}=${ompss2rt}" >> $out/nix-support/cc-wrapper-hook
|
|
||||||
'' + optionalString (ompss2rt != null && ompss2rt.pname == "nodes") ''
|
|
||||||
echo "export NOSV_HOME=${ompss2rt.nosv}" >> $out/nix-support/cc-wrapper-hook
|
|
||||||
'';
|
|
||||||
|
|
||||||
extraPackages = optional (openmp != null) openmp;
|
|
||||||
|
|
||||||
wrappedCC = wrapCCWith {
|
|
||||||
# extraPackages adds packages to depsTargetTargetPropagated
|
|
||||||
inherit cc bintools extraPackages;
|
|
||||||
extraBuildCommands = extraBuildCommands + envExports;
|
|
||||||
};
|
|
||||||
|
|
||||||
resetIntelCCFlags = let tconf = builtins.replaceStrings ["-"] ["_"] targetConfig;
|
|
||||||
in writeShellScript "remove-intel.sh" ''
|
|
||||||
if [ "''${NIX_CC_WRAPPER_INTEL:-0}" = 1 ]; then
|
|
||||||
unset NIX_CFLAGS_COMPILE_${tconf}
|
|
||||||
unset NIX_CC_WRAPPER_FLAGS_SET_${tconf}
|
|
||||||
|
|
||||||
if (( "''${NIX_DEBUG:-0}" >= 1 )); then
|
|
||||||
echo "ompss2: cleaned NIX_CFLAGS_COMPILE_${tconf} (invokation from intel compiler detected)"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
'';
|
|
||||||
|
|
||||||
intelExtraBuildCommands = ''
|
|
||||||
sed -i 's|# Flirting.*|source ${resetIntelCCFlags}\n\n&|' $out/bin/clang
|
|
||||||
sed -i 's|# Flirting.*|source ${resetIntelCCFlags}\n\n&|' $out/bin/clang++
|
|
||||||
'';
|
|
||||||
|
|
||||||
wrappedCCIntel = wrapCCWith {
|
|
||||||
inherit cc bintools extraPackages;
|
|
||||||
# extraPackages adds packages to depsTargetTargetPropagated
|
|
||||||
extraBuildCommands = intelExtraBuildCommands + envExports;
|
|
||||||
};
|
|
||||||
|
|
||||||
in wrappedCC.overrideAttrs (oldAttrs: {
|
|
||||||
passthru = oldAttrs.passthru // {
|
|
||||||
forIcpx = wrappedCCIntel;
|
|
||||||
};
|
|
||||||
})
|
|
||||||
|
|||||||
@@ -1,91 +0,0 @@
|
|||||||
{
|
|
||||||
lib,
|
|
||||||
fetchFromGitHub,
|
|
||||||
cmake,
|
|
||||||
withCFlags,
|
|
||||||
intelPackages,
|
|
||||||
|
|
||||||
mklSupport ? true,
|
|
||||||
|
|
||||||
config,
|
|
||||||
|
|
||||||
cudaSupport ? config.cudaSupport,
|
|
||||||
cudaPackages ? { },
|
|
||||||
|
|
||||||
rocmSupport ? config.rocmSupport,
|
|
||||||
hipTargets ? null, # only one target at a time supported
|
|
||||||
rocmPackages ? { },
|
|
||||||
}:
|
|
||||||
|
|
||||||
let
|
|
||||||
# rocmSupport is not enough, we need a specific target
|
|
||||||
enableHip = rocmSupport && hipTargets != null;
|
|
||||||
|
|
||||||
stdenv = withCFlags (lib.optionals cudaSupport [
|
|
||||||
"--cuda-path=${cudaPackages.cudatoolkit}"
|
|
||||||
]) intelPackages.stdenv;
|
|
||||||
in
|
|
||||||
|
|
||||||
# at least one backend has to be enabled
|
|
||||||
assert mklSupport || cudaSupport || enableHip;
|
|
||||||
|
|
||||||
stdenv.mkDerivation rec {
|
|
||||||
pname = "oneMath";
|
|
||||||
version = "0.8";
|
|
||||||
|
|
||||||
src = fetchFromGitHub {
|
|
||||||
owner = "uxlfoundation";
|
|
||||||
repo = "oneMath";
|
|
||||||
rev = "v${version}";
|
|
||||||
sha256 = "sha256-xK8lKI3oqKlx3xtvdScpMq+HXAuoYCP0BZdkEqnJP5o=";
|
|
||||||
};
|
|
||||||
|
|
||||||
cmakeFlags = [
|
|
||||||
(lib.cmakeBool "ENABLE_MKLCPU_BACKEND" mklSupport)
|
|
||||||
(lib.cmakeBool "ENABLE_MKLGPU_BACKEND" mklSupport)
|
|
||||||
|
|
||||||
(lib.cmakeBool "ENABLE_CUBLAS_BACKEND" cudaSupport)
|
|
||||||
(lib.cmakeBool "ENABLE_CUFFT_BACKEND" cudaSupport)
|
|
||||||
(lib.cmakeBool "ENABLE_CURAND_BACKEND" cudaSupport)
|
|
||||||
(lib.cmakeBool "ENABLE_CUSOLVER_BACKEND" cudaSupport)
|
|
||||||
(lib.cmakeBool "ENABLE_CUSPARSE_BACKEND" cudaSupport)
|
|
||||||
|
|
||||||
(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" hipTargets)
|
|
||||||
];
|
|
||||||
|
|
||||||
nativeBuildInputs = [ cmake ];
|
|
||||||
buildInputs =
|
|
||||||
lib.optionals (mklSupport) [
|
|
||||||
intelPackages.mkl
|
|
||||||
intelPackages.tbb
|
|
||||||
]
|
|
||||||
++ lib.optionals (enableHip) [
|
|
||||||
rocmPackages.rocmPath
|
|
||||||
rocmPackages.rocblas
|
|
||||||
rocmPackages.rocfft
|
|
||||||
rocmPackages.rocsolver
|
|
||||||
rocmPackages.rocrand
|
|
||||||
rocmPackages.rocsparse
|
|
||||||
]
|
|
||||||
++ lib.optionals (cudaSupport) [
|
|
||||||
(lib.getDev cudaPackages.cuda_cudart)
|
|
||||||
cudaPackages.cudatoolkit
|
|
||||||
|
|
||||||
cudaPackages.libcublas
|
|
||||||
cudaPackages.libcurand
|
|
||||||
cudaPackages.libcufft
|
|
||||||
cudaPackages.libcusparse
|
|
||||||
cudaPackages.libcusolver
|
|
||||||
];
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,87 +0,0 @@
|
|||||||
{
|
|
||||||
lib,
|
|
||||||
stdenv,
|
|
||||||
autoconf,
|
|
||||||
automake,
|
|
||||||
autoreconfHook,
|
|
||||||
boost,
|
|
||||||
fetchFromGitHub,
|
|
||||||
gnumake,
|
|
||||||
libtool,
|
|
||||||
withCFlags,
|
|
||||||
|
|
||||||
useIntel ? true,
|
|
||||||
adaptivecpp ? null,
|
|
||||||
intelPackages ? null,
|
|
||||||
|
|
||||||
useGit ? false,
|
|
||||||
gitUrl ? "git@gitlab-internal.bsc.es:task-awareness/tasycl/tasycl.git",
|
|
||||||
gitBranch ? "main",
|
|
||||||
gitCommit ? "78f98dcf60a66e0eaa3b4ebcf55be076bec64825",
|
|
||||||
}:
|
|
||||||
|
|
||||||
assert !useIntel -> adaptivecpp != null;
|
|
||||||
assert useIntel -> intelPackages != null;
|
|
||||||
|
|
||||||
let
|
|
||||||
variant = if useIntel then "intel" else "acpp";
|
|
||||||
|
|
||||||
syclStdenv = withCFlags [ "-O3" ] (if useIntel then intelPackages.stdenv else stdenv);
|
|
||||||
|
|
||||||
release = rec {
|
|
||||||
version = "2.1.0";
|
|
||||||
src = fetchFromGitHub {
|
|
||||||
owner = "bsc-pm";
|
|
||||||
repo = "tasycl";
|
|
||||||
rev = version;
|
|
||||||
hash = "sha256-0kXnb0lHeQNHR27GTLbJ8xbiICLU8k2+FqEnnFSrzzo=";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
git = rec {
|
|
||||||
version = src.shortRev;
|
|
||||||
src = builtins.fetchGit {
|
|
||||||
url = gitUrl;
|
|
||||||
ref = gitBranch;
|
|
||||||
rev = gitCommit;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
source = if (useGit) then git else release;
|
|
||||||
|
|
||||||
in
|
|
||||||
|
|
||||||
syclStdenv.mkDerivation {
|
|
||||||
pname = "tasycl-${variant}";
|
|
||||||
inherit (source) src version;
|
|
||||||
|
|
||||||
enableParallelBuilding = true;
|
|
||||||
separateDebugInfo = true;
|
|
||||||
|
|
||||||
nativeBuildInputs = [
|
|
||||||
autoreconfHook
|
|
||||||
automake
|
|
||||||
autoconf
|
|
||||||
libtool
|
|
||||||
gnumake
|
|
||||||
];
|
|
||||||
|
|
||||||
buildInputs = [
|
|
||||||
boost
|
|
||||||
];
|
|
||||||
|
|
||||||
configureFlags = lib.optionals (!useIntel) [
|
|
||||||
"CXX=${lib.getExe adaptivecpp}"
|
|
||||||
];
|
|
||||||
|
|
||||||
# add symlinks so we can explicitly link with tasycl-intel / tasycl-acpp
|
|
||||||
postInstall = ''
|
|
||||||
pushd $out/lib
|
|
||||||
for i in libtasycl* ; do
|
|
||||||
ln -s "$i" "''\${i/tasycl/tasycl-${variant}}"
|
|
||||||
done
|
|
||||||
popd
|
|
||||||
'';
|
|
||||||
|
|
||||||
hardeningDisable = [ "all" ];
|
|
||||||
}
|
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
{
|
|
||||||
intelPackages,
|
|
||||||
writeText,
|
|
||||||
strace,
|
|
||||||
}:
|
|
||||||
|
|
||||||
let
|
|
||||||
stdenv = intelPackages.stdenv;
|
|
||||||
hello_sycl = writeText "hello.cpp" ''
|
|
||||||
#include <sycl/sycl.hpp>
|
|
||||||
|
|
||||||
class hello_world;
|
|
||||||
|
|
||||||
int main(int argc, char** argv) try {
|
|
||||||
auto device_selector = sycl::default_selector_v;
|
|
||||||
|
|
||||||
sycl::queue queue(device_selector);
|
|
||||||
|
|
||||||
std::cout << "Running on: "
|
|
||||||
<< queue.get_device().get_info<sycl::info::device::name>()
|
|
||||||
<< std::endl;
|
|
||||||
|
|
||||||
queue.submit([&] (sycl::handler& cgh) {
|
|
||||||
auto os = sycl::stream{128, 128, cgh};
|
|
||||||
cgh.single_task<hello_world>([=]() {
|
|
||||||
os << "Hello World! (on device)\n";
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
} catch (sycl::exception &e) {
|
|
||||||
std::cout << "SYCL exception: " << e.what() << std::endl;
|
|
||||||
return 0; // we expect to fail since no devices should be available;
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
in
|
|
||||||
|
|
||||||
stdenv.mkDerivation {
|
|
||||||
version = "0.0.1";
|
|
||||||
name = "hello-sycl";
|
|
||||||
buildInputs = [
|
|
||||||
stdenv
|
|
||||||
strace
|
|
||||||
];
|
|
||||||
src = hello_sycl;
|
|
||||||
dontUnpack = true;
|
|
||||||
dontConfigure = true;
|
|
||||||
NIX_DEBUG = 0;
|
|
||||||
buildPhase = ''
|
|
||||||
cp $src hello.cpp
|
|
||||||
set -x
|
|
||||||
echo CXX=$CXX
|
|
||||||
command -v $CXX
|
|
||||||
$CXX -fsycl hello.cpp -o hello
|
|
||||||
./hello
|
|
||||||
set +x
|
|
||||||
'';
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
touch $out
|
|
||||||
'';
|
|
||||||
}
|
|
||||||
@@ -1,81 +0,0 @@
|
|||||||
{
|
|
||||||
writeText,
|
|
||||||
intelPackages,
|
|
||||||
nodes,
|
|
||||||
nosv,
|
|
||||||
clangOmpss2Nodes,
|
|
||||||
strace,
|
|
||||||
}:
|
|
||||||
|
|
||||||
let
|
|
||||||
hello_cpp = writeText "hello.cpp" ''
|
|
||||||
#include <cstdio>
|
|
||||||
#include <sycl/sycl.hpp>
|
|
||||||
|
|
||||||
int main(int argc, char** argv) try {
|
|
||||||
sycl::queue queue;
|
|
||||||
|
|
||||||
std::cout << "Running on: "
|
|
||||||
<< queue.get_device().get_info<sycl::info::device::name>()
|
|
||||||
<< std::endl;
|
|
||||||
|
|
||||||
#pragma oss task
|
|
||||||
queue.submit([&] (sycl::handler& cgh) {
|
|
||||||
auto os = sycl::stream{128, 128, cgh};
|
|
||||||
cgh.single_task<class hello_world>([=]() {
|
|
||||||
os << "Hello World! (on device)\n";
|
|
||||||
});
|
|
||||||
}).wait();
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
} catch (sycl::exception &e) {
|
|
||||||
std::cout << "SYCL exception: " << e.what() << std::endl;
|
|
||||||
return 0; // we expect to fail since no devices should be available;
|
|
||||||
}
|
|
||||||
|
|
||||||
'';
|
|
||||||
in
|
|
||||||
|
|
||||||
intelPackages.stdenv.mkDerivation {
|
|
||||||
version = "0.0.1";
|
|
||||||
name = "hello-syclompss";
|
|
||||||
|
|
||||||
src = hello_cpp;
|
|
||||||
|
|
||||||
nativeBuildInputs = [
|
|
||||||
strace
|
|
||||||
nodes
|
|
||||||
nosv
|
|
||||||
];
|
|
||||||
|
|
||||||
dontUnpack = true;
|
|
||||||
dontConfigure = true;
|
|
||||||
|
|
||||||
# NODES requires access to /sys/devices to request NUMA information
|
|
||||||
requiredSystemFeatures = [ "sys-devices" ];
|
|
||||||
|
|
||||||
env.NODES_HOME = nodes;
|
|
||||||
|
|
||||||
NIX_DEBUG = 1;
|
|
||||||
buildPhase = ''
|
|
||||||
cp $src hello.cpp
|
|
||||||
set -x
|
|
||||||
echo CXX=$CXX
|
|
||||||
echo NODES_HOME=$NODES_HOME
|
|
||||||
command -v $CXX
|
|
||||||
|
|
||||||
icpx -Wno-deprecated-declarations -fsycl \
|
|
||||||
-fsycl-host-compiler=${clangOmpss2Nodes.forIcpx}/bin/clang++ \
|
|
||||||
-fsycl-host-compiler-options='-Wno-deprecated-declarations -fompss-2=libnodes' \
|
|
||||||
-lnodes -lnosv \
|
|
||||||
$NODES_HOME/lib/nodes-main-wrapper.o \
|
|
||||||
hello.cpp -o hello
|
|
||||||
|
|
||||||
./hello
|
|
||||||
set +x
|
|
||||||
'';
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
touch $out
|
|
||||||
'';
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user