forked from rarias/jungle
Compare commits
85 Commits
quick-shel
...
llvm-intel
| Author | SHA1 | Date | |
|---|---|---|---|
|
60133da653
|
|||
|
16e30c22b3
|
|||
|
8be739c839
|
|||
|
285dace6de
|
|||
|
16e3df6e19
|
|||
|
85ec729d8f
|
|||
|
fe0d319945
|
|||
|
a37face732
|
|||
|
1d32584d64
|
|||
|
b2f1c08ca1
|
|||
|
d9d7d05c63
|
|||
|
f697e93fe3
|
|||
|
fad68186f2
|
|||
|
8fac5bd366
|
|||
|
96dee3d188
|
|||
|
508f721778
|
|||
|
27019cdf30
|
|||
|
41c2996720
|
|||
|
a7c76b426b
|
|||
|
318c6a3a6e
|
|||
|
82a5e179a2
|
|||
|
80e910936d
|
|||
|
528fb6ea05
|
|||
|
9ff19bf695
|
|||
|
931b166b86
|
|||
|
c1b9f49c6e
|
|||
|
6d55bb2eff
|
|||
|
e9161dcf56
|
|||
|
4600219982
|
|||
| 5c30975b8b | |||
| d4c00679ee | |||
| 32a576e870 | |||
| 8197221146 | |||
| 374cd4ce48 | |||
| d3e54b7c99 | |||
| 46b7efb5ac | |||
| 56ab099017 | |||
| 2654b9fdd9 | |||
| 84a5cb09ee | |||
|
4899d20748
|
|||
| 76cd6d64b2 | |||
| 8dab0d82ba | |||
| 958dcd4774 | |||
| 7a6e4232de | |||
| 3b56e905e5 | |||
| 2d41309466 | |||
| deb0cd1488 | |||
| cd1f502ecc | |||
| dda6a66782 | |||
| 22420e6ac8 | |||
| a71cd78b4c | |||
| e84a2cadbb | |||
| d3e43eb651 | |||
| a491546ffb | |||
| 933c78a80b | |||
| 150969be9b | |||
| 9097729759 | |||
| 779449f1db | |||
| 6cbe33bd80 | |||
| 3f1f5ae8f2 | |||
| fe8586e780 | |||
| 8677adba27 | |||
| f614149edf | |||
| 859eebda98 | |||
| c2a201b085 | |||
| f921f0a4bd | |||
| aa16bfc0bc | |||
|
a173af654f
|
|||
|
2fff7e4a7b
|
|||
|
a761b73336
|
|||
|
86eb796771
|
|||
|
08633435cf
|
|||
|
39d64456a4
|
|||
|
410040a4a0
|
|||
| fc69ef3217 | |||
| 1d025f7a38 | |||
| 7989779c8f | |||
| 7d721084a7 | |||
| 796d34a549 | |||
| 5ff1b1343b | |||
| c5cc13fad8 | |||
| 2e09314a7e | |||
| 217d9c1fc0 | |||
| f47ab7757e | |||
| 4b265c071e |
8
flake.lock
generated
8
flake.lock
generated
@@ -2,16 +2,16 @@
|
|||||||
"nodes": {
|
"nodes": {
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1752436162,
|
"lastModified": 1767634882,
|
||||||
"narHash": "sha256-Kt1UIPi7kZqkSc5HVj6UY5YLHHEzPBkgpNUByuyxtlw=",
|
"narHash": "sha256-2GffSfQxe3sedHzK+sTKlYo/NTIAGzbFCIsNMUPAAnk=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "dfcd5b901dbab46c9c6e80b265648481aafb01f8",
|
"rev": "3c9db02515ef1d9b6b709fc60ba9a540957f661c",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"ref": "nixos-25.05",
|
"ref": "nixos-25.11",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05";
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = { self, nixpkgs, ... }:
|
outputs = { self, nixpkgs, ... }:
|
||||||
|
|||||||
3
keys.nix
3
keys.nix
@@ -22,8 +22,9 @@ rec {
|
|||||||
storage = [ bay lake2 ];
|
storage = [ bay lake2 ];
|
||||||
monitor = [ hut ];
|
monitor = [ hut ];
|
||||||
login = [ apex ];
|
login = [ apex ];
|
||||||
|
services = [ tent ];
|
||||||
|
|
||||||
system = storage ++ monitor ++ login;
|
system = storage ++ monitor ++ login ++ services;
|
||||||
safe = system ++ compute;
|
safe = system ++ compute;
|
||||||
all = safe ++ playground;
|
all = safe ++ playground;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -57,6 +57,18 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
services.fail2ban = {
|
||||||
|
enable = true;
|
||||||
|
maxretry = 5;
|
||||||
|
bantime-increment = {
|
||||||
|
enable = true; # Double ban time on each attack
|
||||||
|
maxtime = "7d"; # Ban up to a week
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Disable SSH login with password, allow only keypair
|
||||||
|
services.openssh.settings.PasswordAuthentication = false;
|
||||||
|
|
||||||
networking.firewall = {
|
networking.firewall = {
|
||||||
extraCommands = ''
|
extraCommands = ''
|
||||||
# Blackhole BSC vulnerability scanner (OpenVAS) as it is spamming our
|
# Blackhole BSC vulnerability scanner (OpenVAS) as it is spamming our
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
mountdPort = 4002;
|
mountdPort = 4002;
|
||||||
statdPort = 4000;
|
statdPort = 4000;
|
||||||
exports = ''
|
exports = ''
|
||||||
/home 10.0.40.0/24(rw,async,no_subtree_check,no_root_squash)
|
/home 10.0.40.0/21(rw,async,no_subtree_check,no_root_squash)
|
||||||
/home 10.106.0.0/24(rw,async,no_subtree_check,no_root_squash)
|
/home 10.106.0.0/24(rw,async,no_subtree_check,no_root_squash)
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
@@ -15,19 +15,19 @@
|
|||||||
# Check with `rpcinfo -p`
|
# Check with `rpcinfo -p`
|
||||||
extraCommands = ''
|
extraCommands = ''
|
||||||
# Accept NFS traffic from compute nodes but not from the outside
|
# Accept NFS traffic from compute nodes but not from the outside
|
||||||
iptables -A nixos-fw -p tcp -s 10.0.40.0/24 --dport 111 -j nixos-fw-accept
|
iptables -A nixos-fw -p tcp -s 10.0.40.0/21 --dport 111 -j nixos-fw-accept
|
||||||
iptables -A nixos-fw -p tcp -s 10.0.40.0/24 --dport 2049 -j nixos-fw-accept
|
iptables -A nixos-fw -p tcp -s 10.0.40.0/21 --dport 2049 -j nixos-fw-accept
|
||||||
iptables -A nixos-fw -p tcp -s 10.0.40.0/24 --dport 4000 -j nixos-fw-accept
|
iptables -A nixos-fw -p tcp -s 10.0.40.0/21 --dport 4000 -j nixos-fw-accept
|
||||||
iptables -A nixos-fw -p tcp -s 10.0.40.0/24 --dport 4001 -j nixos-fw-accept
|
iptables -A nixos-fw -p tcp -s 10.0.40.0/21 --dport 4001 -j nixos-fw-accept
|
||||||
iptables -A nixos-fw -p tcp -s 10.0.40.0/24 --dport 4002 -j nixos-fw-accept
|
iptables -A nixos-fw -p tcp -s 10.0.40.0/21 --dport 4002 -j nixos-fw-accept
|
||||||
iptables -A nixos-fw -p tcp -s 10.0.40.0/24 --dport 20048 -j nixos-fw-accept
|
iptables -A nixos-fw -p tcp -s 10.0.40.0/21 --dport 20048 -j nixos-fw-accept
|
||||||
# Same but UDP
|
# Same but UDP
|
||||||
iptables -A nixos-fw -p udp -s 10.0.40.0/24 --dport 111 -j nixos-fw-accept
|
iptables -A nixos-fw -p udp -s 10.0.40.0/21 --dport 111 -j nixos-fw-accept
|
||||||
iptables -A nixos-fw -p udp -s 10.0.40.0/24 --dport 2049 -j nixos-fw-accept
|
iptables -A nixos-fw -p udp -s 10.0.40.0/21 --dport 2049 -j nixos-fw-accept
|
||||||
iptables -A nixos-fw -p udp -s 10.0.40.0/24 --dport 4000 -j nixos-fw-accept
|
iptables -A nixos-fw -p udp -s 10.0.40.0/21 --dport 4000 -j nixos-fw-accept
|
||||||
iptables -A nixos-fw -p udp -s 10.0.40.0/24 --dport 4001 -j nixos-fw-accept
|
iptables -A nixos-fw -p udp -s 10.0.40.0/21 --dport 4001 -j nixos-fw-accept
|
||||||
iptables -A nixos-fw -p udp -s 10.0.40.0/24 --dport 4002 -j nixos-fw-accept
|
iptables -A nixos-fw -p udp -s 10.0.40.0/21 --dport 4002 -j nixos-fw-accept
|
||||||
iptables -A nixos-fw -p udp -s 10.0.40.0/24 --dport 20048 -j nixos-fw-accept
|
iptables -A nixos-fw -p udp -s 10.0.40.0/21 --dport 20048 -j nixos-fw-accept
|
||||||
|
|
||||||
# Accept NFS traffic from wg0
|
# Accept NFS traffic from wg0
|
||||||
iptables -A nixos-fw -p tcp -i wg0 -s 10.106.0.0/24 --dport 111 -j nixos-fw-accept
|
iptables -A nixos-fw -p tcp -i wg0 -s 10.106.0.0/24 --dport 111 -j nixos-fw-accept
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
address = "10.0.40.40";
|
address = "10.0.40.40";
|
||||||
prefixLength = 24;
|
prefixLength = 24;
|
||||||
} ];
|
} ];
|
||||||
interfaces.ibp5s0.ipv4.addresses = [ {
|
interfaces.ibs785.ipv4.addresses = [ {
|
||||||
address = "10.0.42.40";
|
address = "10.0.42.40";
|
||||||
prefixLength = 24;
|
prefixLength = 24;
|
||||||
} ];
|
} ];
|
||||||
@@ -35,7 +35,7 @@
|
|||||||
# Accept monitoring requests from hut
|
# Accept monitoring requests from hut
|
||||||
iptables -A nixos-fw -p tcp -s hut -m multiport --dport 9283,9002 -j nixos-fw-accept
|
iptables -A nixos-fw -p tcp -s hut -m multiport --dport 9283,9002 -j nixos-fw-accept
|
||||||
# Accept all Ceph traffic from the local network
|
# Accept all Ceph traffic from the local network
|
||||||
iptables -A nixos-fw -p tcp -s 10.0.40.0/24 -m multiport --dport 3300,6789,6800:7568 -j nixos-fw-accept
|
iptables -A nixos-fw -p tcp -s 10.0.40.0/21 -m multiport --dport 3300,6789,6800:7568 -j nixos-fw-accept
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,11 +1,36 @@
|
|||||||
{ pkgs, config, ... }:
|
{ pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
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 config.boot.kernelPackages.perf ldns pv
|
file
|
||||||
# From bsckgs overlay
|
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
|
||||||
|
nixgen
|
||||||
osumb
|
osumb
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@@ -139,6 +139,7 @@
|
|||||||
openssh.authorizedKeys.keys = [
|
openssh.authorizedKeys.keys = [
|
||||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKGt0ESYxekBiHJQowmKpfdouw0hVm3N7tUMtAaeLejK vincent@varch"
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKGt0ESYxekBiHJQowmKpfdouw0hVm3N7tUMtAaeLejK vincent@varch"
|
||||||
];
|
];
|
||||||
|
shell = pkgs.zsh;
|
||||||
};
|
};
|
||||||
|
|
||||||
pmartin1 = {
|
pmartin1 = {
|
||||||
@@ -193,6 +194,32 @@
|
|||||||
"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"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
ssanzmar = {
|
||||||
|
uid = 9657;
|
||||||
|
isNormalUser = true;
|
||||||
|
home = "/home/Computational/ssanzmar";
|
||||||
|
description = "Sergio Sanz Martínez";
|
||||||
|
group = "Computational";
|
||||||
|
hosts = [ "apex" "fox" ];
|
||||||
|
hashedPassword = "$6$HUjNDJeJMmNQ6M64$laXSOZcXg6o4v2r8Jm8Xj9kmqw7veCY32po3TVDPRR4WlyxvOeqwoKr4NjlUlPPpKN55Oot3ZYHi.9iNXsH5E1";
|
||||||
|
openssh.authorizedKeys.keys = [
|
||||||
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIELrsRRHXryrdA2ZBx5XmdGxL4DC5bmJydhBeTWQ0SQ sergio.sanz.martinez@estudiantat.upc.edu"
|
||||||
|
];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
groups = {
|
groups = {
|
||||||
|
|||||||
@@ -5,5 +5,5 @@
|
|||||||
boot.kernelModules = [ "ipmi_watchdog" ];
|
boot.kernelModules = [ "ipmi_watchdog" ];
|
||||||
|
|
||||||
# Enable systemd watchdog with 30 s interval
|
# Enable systemd watchdog with 30 s interval
|
||||||
systemd.watchdog.runtimeTime = "30s";
|
systemd.settings.Manager.RuntimeWatchdogSec = 30;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,6 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
{ pkgs, lib, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
# add the perf tool
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
config.boot.kernelPackages.perf
|
|
||||||
];
|
|
||||||
|
|
||||||
# allow non-root users to read tracing data from the kernel
|
# allow non-root users to read tracing data from the kernel
|
||||||
boot.kernel.sysctl."kernel.perf_event_paranoid" = -2;
|
boot.kernel.sysctl."kernel.perf_event_paranoid" = -2;
|
||||||
boot.kernel.sysctl."kernel.kptr_restrict" = 0;
|
boot.kernel.sysctl."kernel.kptr_restrict" = 0;
|
||||||
|
|||||||
@@ -93,20 +93,4 @@
|
|||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = [ "multi-user.target" ];
|
||||||
serviceConfig.ExecStart = script;
|
serviceConfig.ExecStart = script;
|
||||||
};
|
};
|
||||||
|
|
||||||
# Only allow SSH connections from users who have a SLURM allocation
|
|
||||||
# See: https://slurm.schedmd.com/pam_slurm_adopt.html
|
|
||||||
security.pam.services.sshd.rules.account.slurm = {
|
|
||||||
control = "required";
|
|
||||||
enable = true;
|
|
||||||
modulePath = "${pkgs.slurm}/lib/security/pam_slurm_adopt.so";
|
|
||||||
args = [ "log_level=debug5" ];
|
|
||||||
order = 999999; # Make it last one
|
|
||||||
};
|
|
||||||
|
|
||||||
# Disable systemd session (pam_systemd.so) as it will conflict with the
|
|
||||||
# pam_slurm_adopt.so module. What happens is that the shell is first adopted
|
|
||||||
# into the slurmstepd task and then into the systemd session, which is not
|
|
||||||
# what we want, otherwise it will linger even if all jobs are gone.
|
|
||||||
security.pam.services.sshd.startSession = lib.mkForce false;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
address = "10.0.40.7";
|
address = "10.0.40.7";
|
||||||
prefixLength = 24;
|
prefixLength = 24;
|
||||||
} ];
|
} ];
|
||||||
interfaces.ibp5s0.ipv4.addresses = [ {
|
interfaces.ibs785.ipv4.addresses = [ {
|
||||||
address = "10.0.42.7";
|
address = "10.0.42.7";
|
||||||
prefixLength = 24;
|
prefixLength = 24;
|
||||||
} ];
|
} ];
|
||||||
|
|||||||
@@ -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 = ''
|
||||||
|
|||||||
@@ -46,7 +46,7 @@
|
|||||||
address = "10.0.40.42";
|
address = "10.0.40.42";
|
||||||
prefixLength = 24;
|
prefixLength = 24;
|
||||||
} ];
|
} ];
|
||||||
interfaces.ibp5s0.ipv4.addresses = [ {
|
interfaces.ibs785.ipv4.addresses = [ {
|
||||||
address = "10.0.42.42";
|
address = "10.0.42.42";
|
||||||
prefixLength = 24;
|
prefixLength = 24;
|
||||||
} ];
|
} ];
|
||||||
@@ -57,7 +57,7 @@
|
|||||||
# Accept monitoring requests from hut
|
# Accept monitoring requests from hut
|
||||||
iptables -A nixos-fw -p tcp -s hut --dport 9002 -j nixos-fw-accept
|
iptables -A nixos-fw -p tcp -s hut --dport 9002 -j nixos-fw-accept
|
||||||
# Accept all Ceph traffic from the local network
|
# Accept all Ceph traffic from the local network
|
||||||
iptables -A nixos-fw -p tcp -s 10.0.40.0/24 -m multiport --dport 3300,6789,6800:7568 -j nixos-fw-accept
|
iptables -A nixos-fw -p tcp -s 10.0.40.0/21 -m multiport --dport 3300,6789,6800:7568 -j nixos-fw-accept
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,3 +1,10 @@
|
|||||||
{
|
{
|
||||||
services.nixseparatedebuginfod.enable = true;
|
services.nixseparatedebuginfod2 = {
|
||||||
|
enable = true;
|
||||||
|
substituters = [
|
||||||
|
"local:"
|
||||||
|
"https://cache.nixos.org"
|
||||||
|
"http://hut/cache"
|
||||||
|
];
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
{ lib, ... }:
|
{ lib, pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
@@ -21,4 +21,20 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
services.slurm.client.enable = true;
|
services.slurm.client.enable = true;
|
||||||
|
|
||||||
|
# Only allow SSH connections from users who have a SLURM allocation
|
||||||
|
# See: https://slurm.schedmd.com/pam_slurm_adopt.html
|
||||||
|
security.pam.services.sshd.rules.account.slurm = {
|
||||||
|
control = "required";
|
||||||
|
enable = true;
|
||||||
|
modulePath = "${pkgs.slurm}/lib/security/pam_slurm_adopt.so";
|
||||||
|
args = [ "log_level=debug5" ];
|
||||||
|
order = 999999; # Make it last one
|
||||||
|
};
|
||||||
|
|
||||||
|
# Disable systemd session (pam_systemd.so) as it will conflict with the
|
||||||
|
# pam_slurm_adopt.so module. What happens is that the shell is first adopted
|
||||||
|
# into the slurmstepd task and then into the systemd session, which is not
|
||||||
|
# what we want, otherwise it will linger even if all jobs are gone.
|
||||||
|
security.pam.services.sshd.startSession = lib.mkForce false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,31 +1,6 @@
|
|||||||
{ config, pkgs, ... }:
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
let
|
{
|
||||||
suspendProgram = pkgs.writeShellScript "suspend.sh" ''
|
|
||||||
exec 1>>/var/log/power_save.log 2>>/var/log/power_save.log
|
|
||||||
set -x
|
|
||||||
export "PATH=/run/current-system/sw/bin:$PATH"
|
|
||||||
echo "$(date) Suspend invoked $0 $*" >> /var/log/power_save.log
|
|
||||||
hosts=$(scontrol show hostnames $1)
|
|
||||||
for host in $hosts; do
|
|
||||||
echo Shutting down host: $host
|
|
||||||
ipmitool -I lanplus -H ''${host}-ipmi -P "" -U "" chassis power off
|
|
||||||
done
|
|
||||||
'';
|
|
||||||
|
|
||||||
resumeProgram = pkgs.writeShellScript "resume.sh" ''
|
|
||||||
exec 1>>/var/log/power_save.log 2>>/var/log/power_save.log
|
|
||||||
set -x
|
|
||||||
export "PATH=/run/current-system/sw/bin:$PATH"
|
|
||||||
echo "$(date) Suspend invoked $0 $*" >> /var/log/power_save.log
|
|
||||||
hosts=$(scontrol show hostnames $1)
|
|
||||||
for host in $hosts; do
|
|
||||||
echo Starting host: $host
|
|
||||||
ipmitool -I lanplus -H ''${host}-ipmi -P "" -U "" chassis power on
|
|
||||||
done
|
|
||||||
'';
|
|
||||||
|
|
||||||
in {
|
|
||||||
services.slurm = {
|
services.slurm = {
|
||||||
controlMachine = "apex";
|
controlMachine = "apex";
|
||||||
clusterName = "jungle";
|
clusterName = "jungle";
|
||||||
@@ -59,16 +34,6 @@ in {
|
|||||||
# the resources. Use the task/cgroup plugin to enable process containment.
|
# the resources. Use the task/cgroup plugin to enable process containment.
|
||||||
TaskPlugin=task/affinity,task/cgroup
|
TaskPlugin=task/affinity,task/cgroup
|
||||||
|
|
||||||
# Power off unused nodes until they are requested
|
|
||||||
SuspendProgram=${suspendProgram}
|
|
||||||
SuspendTimeout=60
|
|
||||||
ResumeProgram=${resumeProgram}
|
|
||||||
ResumeTimeout=300
|
|
||||||
SuspendExcNodes=fox
|
|
||||||
|
|
||||||
# Turn the nodes off after 1 hour of inactivity
|
|
||||||
SuspendTime=3600
|
|
||||||
|
|
||||||
# Reduce port range so we can allow only this range in the firewall
|
# Reduce port range so we can allow only this range in the firewall
|
||||||
SrunPortRange=60000-61000
|
SrunPortRange=60000-61000
|
||||||
|
|
||||||
|
|||||||
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"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
address = "10.0.40.1";
|
address = "10.0.40.1";
|
||||||
prefixLength = 24;
|
prefixLength = 24;
|
||||||
} ];
|
} ];
|
||||||
interfaces.ibp5s0.ipv4.addresses = [ {
|
interfaces.ibs785.ipv4.addresses = [ {
|
||||||
address = "10.0.42.1";
|
address = "10.0.42.1";
|
||||||
prefixLength = 24;
|
prefixLength = 24;
|
||||||
} ];
|
} ];
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
prefixLength = 24;
|
prefixLength = 24;
|
||||||
} ];
|
} ];
|
||||||
# Watch out! The OmniPath device is not in the same place here:
|
# Watch out! The OmniPath device is not in the same place here:
|
||||||
interfaces.ibp129s0.ipv4.addresses = [ {
|
interfaces.ibs801.ipv4.addresses = [ {
|
||||||
address = "10.0.42.2";
|
address = "10.0.42.2";
|
||||||
prefixLength = 24;
|
prefixLength = 24;
|
||||||
} ];
|
} ];
|
||||||
|
|||||||
@@ -16,6 +16,8 @@
|
|||||||
../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
|
||||||
|
../module/ceph.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
# Select the this using the ID to avoid mismatches
|
# Select the this using the ID to avoid mismatches
|
||||||
@@ -63,6 +65,13 @@
|
|||||||
fsType = "ext4";
|
fsType = "ext4";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Mount the NFS home
|
||||||
|
fileSystems."/nfs/home" = {
|
||||||
|
device = "10.106.0.30:/home";
|
||||||
|
fsType = "nfs";
|
||||||
|
options = [ "nfsvers=3" "rsize=1024" "wsize=1024" "cto" "nofail" ];
|
||||||
|
};
|
||||||
|
|
||||||
# Make a /vault/$USER directory for each user.
|
# Make a /vault/$USER directory for each user.
|
||||||
systemd.services.create-vault-dirs = let
|
systemd.services.create-vault-dirs = let
|
||||||
# Take only normal users in tent
|
# Take only normal users in tent
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
{ config, lib, ... }:
|
{ config, lib, ... }:
|
||||||
|
let
|
||||||
|
cfg = config.services.gitea;
|
||||||
|
in
|
||||||
{
|
{
|
||||||
services.gitea = {
|
services.gitea = {
|
||||||
enable = true;
|
enable = true;
|
||||||
@@ -26,5 +29,54 @@
|
|||||||
SENDMAIL_ARGS = "--";
|
SENDMAIL_ARGS = "--";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
dump = {
|
||||||
|
enable = false; # Do not enable NixOS module, use our custom systemd script below
|
||||||
|
backupDir = "/vault/backup/gitea";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
systemd.services.gitea-backup = let
|
||||||
|
exe = lib.getExe cfg.package;
|
||||||
|
in {
|
||||||
|
description = "Gitea daily backup";
|
||||||
|
after = [ "gitea.service" ];
|
||||||
|
path = [ cfg.package ];
|
||||||
|
|
||||||
|
environment = {
|
||||||
|
USER = cfg.user;
|
||||||
|
HOME = cfg.stateDir;
|
||||||
|
GITEA_WORK_DIR = cfg.stateDir;
|
||||||
|
GITEA_CUSTOM = cfg.customDir;
|
||||||
|
};
|
||||||
|
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "oneshot";
|
||||||
|
User = cfg.user;
|
||||||
|
WorkingDirectory = cfg.dump.backupDir;
|
||||||
|
};
|
||||||
|
|
||||||
|
script = ''
|
||||||
|
name="gitea-dump-$(date +%a).${cfg.dump.type}"
|
||||||
|
${exe} dump --type ${cfg.dump.type} --file - >"$name.tmp"
|
||||||
|
mv "$name.tmp" "$name"
|
||||||
|
cp "$name" "/ceph/backup/gitea/$name"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
# Create also the /ceph directories if needed
|
||||||
|
systemd.tmpfiles.rules = [
|
||||||
|
"d /ceph/backup/gitea/ 0750 ${cfg.user} ${cfg.group} - -"
|
||||||
|
"z /ceph/backup/gitea/ 0750 ${cfg.user} ${cfg.group} - -"
|
||||||
|
];
|
||||||
|
|
||||||
|
systemd.timers.gitea-backup = {
|
||||||
|
description = "Update timer for gitea-backup";
|
||||||
|
partOf = [ "gitea-backup.service" ];
|
||||||
|
wantedBy = [ "timers.target" ];
|
||||||
|
timerConfig.OnCalendar = cfg.dump.interval;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Allow gitea user to send mail
|
||||||
|
users.users.gitea.extraGroups = [ "mail-robot" ];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,6 +43,7 @@
|
|||||||
registrationFlags = [
|
registrationFlags = [
|
||||||
# Increase build log length to 64 MiB
|
# Increase build log length to 64 MiB
|
||||||
"--output-limit 65536"
|
"--output-limit 65536"
|
||||||
|
"--docker-network-mode host"
|
||||||
];
|
];
|
||||||
preBuildScript = pkgs.writeScript "setup-container" ''
|
preBuildScript = pkgs.writeScript "setup-container" ''
|
||||||
mkdir -p -m 0755 /nix/var/log/nix/drvs
|
mkdir -p -m 0755 /nix/var/log/nix/drvs
|
||||||
|
|||||||
@@ -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 = ''
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
address = "10.0.40.6";
|
address = "10.0.40.6";
|
||||||
prefixLength = 24;
|
prefixLength = 24;
|
||||||
} ];
|
} ];
|
||||||
interfaces.ibp5s0.ipv4.addresses = [ {
|
interfaces.ibs785.ipv4.addresses = [ {
|
||||||
address = "10.0.42.6";
|
address = "10.0.42.6";
|
||||||
prefixLength = 24;
|
prefixLength = 24;
|
||||||
} ];
|
} ];
|
||||||
|
|||||||
55
overlay.nix
55
overlay.nix
@@ -19,7 +19,12 @@ 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 { };
|
||||||
|
gromacs = callPackage ./pkgs/gromacs/default.nix { enableSYCL = true; };
|
||||||
|
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
|
||||||
@@ -29,28 +34,36 @@ let
|
|||||||
linuxPackages_latest = prev.linuxPackages_latest.extend(_final: _prev: {
|
linuxPackages_latest = prev.linuxPackages_latest.extend(_final: _prev: {
|
||||||
amd-uprof-driver = _prev.callPackage ./pkgs/amd-uprof/driver.nix { };
|
amd-uprof-driver = _prev.callPackage ./pkgs/amd-uprof/driver.nix { };
|
||||||
});
|
});
|
||||||
|
llvm-intel-unwrapped = callPackage ./pkgs/llvm-intel/default.nix { };
|
||||||
|
llvm-intel = callPackage ./pkgs/llvm-intel/wrapped.nix { };
|
||||||
lmbench = callPackage ./pkgs/lmbench/default.nix { };
|
lmbench = callPackage ./pkgs/lmbench/default.nix { };
|
||||||
mcxx = callPackage ./pkgs/mcxx/default.nix { };
|
# Broken and unmantained
|
||||||
|
# mcxx = callPackage ./pkgs/mcxx/default.nix { };
|
||||||
meteocat-exporter = prev.callPackage ./pkgs/meteocat-exporter/default.nix { };
|
meteocat-exporter = prev.callPackage ./pkgs/meteocat-exporter/default.nix { };
|
||||||
mpi = final.mpich; # Set MPICH as default
|
mpi = final.mpich; # Set MPICH as default
|
||||||
mpich = callPackage ./pkgs/mpich/default.nix { mpich = prev.mpich; };
|
mpich = callPackage ./pkgs/mpich/default.nix { mpich = prev.mpich; };
|
||||||
nanos6 = callPackage ./pkgs/nanos6/default.nix { };
|
nanos6 = callPackage ./pkgs/nanos6/default.nix { };
|
||||||
nanos6Debug = final.nanos6.override { enableDebug = true; };
|
nanos6Debug = final.nanos6.override { enableDebug = true; };
|
||||||
nixtools = callPackage ./pkgs/nixtools/default.nix { };
|
nixtools = callPackage ./pkgs/nixtools/default.nix { };
|
||||||
|
nixgen = callPackage ./pkgs/nixgen/default.nix { };
|
||||||
# Broken because of pkgsStatic.libcap
|
# Broken because of pkgsStatic.libcap
|
||||||
# See: https://github.com/NixOS/nixpkgs/pull/268791
|
# See: https://github.com/NixOS/nixpkgs/pull/268791
|
||||||
#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 { };
|
||||||
ovni = callPackage ./pkgs/ovni/default.nix { };
|
ovni = callPackage ./pkgs/ovni/default.nix { };
|
||||||
ovniGit = final.ovni.override { useGit = true; };
|
ovniGit = final.ovni.override { useGit = true; };
|
||||||
paraverKernel = callPackage ./pkgs/paraver/kernel.nix { };
|
paraverKernel = callPackage ./pkgs/paraver/kernel.nix { };
|
||||||
|
pocl = callPackage ./pkgs/pocl/default.nix { };
|
||||||
|
pocl-noicd = callPackage ./pkgs/pocl/default.nix { enableICD = false; };
|
||||||
prometheus-slurm-exporter = prev.callPackage ./pkgs/slurm-exporter/default.nix { };
|
prometheus-slurm-exporter = prev.callPackage ./pkgs/slurm-exporter/default.nix { };
|
||||||
#pscom = callPackage ./pkgs/parastation/pscom.nix { }; # Unmaintaned
|
#pscom = callPackage ./pkgs/parastation/pscom.nix { }; # Unmaintaned
|
||||||
#psmpi = callPackage ./pkgs/parastation/psmpi.nix { }; # Unmaintaned
|
#psmpi = callPackage ./pkgs/parastation/psmpi.nix { }; # Unmaintaned
|
||||||
|
rodinia = callPackage ./pkgs/rodinia/default.nix { };
|
||||||
slurm = import ./pkgs/slurm/default.nix { slurm = prev.slurm; };
|
slurm = import ./pkgs/slurm/default.nix { slurm = prev.slurm; };
|
||||||
sonar = callPackage ./pkgs/sonar/default.nix { };
|
sonar = callPackage ./pkgs/sonar/default.nix { };
|
||||||
stdenvClangOmpss2 = final.stdenv.override { cc = final.clangOmpss2; allowedRequisites = null; };
|
stdenvClangOmpss2 = final.stdenv.override { cc = final.clangOmpss2; allowedRequisites = null; };
|
||||||
@@ -59,6 +72,9 @@ 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; };
|
||||||
|
unified-runtime = callPackage ./pkgs/unified-runtime/default.nix { };
|
||||||
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 { };
|
||||||
};
|
};
|
||||||
@@ -68,6 +84,13 @@ 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 { };
|
||||||
|
hello-sycl-pocl = (callPackage ./test/compilers/hello-sycl.nix { }).withPocl;
|
||||||
|
hello-sycl-intel = (callPackage ./test/compilers/hello-sycl.nix { }).withIntel;
|
||||||
|
hello-syclompss-pocl = (callPackage ./test/compilers/icpx-ompss2.nix { }).withPocl;
|
||||||
|
hello-syclompss-intel = (callPackage ./test/compilers/icpx-ompss2.nix { }).withIntel;
|
||||||
|
|
||||||
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; };
|
||||||
@@ -77,6 +100,13 @@ 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 {
|
||||||
@@ -94,20 +124,31 @@ let
|
|||||||
clangNosvOmpv-ld = callPackage ./test/compilers/clang-openmp-ld.nix {
|
clangNosvOmpv-ld = callPackage ./test/compilers/clang-openmp-ld.nix {
|
||||||
stdenv = final.stdenvClangOmpss2NodesOmpv;
|
stdenv = final.stdenvClangOmpss2NodesOmpv;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ocl-build = callPackage ./test/compilers/opencl.nix { };
|
||||||
|
ocl-build-noicd = callPackage ./test/compilers/opencl.nix { ocl-icd = final.pocl-noicd; };
|
||||||
|
|
||||||
|
pocl = callPackage ./test/compilers/pocl.nix { };
|
||||||
|
ocl-run-pocl = ocl-build.test-icd;
|
||||||
|
ocl-run-pocl-noicd = ocl-build-noicd.test-noicd;
|
||||||
|
|
||||||
|
sycl-ls = callPackage ./test/compilers/sycl-ls.nix { };
|
||||||
};
|
};
|
||||||
|
|
||||||
# For now, only build toplevel packages in CI/Hydra
|
# For now, only build toplevel packages in CI/Hydra
|
||||||
pkgsTopLevel = filterAttrs (_: isDerivation) bscPkgs;
|
pkgsTopLevel = filterAttrs (_: isDerivation) bscPkgs;
|
||||||
|
|
||||||
# Native build in that platform doesn't imply cross build works
|
# Native build in that platform doesn't imply cross build works
|
||||||
canCrossCompile = platform: pkg:
|
canCrossCompile = platform: default: pkg:
|
||||||
(isDerivation pkg) &&
|
(isDerivation pkg) &&
|
||||||
# Must be defined explicitly
|
# If meta.cross is undefined, use default
|
||||||
(pkg.meta.cross or false) &&
|
(pkg.meta.cross or default) &&
|
||||||
(meta.availableOn platform pkg);
|
(meta.availableOn final.pkgsCross.${platform}.stdenv.hostPlatform pkg);
|
||||||
|
|
||||||
# For now only RISC-V
|
# For now only RISC-V
|
||||||
crossSet = { riscv64 = final.pkgsCross.riscv64.bsc.pkgsTopLevel; };
|
crossSet = genAttrs [ "riscv64" ] (platform:
|
||||||
|
filterAttrs (_: canCrossCompile platform true)
|
||||||
|
final.pkgsCross.${platform}.bsc.pkgsTopLevel);
|
||||||
|
|
||||||
buildList = name: paths:
|
buildList = name: paths:
|
||||||
final.runCommandLocal name { } ''
|
final.runCommandLocal name { } ''
|
||||||
@@ -127,7 +168,7 @@ let
|
|||||||
# For now only RISC-V
|
# For now only RISC-V
|
||||||
crossList = buildList "ci-cross"
|
crossList = buildList "ci-cross"
|
||||||
(filter
|
(filter
|
||||||
(canCrossCompile final.pkgsCross.riscv64.stdenv.hostPlatform)
|
(canCrossCompile "riscv64" false) # opt-in (pkgs with: meta.cross = true)
|
||||||
(builtins.attrValues crossSet.riscv64));
|
(builtins.attrValues crossSet.riscv64));
|
||||||
|
|
||||||
in bscPkgs // {
|
in bscPkgs // {
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ in
|
|||||||
meta = {
|
meta = {
|
||||||
description = "Performance analysis tool-suite for x86 based applications";
|
description = "Performance analysis tool-suite for x86 based applications";
|
||||||
homepage = "https://www.amd.com/es/developer/uprof.html";
|
homepage = "https://www.amd.com/es/developer/uprof.html";
|
||||||
platforms = lib.platforms.linux;
|
platforms = [ "x86_64-linux" ];
|
||||||
license = lib.licenses.unfree;
|
license = lib.licenses.unfree;
|
||||||
maintainers = with lib.maintainers.bsc; [ rarias varcila ];
|
maintainers = with lib.maintainers.bsc; [ rarias varcila ];
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ in stdenv.mkDerivation {
|
|||||||
'';
|
'';
|
||||||
hardeningDisable = [ "pic" "format" ];
|
hardeningDisable = [ "pic" "format" ];
|
||||||
nativeBuildInputs = kernel.moduleBuildDependencies;
|
nativeBuildInputs = kernel.moduleBuildDependencies;
|
||||||
patches = [ ./makefile.patch ./hrtimer.patch ];
|
patches = [ ./makefile.patch ./hrtimer.patch ./remove-wr-rdmsrq.patch ];
|
||||||
makeFlags = [
|
makeFlags = [
|
||||||
"KERNEL_VERSION=${kernel.modDirVersion}"
|
"KERNEL_VERSION=${kernel.modDirVersion}"
|
||||||
"KERNEL_DIR=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
|
"KERNEL_DIR=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
|
||||||
|
|||||||
20
pkgs/amd-uprof/remove-wr-rdmsrq.patch
Normal file
20
pkgs/amd-uprof/remove-wr-rdmsrq.patch
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
diff --git a/inc/PwrProfAsm.h b/inc/PwrProfAsm.h
|
||||||
|
index d77770a..c93a0e9 100644
|
||||||
|
--- a/inc/PwrProfAsm.h
|
||||||
|
+++ b/inc/PwrProfAsm.h
|
||||||
|
@@ -347,6 +347,7 @@
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+/*
|
||||||
|
#define rdmsrq(msr,val1,val2,val3,val4) ({ \
|
||||||
|
__asm__ __volatile__( \
|
||||||
|
"rdmsr\n" \
|
||||||
|
@@ -362,6 +363,7 @@
|
||||||
|
:"c"(msr), "a"(val1), "d"(val2), "S"(val3), "D"(val4) \
|
||||||
|
); \
|
||||||
|
})
|
||||||
|
+*/
|
||||||
|
|
||||||
|
#define rdmsrpw(msr,val1,val2,val3,val4) ({ \
|
||||||
|
__asm__ __volatile__( \
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
stdenv
|
stdenv
|
||||||
|
, lib
|
||||||
, cudatoolkit
|
, cudatoolkit
|
||||||
, cudaPackages
|
, cudaPackages
|
||||||
, autoAddDriverRunpath
|
, autoAddDriverRunpath
|
||||||
@@ -11,7 +12,7 @@ stdenv.mkDerivation (finalAttrs: {
|
|||||||
src = ./.;
|
src = ./.;
|
||||||
buildInputs = [
|
buildInputs = [
|
||||||
cudatoolkit # Required for nvcc
|
cudatoolkit # Required for nvcc
|
||||||
cudaPackages.cuda_cudart.static # Required for -lcudart_static
|
(lib.getOutput "static" cudaPackages.cuda_cudart) # Required for -lcudart_static
|
||||||
autoAddDriverRunpath
|
autoAddDriverRunpath
|
||||||
];
|
];
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
@@ -40,4 +41,9 @@ stdenv.mkDerivation (finalAttrs: {
|
|||||||
'';
|
'';
|
||||||
installPhase = "touch $out";
|
installPhase = "touch $out";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
platforms = [ "x86_64-linux" ];
|
||||||
|
maintainers = with lib.maintainers.bsc; [ rarias ];
|
||||||
|
};
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -9,7 +9,6 @@
|
|||||||
, automake
|
, automake
|
||||||
, libtool
|
, libtool
|
||||||
, mpi
|
, mpi
|
||||||
, rsync
|
|
||||||
, gfortran
|
, gfortran
|
||||||
}:
|
}:
|
||||||
|
|
||||||
@@ -44,13 +43,24 @@ stdenv.mkDerivation rec {
|
|||||||
|
|
||||||
configureFlags = [
|
configureFlags = [
|
||||||
"--with-infiniband=${rdma-core-all}"
|
"--with-infiniband=${rdma-core-all}"
|
||||||
"--with-mpi=${mpiAll}"
|
"--with-mpi=yes" # fixes mpi detection when cross-compiling
|
||||||
"--with-slurm"
|
"--with-slurm"
|
||||||
"CFLAGS=-fPIC"
|
"CFLAGS=-fPIC"
|
||||||
"CXXFLAGS=-fPIC"
|
"CXXFLAGS=-fPIC"
|
||||||
];
|
];
|
||||||
|
|
||||||
buildInputs = [ slurm mpiAll rdma-core-all autoconf automake libtool rsync gfortran ];
|
nativeBuildInputs = [
|
||||||
|
autoconf
|
||||||
|
automake
|
||||||
|
gfortran
|
||||||
|
libtool
|
||||||
|
];
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
slurm
|
||||||
|
mpiAll
|
||||||
|
rdma-core-all
|
||||||
|
];
|
||||||
|
|
||||||
hardeningDisable = [ "all" ];
|
hardeningDisable = [ "all" ];
|
||||||
|
|
||||||
@@ -60,5 +70,6 @@ stdenv.mkDerivation rec {
|
|||||||
maintainers = with lib.maintainers.bsc; [ rarias ];
|
maintainers = with lib.maintainers.bsc; [ rarias ];
|
||||||
platforms = lib.platforms.linux;
|
platforms = lib.platforms.linux;
|
||||||
license = lib.licenses.gpl3Plus;
|
license = lib.licenses.gpl3Plus;
|
||||||
|
cross = false; # infiniband detection does not work
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
190
pkgs/gromacs/default.nix
Normal file
190
pkgs/gromacs/default.nix
Normal file
@@ -0,0 +1,190 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
stdenv,
|
||||||
|
fetchurl,
|
||||||
|
cmake,
|
||||||
|
hwloc,
|
||||||
|
fftw,
|
||||||
|
perl,
|
||||||
|
blas,
|
||||||
|
lapack,
|
||||||
|
llvmPackages,
|
||||||
|
intelPackages ? null,
|
||||||
|
mpi,
|
||||||
|
cudaPackages,
|
||||||
|
plumed,
|
||||||
|
singlePrec ? true,
|
||||||
|
config,
|
||||||
|
enableSYCL ? false,
|
||||||
|
enableCuda ? config.cudaSupport,
|
||||||
|
enableMpi ? false,
|
||||||
|
enablePlumed ? false,
|
||||||
|
cpuAcceleration ? null,
|
||||||
|
}:
|
||||||
|
|
||||||
|
# CUDA is only implemented for single precission
|
||||||
|
assert enableCuda -> singlePrec;
|
||||||
|
|
||||||
|
assert !(enableSYCL && enableCuda);
|
||||||
|
|
||||||
|
assert enableSYCL -> intelPackages != null;
|
||||||
|
|
||||||
|
let
|
||||||
|
inherit (cudaPackages.flags) cmakeCudaArchitecturesString;
|
||||||
|
|
||||||
|
# Select reasonable defaults for all major platforms
|
||||||
|
# The possible values are defined in CMakeLists.txt:
|
||||||
|
# AUTO None SSE2 SSE4.1 AVX_128_FMA AVX_256 AVX2_256
|
||||||
|
# AVX2_128 AVX_512 AVX_512_KNL MIC ARM_NEON ARM_NEON_ASIMD
|
||||||
|
SIMD =
|
||||||
|
x:
|
||||||
|
if (cpuAcceleration != null) then
|
||||||
|
x
|
||||||
|
else if stdenv.hostPlatform.system == "i686-linux" then
|
||||||
|
"SSE2"
|
||||||
|
else if stdenv.hostPlatform.system == "x86_64-linux" then
|
||||||
|
"SSE4.1"
|
||||||
|
else if stdenv.hostPlatform.system == "x86_64-darwin" then
|
||||||
|
"SSE4.1"
|
||||||
|
else if stdenv.hostPlatform.system == "aarch64-linux" then
|
||||||
|
"ARM_NEON_ASIMD"
|
||||||
|
else
|
||||||
|
"None";
|
||||||
|
|
||||||
|
source =
|
||||||
|
if enablePlumed then
|
||||||
|
{
|
||||||
|
version = "2024.2";
|
||||||
|
hash = "sha256-gCp+M18uiVdw9XsVnk7DaOuw/yzm2sz3BsboAlw2hSs=";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
version = "2025.3";
|
||||||
|
hash = "sha256-i9/KAmjz8Qp8o8BuWbYvc+oCQgxnIRwP85EvMteDPGU=";
|
||||||
|
};
|
||||||
|
|
||||||
|
stdenv' = if enableSYCL then intelPackages.stdenv else stdenv;
|
||||||
|
|
||||||
|
in
|
||||||
|
stdenv'.mkDerivation rec {
|
||||||
|
pname = "gromacs";
|
||||||
|
version = source.version;
|
||||||
|
|
||||||
|
src = fetchurl {
|
||||||
|
url = "ftp://ftp.gromacs.org/pub/gromacs/gromacs-${version}.tar.gz";
|
||||||
|
inherit (source) hash;
|
||||||
|
};
|
||||||
|
|
||||||
|
patches = [ (if enablePlumed then ./pkgconfig-2024.patch else ./pkgconfig-2025.patch) ];
|
||||||
|
|
||||||
|
postPatch = lib.optionalString enablePlumed ''
|
||||||
|
plumed patch -p -e gromacs-${source.version}
|
||||||
|
'';
|
||||||
|
|
||||||
|
outputs = [
|
||||||
|
"out"
|
||||||
|
"dev"
|
||||||
|
"man"
|
||||||
|
];
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
cmake
|
||||||
|
]
|
||||||
|
++ lib.optional enablePlumed plumed
|
||||||
|
++ lib.optionals enableCuda [ cudaPackages.cuda_nvcc ];
|
||||||
|
|
||||||
|
env.MKLROOT = intelPackages.mkl;
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
fftw
|
||||||
|
perl
|
||||||
|
hwloc
|
||||||
|
blas
|
||||||
|
lapack
|
||||||
|
]
|
||||||
|
++ lib.optional enableMpi mpi
|
||||||
|
++ lib.optionals enableCuda [
|
||||||
|
cudaPackages.cuda_cccl
|
||||||
|
cudaPackages.cuda_cudart
|
||||||
|
cudaPackages.libcufft
|
||||||
|
cudaPackages.cuda_profiler_api
|
||||||
|
]
|
||||||
|
++ lib.optional stdenv.hostPlatform.isDarwin llvmPackages.openmp;
|
||||||
|
|
||||||
|
propagatedBuildInputs = lib.optional enableMpi mpi;
|
||||||
|
propagatedUserEnvPkgs = lib.optional enableMpi mpi;
|
||||||
|
|
||||||
|
cmakeFlags = [
|
||||||
|
(lib.cmakeBool "GMX_HWLOC" true)
|
||||||
|
"-DGMX_SIMD:STRING=${SIMD cpuAcceleration}"
|
||||||
|
"-DGMX_OPENMP:BOOL=TRUE"
|
||||||
|
"-DBUILD_SHARED_LIBS=ON"
|
||||||
|
]
|
||||||
|
++ (
|
||||||
|
if singlePrec then
|
||||||
|
[
|
||||||
|
"-DGMX_DOUBLE=OFF"
|
||||||
|
]
|
||||||
|
else
|
||||||
|
[
|
||||||
|
"-DGMX_DOUBLE=ON"
|
||||||
|
"-DGMX_DEFAULT_SUFFIX=OFF"
|
||||||
|
]
|
||||||
|
)
|
||||||
|
++ (
|
||||||
|
if enableMpi then
|
||||||
|
[
|
||||||
|
"-DGMX_MPI:BOOL=TRUE"
|
||||||
|
"-DGMX_THREAD_MPI:BOOL=FALSE"
|
||||||
|
]
|
||||||
|
else
|
||||||
|
[
|
||||||
|
"-DGMX_MPI:BOOL=FALSE"
|
||||||
|
]
|
||||||
|
)
|
||||||
|
++ (lib.optionals enableSYCL [
|
||||||
|
"-DGMX_GPU=SYCL"
|
||||||
|
"-DGMX_OPENMP=OFF" # TODO: enable OpenMP with SYCL?
|
||||||
|
])
|
||||||
|
++ lib.optionals enableCuda [
|
||||||
|
"-DGMX_GPU=CUDA"
|
||||||
|
(lib.cmakeFeature "CMAKE_CUDA_ARCHITECTURES" cmakeCudaArchitecturesString)
|
||||||
|
|
||||||
|
# Gromacs seems to ignore and override the normal variables, so we add this ad hoc:
|
||||||
|
(lib.cmakeFeature "GMX_CUDA_TARGET_COMPUTE" cmakeCudaArchitecturesString)
|
||||||
|
];
|
||||||
|
|
||||||
|
postInstall = ''
|
||||||
|
moveToOutput share/cmake $dev
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
homepage = "https://www.gromacs.org";
|
||||||
|
license = licenses.lgpl21Plus;
|
||||||
|
description = "Molecular dynamics software package";
|
||||||
|
longDescription = ''
|
||||||
|
GROMACS is a versatile package to perform molecular dynamics,
|
||||||
|
i.e. simulate the Newtonian equations of motion for systems
|
||||||
|
with hundreds to millions of particles.
|
||||||
|
|
||||||
|
It is primarily designed for biochemical molecules like
|
||||||
|
proteins, lipids and nucleic acids that have a lot of
|
||||||
|
complicated bonded interactions, but since GROMACS is
|
||||||
|
extremely fast at calculating the nonbonded interactions (that
|
||||||
|
usually dominate simulations) many groups are also using it
|
||||||
|
for research on non-biological systems, e.g. polymers.
|
||||||
|
|
||||||
|
GROMACS supports all the usual algorithms you expect from a
|
||||||
|
modern molecular dynamics implementation, (check the online
|
||||||
|
reference or manual for details), but there are also quite a
|
||||||
|
few features that make it stand out from the competition.
|
||||||
|
|
||||||
|
See: https://www.gromacs.org/about.html for details.
|
||||||
|
'';
|
||||||
|
platforms = platforms.unix;
|
||||||
|
maintainers = with maintainers; [
|
||||||
|
sheepforce
|
||||||
|
markuskowa
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
24
pkgs/gromacs/pkgconfig-2024.patch
Normal file
24
pkgs/gromacs/pkgconfig-2024.patch
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
diff --git a/src/external/muparser/muparser.pc.in b/src/external/muparser/muparser.pc.in
|
||||||
|
index 646787cb53..9b97ad57f7 100644
|
||||||
|
--- a/src/external/muparser/muparser.pc.in
|
||||||
|
+++ b/src/external/muparser/muparser.pc.in
|
||||||
|
@@ -1,7 +1,5 @@
|
||||||
|
-prefix=@CMAKE_INSTALL_PREFIX@
|
||||||
|
-exec_prefix=${prefix}
|
||||||
|
-libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
|
||||||
|
-includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
|
||||||
|
+libdir=@CMAKE_INSTALL_FULL_LIBDIR@
|
||||||
|
+includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
|
||||||
|
|
||||||
|
Name: @PACKAGE_NAME@
|
||||||
|
Description: Mathematical expressions parser library
|
||||||
|
diff --git a/src/gromacs/libgromacs.pc.cmakein b/src/gromacs/libgromacs.pc.cmakein
|
||||||
|
index ec1ed6684e..ca1105474a 100644
|
||||||
|
--- a/src/gromacs/libgromacs.pc.cmakein
|
||||||
|
+++ b/src/gromacs/libgromacs.pc.cmakein
|
||||||
|
@@ -1,4 +1,4 @@
|
||||||
|
-libdir=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@
|
||||||
|
+libdir=@CMAKE_INSTALL_FULL_LIBDIR@
|
||||||
|
|
||||||
|
Name: libgromacs@GMX_LIBS_SUFFIX@
|
||||||
|
Description: Gromacs library
|
||||||
36
pkgs/gromacs/pkgconfig-2025.patch
Normal file
36
pkgs/gromacs/pkgconfig-2025.patch
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
diff --git a/src/external/muparser/muparser.pc.in b/src/external/muparser/muparser.pc.in
|
||||||
|
index 646787cb53..d26e84de8f 100644
|
||||||
|
--- a/src/external/muparser/muparser.pc.in
|
||||||
|
+++ b/src/external/muparser/muparser.pc.in
|
||||||
|
@@ -1,11 +1,9 @@
|
||||||
|
-prefix=@CMAKE_INSTALL_PREFIX@
|
||||||
|
-exec_prefix=${prefix}
|
||||||
|
-libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
|
||||||
|
-includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
|
||||||
|
-
|
||||||
|
-Name: @PACKAGE_NAME@
|
||||||
|
-Description: Mathematical expressions parser library
|
||||||
|
-Version: @MUPARSER_VERSION@
|
||||||
|
-Requires:
|
||||||
|
-Libs: -L${libdir} -lmuparser
|
||||||
|
-Cflags: -I${includedir} @PKG_CONFIG_FLAGS@
|
||||||
|
+libdir=@CMAKE_INSTALL_FULL_LIBDIR@
|
||||||
|
+includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
|
||||||
|
+
|
||||||
|
+Name: @PACKAGE_NAME@
|
||||||
|
+Description: Mathematical expressions parser library
|
||||||
|
+Version: @MUPARSER_VERSION@
|
||||||
|
+Requires:
|
||||||
|
+Libs: -L${libdir} -lmuparser
|
||||||
|
+Cflags: -I${includedir} @PKG_CONFIG_FLAGS@
|
||||||
|
diff --git a/src/gromacs/libgromacs.pc.cmakein b/src/gromacs/libgromacs.pc.cmakein
|
||||||
|
index af9b5a6dc0..5f58d549bf 100644
|
||||||
|
--- a/src/gromacs/libgromacs.pc.cmakein
|
||||||
|
+++ b/src/gromacs/libgromacs.pc.cmakein
|
||||||
|
@@ -1,5 +1,4 @@
|
||||||
|
-prefix=@CMAKE_INSTALL_PREFIX@
|
||||||
|
-libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
|
||||||
|
+libdir=@CMAKE_INSTALL_FULL_LIBDIR@
|
||||||
|
|
||||||
|
Name: libgromacs@GMX_LIBS_SUFFIX@
|
||||||
|
Description: Gromacs library
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
, zlib
|
, zlib
|
||||||
, autoPatchelfHook
|
, autoPatchelfHook
|
||||||
, libfabric
|
, libfabric
|
||||||
, gcc13
|
, gcc
|
||||||
, wrapCCWith
|
, wrapCCWith
|
||||||
}:
|
}:
|
||||||
|
|
||||||
@@ -33,8 +33,6 @@ let
|
|||||||
maintainers = with lib.maintainers.bsc; [ abonerib ];
|
maintainers = with lib.maintainers.bsc; [ abonerib ];
|
||||||
};
|
};
|
||||||
|
|
||||||
gcc = gcc13;
|
|
||||||
|
|
||||||
v = {
|
v = {
|
||||||
hpckit = "2023.1.0";
|
hpckit = "2023.1.0";
|
||||||
compiler = "2023.1.0";
|
compiler = "2023.1.0";
|
||||||
@@ -42,45 +40,19 @@ let
|
|||||||
mpi = "2021.9.0";
|
mpi = "2021.9.0";
|
||||||
};
|
};
|
||||||
|
|
||||||
aptPackageIndex = stdenv.mkDerivation {
|
findMatch = name:
|
||||||
name = "intel-oneapi-packages";
|
|
||||||
srcs = [
|
|
||||||
# Run update.sh to update the package lists
|
|
||||||
./amd64-packages ./all-packages
|
|
||||||
];
|
|
||||||
phases = [ "installPhase" ];
|
|
||||||
installPhase = ''
|
|
||||||
awk -F': ' '\
|
|
||||||
BEGIN { print "[ {" } \
|
|
||||||
NR>1 && /^Package: / { print "} {"; } \
|
|
||||||
/: / { printf "%s = \"%s\";\n", $1, $2 } \
|
|
||||||
END { print "} ]" }' $srcs > $out
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
aptPackages = import aptPackageIndex;
|
|
||||||
|
|
||||||
apthost = "https://apt.repos.intel.com/oneapi/";
|
|
||||||
|
|
||||||
getSum = pkgList: name:
|
|
||||||
let
|
let
|
||||||
matches = lib.filter (x: name == x.Package) pkgList;
|
aptPackages = builtins.fromJSON (builtins.readFile ./packages.json);
|
||||||
#n = lib.length matches;
|
matches = lib.filter (x: name == x.pname) 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;
|
||||||
@@ -100,10 +72,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";
|
||||||
|
|
||||||
@@ -472,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 = ''
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
1
pkgs/intel-oneapi/packages.json
Normal file
1
pkgs/intel-oneapi/packages.json
Normal file
File diff suppressed because one or more lines are too long
297
pkgs/intel-oneapi/packages.nix
Normal file
297
pkgs/intel-oneapi/packages.nix
Normal file
@@ -0,0 +1,297 @@
|
|||||||
|
{
|
||||||
|
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;
|
||||||
|
}
|
||||||
201
pkgs/intel-oneapi/patch_intel.nix
Normal file
201
pkgs/intel-oneapi/patch_intel.nix
Normal file
@@ -0,0 +1,201 @@
|
|||||||
|
{
|
||||||
|
stdenv,
|
||||||
|
stdenvNoCC,
|
||||||
|
lib,
|
||||||
|
symlinkJoin,
|
||||||
|
autoPatchelfHook,
|
||||||
|
wrapCCWith,
|
||||||
|
overrideCC,
|
||||||
|
gcc,
|
||||||
|
hwloc,
|
||||||
|
libelf,
|
||||||
|
libgcc,
|
||||||
|
libffi_3_3,
|
||||||
|
libpsm2,
|
||||||
|
libuuid,
|
||||||
|
libxml2,
|
||||||
|
numactl,
|
||||||
|
ocl-icd,
|
||||||
|
openssl,
|
||||||
|
python3,
|
||||||
|
rdma-core,
|
||||||
|
ucx,
|
||||||
|
zlib,
|
||||||
|
writeTextFile,
|
||||||
|
}:
|
||||||
|
|
||||||
|
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${libgcc.out}/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
|
||||||
|
|
||||||
|
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;
|
||||||
|
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}";
|
||||||
|
|
||||||
|
etc-vendors = writeTextFile {
|
||||||
|
name = "intel-ocl-icd";
|
||||||
|
text = "${original}/lib/libintelocl.so";
|
||||||
|
destination = "/etc/OpenCL/vendors/intel.icd";
|
||||||
|
};
|
||||||
|
in
|
||||||
|
symlinkJoin {
|
||||||
|
pname = "intel-${folder}";
|
||||||
|
inherit version;
|
||||||
|
paths = [ original ] ++ lib.optionals (folder == "compiler") [ etc-vendors ];
|
||||||
|
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;
|
||||||
|
};
|
||||||
|
|
||||||
|
})
|
||||||
|
)
|
||||||
29
pkgs/intel-oneapi/process.jq
Executable file
29
pkgs/intel-oneapi/process.jq
Executable file
@@ -0,0 +1,29 @@
|
|||||||
|
#!/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]
|
||||||
29
pkgs/intel-oneapi/toJson.awk
Executable file
29
pkgs/intel-oneapi/toJson.awk
Executable file
@@ -0,0 +1,29 @@
|
|||||||
|
#!/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,4 +1,11 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
curl https://apt.repos.intel.com/oneapi/dists/all/main/binary-amd64/Packages -o amd64-packages
|
out_64=$(mktemp intel-api.64.XXXXXX)
|
||||||
curl https://apt.repos.intel.com/oneapi/dists/all/main/binary-all/Packages -o all-packages
|
out_all=$(mktemp intel-api.all.XXXXXX)
|
||||||
|
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
|
||||||
|
|||||||
243
pkgs/llvm-intel/default.nix
Normal file
243
pkgs/llvm-intel/default.nix
Normal file
@@ -0,0 +1,243 @@
|
|||||||
|
{
|
||||||
|
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,
|
||||||
|
|
||||||
|
cudaPackages,
|
||||||
|
enableCuda ? true,
|
||||||
|
}:
|
||||||
|
|
||||||
|
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
|
||||||
|
autoAddDriverRunpath
|
||||||
|
]
|
||||||
|
++ lib.optionals enableCuda [
|
||||||
|
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 = lib.optionals enableCuda [ "zerocallusedregs" ]; # not supported for nvidia
|
||||||
|
|
||||||
|
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;
|
||||||
|
};
|
||||||
|
|
||||||
|
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/llvm-intel/fix-ur.patch
Normal file
23
pkgs/llvm-intel/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()
|
||||||
|
|
||||||
60
pkgs/llvm-intel/wrapped.nix
Normal file
60
pkgs/llvm-intel/wrapped.nix
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
{
|
||||||
|
stdenv,
|
||||||
|
wrapCCWith,
|
||||||
|
llvm-intel-unwrapped,
|
||||||
|
gcc,
|
||||||
|
libgcc,
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
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}/lib/clang/${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
|
||||||
|
|
||||||
|
ln -s $ccPath/sycl-ls $out/bin/sycl-ls
|
||||||
|
ln -s $ccPath/sycl-trace $out/bin/sycl-trace
|
||||||
|
|
||||||
|
# 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
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
in
|
||||||
|
wrapIntel llvm-intel-unwrapped
|
||||||
@@ -16,19 +16,19 @@
|
|||||||
, useGit ? false
|
, useGit ? false
|
||||||
, gitUrl ? "ssh://git@bscpm04.bsc.es/llvm-ompss/llvm-mono.git"
|
, gitUrl ? "ssh://git@bscpm04.bsc.es/llvm-ompss/llvm-mono.git"
|
||||||
, gitBranch ? "master"
|
, gitBranch ? "master"
|
||||||
, gitCommit ? "880e2341c56bad1dc14e8c369fb3356bec19018e"
|
, gitCommit ? "872ba63f86edaefc9787984ef3fae9f2f94e0124" # github-release-2025.11
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
stdenv = llvmPackages_latest.stdenv;
|
stdenv = llvmPackages_latest.stdenv;
|
||||||
|
|
||||||
release = rec {
|
release = rec {
|
||||||
version = "2025.06";
|
version = "2025.11";
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "bsc-pm";
|
owner = "bsc-pm";
|
||||||
repo = "llvm";
|
repo = "llvm";
|
||||||
rev = "refs/tags/github-release-${version}";
|
rev = "refs/tags/github-release-${version}";
|
||||||
hash = "sha256-ww9PpRmtz/M9IyLiZ8rAehx2UW4VpQt+svf4XfKBzKo=";
|
hash = "sha256-UgwMTUkM9Z87dDH205swZFBeFhrcbLAxginViG40pBM=";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
, lib
|
, lib
|
||||||
, gcc
|
, gcc
|
||||||
, clangOmpss2Unwrapped
|
, clangOmpss2Unwrapped
|
||||||
|
, writeShellScript
|
||||||
, openmp ? null
|
, openmp ? null
|
||||||
, wrapCCWith
|
, wrapCCWith
|
||||||
, llvmPackages_latest
|
, llvmPackages_latest
|
||||||
@@ -27,20 +28,17 @@ let
|
|||||||
# We need to replace the lld linker from bintools with our linker just built,
|
# We need to replace the lld linker from bintools with our linker just built,
|
||||||
# otherwise we run into incompatibility issues when mixing compiler and linker
|
# otherwise we run into incompatibility issues when mixing compiler and linker
|
||||||
# versions.
|
# versions.
|
||||||
bintools-unwrapped = llvmPackages_latest.tools.bintools-unwrapped.override {
|
bintools-unwrapped = llvmPackages_latest.bintools-unwrapped.override {
|
||||||
lld = clangOmpss2Unwrapped;
|
lld = clangOmpss2Unwrapped;
|
||||||
};
|
};
|
||||||
bintools = llvmPackages_latest.tools.bintools.override {
|
bintools = llvmPackages_latest.bintools.override {
|
||||||
bintools = bintools-unwrapped;
|
bintools = bintools-unwrapped;
|
||||||
};
|
};
|
||||||
targetConfig = stdenv.targetPlatform.config;
|
targetConfig = stdenv.targetPlatform.config;
|
||||||
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
|
||||||
@@ -57,14 +55,50 @@ in wrapCCWith {
|
|||||||
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;
|
||||||
|
};
|
||||||
|
})
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ stdenv.mkDerivation rec {
|
|||||||
];
|
];
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
|
broken = true;
|
||||||
homepage = "https://github.com/bsc-pm/mcxx";
|
homepage = "https://github.com/bsc-pm/mcxx";
|
||||||
description = "C/C++/Fortran source-to-source compilation infrastructure aimed at fast prototyping";
|
description = "C/C++/Fortran source-to-source compilation infrastructure aimed at fast prototyping";
|
||||||
maintainers = with lib.maintainers.bsc; [ rpenacob ];
|
maintainers = with lib.maintainers.bsc; [ rpenacob ];
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
{ python3Packages, lib }:
|
{ python3Packages, lib }:
|
||||||
|
|
||||||
python3Packages.buildPythonApplication rec {
|
python3Packages.buildPythonApplication {
|
||||||
pname = "meteocat-exporter";
|
pname = "meteocat-exporter";
|
||||||
version = "1.0";
|
version = "1.0";
|
||||||
|
|
||||||
|
pyproject = true;
|
||||||
|
|
||||||
src = ./.;
|
src = ./.;
|
||||||
|
|
||||||
doCheck = false;
|
doCheck = false;
|
||||||
|
|||||||
@@ -6,6 +6,13 @@
|
|||||||
, pmix
|
, pmix
|
||||||
, gfortran
|
, gfortran
|
||||||
, symlinkJoin
|
, symlinkJoin
|
||||||
|
# Disabled when cross-compiling
|
||||||
|
# To fix cross compilation, we should fill the values in:
|
||||||
|
# https://github.com/pmodels/mpich/blob/main/maint/fcrosscompile/cross_values.txt.in
|
||||||
|
# For each arch
|
||||||
|
, enableFortran ? stdenv.hostPlatform == stdenv.buildPlatform
|
||||||
|
, perl
|
||||||
|
, targetPackages
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
@@ -15,10 +22,13 @@ let
|
|||||||
paths = [ pmix.dev pmix.out ];
|
paths = [ pmix.dev pmix.out ];
|
||||||
};
|
};
|
||||||
in mpich.overrideAttrs (old: {
|
in mpich.overrideAttrs (old: {
|
||||||
buildInput = old.buildInputs ++ [
|
buildInputs = old.buildInputs ++ [
|
||||||
libfabric
|
libfabric
|
||||||
pmixAll
|
pmixAll
|
||||||
];
|
];
|
||||||
|
nativeBuildInputs = old.nativeBuildInputs ++ [
|
||||||
|
perl
|
||||||
|
];
|
||||||
configureFlags = [
|
configureFlags = [
|
||||||
"--enable-shared"
|
"--enable-shared"
|
||||||
"--enable-sharedlib"
|
"--enable-sharedlib"
|
||||||
@@ -31,10 +41,21 @@ in mpich.overrideAttrs (old: {
|
|||||||
] ++ lib.optionals (lib.versionAtLeast gfortran.version "10") [
|
] ++ lib.optionals (lib.versionAtLeast gfortran.version "10") [
|
||||||
"FFLAGS=-fallow-argument-mismatch" # https://github.com/pmodels/mpich/issues/4300
|
"FFLAGS=-fallow-argument-mismatch" # https://github.com/pmodels/mpich/issues/4300
|
||||||
"FCFLAGS=-fallow-argument-mismatch"
|
"FCFLAGS=-fallow-argument-mismatch"
|
||||||
|
] ++ lib.optionals (!enableFortran) [
|
||||||
|
"--disable-fortran"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
preFixup = ''
|
||||||
|
sed -i 's:^CC=.*:CC=${targetPackages.stdenv.cc}/bin/${targetPackages.stdenv.cc.targetPrefix}cc:' $out/bin/mpicc
|
||||||
|
sed -i 's:^CXX=.*:CXX=${targetPackages.stdenv.cc}/bin/${targetPackages.stdenv.cc.targetPrefix}c++:' $out/bin/mpicxx
|
||||||
|
'' + lib.optionalString enableFortran ''
|
||||||
|
sed -i 's:^FC=.*:FC=${targetPackages.gfortran or gfortran}/bin/${targetPackages.gfortran.targetPrefix or gfortran.targetPrefix}gfortran:' $out/bin/mpifort
|
||||||
|
'';
|
||||||
|
|
||||||
hardeningDisable = [ "all" ];
|
hardeningDisable = [ "all" ];
|
||||||
|
|
||||||
meta = old.meta // {
|
meta = old.meta // {
|
||||||
maintainers = old.meta.maintainers ++ (with lib.maintainers.bsc; [ rarias ]);
|
maintainers = old.meta.maintainers ++ (with lib.maintainers.bsc; [ rarias ]);
|
||||||
|
cross = true;
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
|
|||||||
22
pkgs/nixgen/default.nix
Normal file
22
pkgs/nixgen/default.nix
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
stdenv
|
||||||
|
, lib
|
||||||
|
}:
|
||||||
|
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
pname = "nixgen";
|
||||||
|
version = "0.0.1";
|
||||||
|
src = ./nixgen;
|
||||||
|
dontUnpack = true;
|
||||||
|
phases = [ "installPhase" ];
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out/bin
|
||||||
|
cp -a $src $out/bin/nixgen
|
||||||
|
'';
|
||||||
|
meta = {
|
||||||
|
description = "Quickly generate flake.nix from command line";
|
||||||
|
maintainers = with lib.maintainers.bsc; [ rarias ];
|
||||||
|
platforms = lib.platforms.linux;
|
||||||
|
license = lib.licenses.gpl3Plus;
|
||||||
|
};
|
||||||
|
}
|
||||||
97
pkgs/nixgen/nixgen
Executable file
97
pkgs/nixgen/nixgen
Executable file
@@ -0,0 +1,97 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Copyright (c) 2025, Barcelona Supercomputing Center (BSC)
|
||||||
|
# SPDX-License-Identifier: GPL-3.0+
|
||||||
|
# Author: Rodrigo Arias Mallo <rodrigo.arias@bsc.es>
|
||||||
|
|
||||||
|
function usage() {
|
||||||
|
echo "USAGE: nixgen [-f] [package [...]] [-b package [...]]" >&2
|
||||||
|
echo " Generates a flake.nix file with the given packages." >&2
|
||||||
|
echo " After flake.nix is created, use 'nix develop' to enter the shell." >&2
|
||||||
|
echo "OPTIONS" >&2
|
||||||
|
echo " -f Overwrite existing flake.nix (default: no)." >&2
|
||||||
|
echo " packages... Add these packages to the shell." >&2
|
||||||
|
echo " -b packages... Add the dependencies needed to build these packages." >&2
|
||||||
|
echo "EXAMPLE" >&2
|
||||||
|
echo " $ nixgen ovni bigotes -b nosv tampi" >&2
|
||||||
|
echo " Adds the packages ovni and bigotes as well as all required dependencies" >&2
|
||||||
|
echo " to build nosv and tampi." >&2
|
||||||
|
echo "AUTHOR" >&2
|
||||||
|
echo " Rodrigo Arias Mallo <rodrigo.arias@bsc.es>" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
mode=package
|
||||||
|
packages=
|
||||||
|
inputsFrom=
|
||||||
|
force=
|
||||||
|
|
||||||
|
if [[ $# -eq 0 ]]; then
|
||||||
|
usage
|
||||||
|
fi
|
||||||
|
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case $1 in -b)
|
||||||
|
mode=build
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-f)
|
||||||
|
force=1
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-h)
|
||||||
|
usage
|
||||||
|
;;
|
||||||
|
-*|--*)
|
||||||
|
echo "error: unknown option $1" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
if [ "$mode" == "package" ]; then
|
||||||
|
packages+="${packages:+ }$1"
|
||||||
|
else
|
||||||
|
inputsFrom+="${inputsFrom:+ }$1"
|
||||||
|
fi
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ ! "$force" -a -e flake.nix ]; then
|
||||||
|
echo "error: flake.nix exists, force overwrite with -f" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat > flake.nix <<EOF
|
||||||
|
{
|
||||||
|
inputs.jungle.url = "git+https://jungle.bsc.es/git/rarias/jungle";
|
||||||
|
outputs = { self, jungle }:
|
||||||
|
let
|
||||||
|
nixpkgs = jungle.inputs.nixpkgs;
|
||||||
|
customOverlay = (final: prev: {
|
||||||
|
# Example overlay, for now empty
|
||||||
|
});
|
||||||
|
pkgs = import nixpkgs {
|
||||||
|
system = "x86_64-linux";
|
||||||
|
overlays = [
|
||||||
|
# Apply jungle overlay to get our BSC custom packages
|
||||||
|
jungle.outputs.bscOverlay
|
||||||
|
# And on top apply our local changes to customize for cluster
|
||||||
|
customOverlay
|
||||||
|
];
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
devShells.x86_64-linux.default = pkgs.mkShell {
|
||||||
|
pname = "devshell";
|
||||||
|
# Include these packages in the shell
|
||||||
|
packages = with pkgs; [
|
||||||
|
$packages
|
||||||
|
];
|
||||||
|
# The dependencies needed to build these packages will be also included
|
||||||
|
inputsFrom = with pkgs; [
|
||||||
|
$inputsFrom
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
EOF
|
||||||
@@ -14,19 +14,19 @@
|
|||||||
, useGit ? false
|
, useGit ? false
|
||||||
, gitUrl ? "ssh://git@gitlab-internal.bsc.es/nos-v/nodes.git"
|
, gitUrl ? "ssh://git@gitlab-internal.bsc.es/nos-v/nodes.git"
|
||||||
, gitBranch ? "master"
|
, gitBranch ? "master"
|
||||||
, gitCommit ? "6002ec9ae6eb876d962cc34366952a3b26599ba6"
|
, gitCommit ? "511489e71504a44381e0930562e7ac80ac69a848" # version-1.4
|
||||||
}:
|
}:
|
||||||
|
|
||||||
with lib;
|
with lib;
|
||||||
|
|
||||||
let
|
let
|
||||||
release = rec {
|
release = rec {
|
||||||
version = "1.3";
|
version = "1.4";
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "bsc-pm";
|
owner = "bsc-pm";
|
||||||
repo = "nodes";
|
repo = "nodes";
|
||||||
rev = "version-${version}";
|
rev = "version-${version}";
|
||||||
hash = "sha256-cFb9pxcjtkMmH0CsGgUO9LTdXDNh7MCqicgGWawLrsU=";
|
hash = "sha256-+lR/R0l3fGZO3XG7whMorFW2y2YZ0ZFnLeOHyQYrAsQ=";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -13,19 +13,19 @@
|
|||||||
, useGit ? false
|
, useGit ? false
|
||||||
, gitUrl ? "git@gitlab-internal.bsc.es:nos-v/nos-v.git"
|
, gitUrl ? "git@gitlab-internal.bsc.es:nos-v/nos-v.git"
|
||||||
, gitBranch ? "master"
|
, gitBranch ? "master"
|
||||||
, gitCommit ? "9f47063873c3aa9d6a47482a82c5000a8c813dd8"
|
, gitCommit ? "1108e4786b58e0feb9a16fa093010b763eb2f8e8" # version 4.0.0
|
||||||
}:
|
}:
|
||||||
|
|
||||||
with lib;
|
with lib;
|
||||||
|
|
||||||
let
|
let
|
||||||
release = rec {
|
release = rec {
|
||||||
version = "3.2.0";
|
version = "4.0.0";
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "bsc-pm";
|
owner = "bsc-pm";
|
||||||
repo = "nos-v";
|
repo = "nos-v";
|
||||||
rev = "${version}";
|
rev = "${version}";
|
||||||
hash = "sha256-yaz92426EM8trdkBJlISmAoG9KJCDTvoAW/HKrasvOw=";
|
hash = "sha256-llaq73bd/YxLVKNlMebnUHKa4z3sdcsuDUoVwUxNuw8=";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
91
pkgs/onemath/default.nix
Normal file
91
pkgs/onemath/default.nix
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
{
|
||||||
|
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
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
||||||
@@ -32,6 +32,11 @@ stdenv.mkDerivation rec {
|
|||||||
"CXX=mpicxx"
|
"CXX=mpicxx"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
env = {
|
||||||
|
MPICH_CC="${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc";
|
||||||
|
MPICH_CXX="${stdenv.cc}/bin/${stdenv.cc.targetPrefix}c++";
|
||||||
|
};
|
||||||
|
|
||||||
postInstall = ''
|
postInstall = ''
|
||||||
mkdir -p $out/bin
|
mkdir -p $out/bin
|
||||||
for f in $(find $out -executable -type f); do
|
for f in $(find $out -executable -type f); do
|
||||||
@@ -44,5 +49,6 @@ stdenv.mkDerivation rec {
|
|||||||
homepage = "http://mvapich.cse.ohio-state.edu/benchmarks/";
|
homepage = "http://mvapich.cse.ohio-state.edu/benchmarks/";
|
||||||
maintainers = [ ];
|
maintainers = [ ];
|
||||||
platforms = lib.platforms.all;
|
platforms = lib.platforms.all;
|
||||||
|
cross = true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
, useGit ? false
|
, useGit ? false
|
||||||
, gitBranch ? "master"
|
, gitBranch ? "master"
|
||||||
, gitUrl ? "ssh://git@bscpm04.bsc.es/rarias/ovni.git"
|
, gitUrl ? "ssh://git@bscpm04.bsc.es/rarias/ovni.git"
|
||||||
, gitCommit ? "e4f62382076f0cf0b1d08175cf57cc0bc51abc61"
|
, gitCommit ? "06432668f346c8bdc1006fabc23e94ccb81b0d8b" # version 1.13.0
|
||||||
, enableDebug ? false
|
, enableDebug ? false
|
||||||
# Only enable MPI if the build is native (fails on cross-compilation)
|
# Only enable MPI if the build is native (fails on cross-compilation)
|
||||||
, useMpi ? (stdenv.buildPlatform.canExecute stdenv.hostPlatform)
|
, useMpi ? (stdenv.buildPlatform.canExecute stdenv.hostPlatform)
|
||||||
@@ -15,13 +15,13 @@
|
|||||||
|
|
||||||
let
|
let
|
||||||
release = rec {
|
release = rec {
|
||||||
version = "1.12.0";
|
version = "1.13.0";
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "bsc-pm";
|
owner = "bsc-pm";
|
||||||
repo = "ovni";
|
repo = "ovni";
|
||||||
rev = "${version}";
|
rev = "${version}";
|
||||||
hash = "sha256-H04JvsVKrdqr3ON7JhU0g17jjlg/jzQ7eTfx9vUNd3E=";
|
hash = "sha256-0l2ryIyWNiZqeYdVlnj/WnQGS3xFCY4ICG8JedX424w=";
|
||||||
} // { shortRev = "a73afcf"; };
|
} // { shortRev = "0643266"; };
|
||||||
};
|
};
|
||||||
|
|
||||||
git = rec {
|
git = rec {
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
, paraverKernel
|
, paraverKernel
|
||||||
, openssl
|
, openssl
|
||||||
, glibcLocales
|
, glibcLocales
|
||||||
, wrapGAppsHook
|
, wrapGAppsHook3
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
@@ -64,7 +64,7 @@ stdenv.mkDerivation rec {
|
|||||||
autoconf
|
autoconf
|
||||||
automake
|
automake
|
||||||
autoreconfHook
|
autoreconfHook
|
||||||
wrapGAppsHook
|
wrapGAppsHook3
|
||||||
];
|
];
|
||||||
|
|
||||||
buildInputs = [
|
buildInputs = [
|
||||||
|
|||||||
26
pkgs/pocl/0001-cmake-do-not-use-suffix.patch
Normal file
26
pkgs/pocl/0001-cmake-do-not-use-suffix.patch
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
From ccf301659caac9b5e973ba1f2d32352acf617a98 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Aleix=20Bon=C3=A9?= <aleix.boneribo@bsc.es>
|
||||||
|
Date: Tue, 2 Jul 2024 16:45:05 +0200
|
||||||
|
Subject: [PATCH] cmake: do not use suffix
|
||||||
|
|
||||||
|
---
|
||||||
|
cmake/LLVM.cmake | 3 ++
|
||||||
|
1 files changed, 3 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/cmake/LLVM.cmake b/cmake/LLVM.cmake
|
||||||
|
index f4dbda065..e29144dce 100644
|
||||||
|
--- a/cmake/LLVM.cmake
|
||||||
|
+++ b/cmake/LLVM.cmake
|
||||||
|
@@ -65,6 +65,9 @@ else()
|
||||||
|
message(WARNING "Cannot determine llvm binary suffix from ${LLVM_CONFIG}")
|
||||||
|
endif()
|
||||||
|
message(STATUS "LLVM binaries suffix : ${LLVM_BINARY_SUFFIX}")
|
||||||
|
+
|
||||||
|
+ # We don't want suffixes in nix
|
||||||
|
+ set(LLVM_BINARY_SUFFIX "")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
get_filename_component(LLVM_CONFIG_LOCATION "${LLVM_CONFIG}" DIRECTORY)
|
||||||
|
--
|
||||||
|
2.45.1
|
||||||
|
|
||||||
33
pkgs/pocl/0001-cmake-native-build-tools.patch
Normal file
33
pkgs/pocl/0001-cmake-native-build-tools.patch
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
From f24b456c50f587b05cc8f2699c94d8cdefc5b13e Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Aleix=20Bon=C3=A9?= <aleix.boneribo@bsc.es>
|
||||||
|
Date: Tue, 2 Jul 2024 17:11:11 +0200
|
||||||
|
Subject: [PATCH] cmake: native build tools
|
||||||
|
|
||||||
|
---
|
||||||
|
cmake/LLVM.cmake | 7 +-
|
||||||
|
1 files changed, 6 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/cmake/LLVM.cmake b/cmake/LLVM.cmake
|
||||||
|
index e29144dce..b9f14ce6a 100644
|
||||||
|
--- a/cmake/LLVM.cmake
|
||||||
|
+++ b/cmake/LLVM.cmake
|
||||||
|
@@ -269,10 +269,15 @@ endforeach()
|
||||||
|
|
||||||
|
####################################################################
|
||||||
|
|
||||||
|
+if(DEFINED LLVM_NATIVE_TOOL_DIR)
|
||||||
|
+ set(TOOL_DIR "${LLVM_NATIVE_TOOL_DIR}")
|
||||||
|
+ message(STATUS "TOOL_DIR=${TOOL_DIR}")
|
||||||
|
+endif()
|
||||||
|
+
|
||||||
|
macro(find_program_or_die OUTPUT_VAR PROG_NAME DOCSTRING)
|
||||||
|
find_program(${OUTPUT_VAR}
|
||||||
|
NAMES "${PROG_NAME}${LLVM_BINARY_SUFFIX}${CMAKE_EXECUTABLE_SUFFIX}"
|
||||||
|
- HINTS "${LLVM_BINDIR}" "${LLVM_CONFIG_LOCATION}"
|
||||||
|
+ HINTS "${TOOL_DIR}" "${LLVM_BINDIR}" "${LLVM_CONFIG_LOCATION}"
|
||||||
|
DOC "${DOCSTRING}"
|
||||||
|
NO_CMAKE_PATH
|
||||||
|
NO_CMAKE_ENVIRONMENT_PATH
|
||||||
|
--
|
||||||
|
2.45.1
|
||||||
|
|
||||||
48
pkgs/pocl/0001-cmake-use-clang-from-cmake-variable.patch
Normal file
48
pkgs/pocl/0001-cmake-use-clang-from-cmake-variable.patch
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
From 4688b5ce895761c884ae15fc0234ed8d623b988b Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Aleix=20Bon=C3=A9?= <aleix.boneribo@bsc.es>
|
||||||
|
Date: Tue, 2 Jul 2024 15:41:47 +0200
|
||||||
|
Subject: [PATCH] cmake: use clang from cmake variable
|
||||||
|
|
||||||
|
---
|
||||||
|
cmake/LLVM.cmake | 22 ++++++++++++++++++++--
|
||||||
|
1 file changed, 20 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/cmake/LLVM.cmake b/cmake/LLVM.cmake
|
||||||
|
index 71b786dc7..f4dbda065 100644
|
||||||
|
--- a/cmake/LLVM.cmake
|
||||||
|
+++ b/cmake/LLVM.cmake
|
||||||
|
@@ -281,11 +281,29 @@ macro(find_program_or_die OUTPUT_VAR PROG_NAME DOCSTRING)
|
||||||
|
endif()
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
-find_program_or_die( CLANG "clang" "clang binary")
|
||||||
|
+# -DCMAKE_C_COMPILER=riscv64-unknown-linux-gnu-clang -DCMAKE_CXX_COMPILER=riscv64-unknown-linux-gnu-clang++
|
||||||
|
+
|
||||||
|
+# if(DEFINED CLANG_EXECUTABLE)
|
||||||
|
+if(DEFINED CMAKE_C_COMPILER)
|
||||||
|
+ # set(CLANG "${CLANG_EXECUTABLE}")
|
||||||
|
+ set(CLANG "${CMAKE_C_COMPILER}")
|
||||||
|
+ message(STATUS "Using CLANG_EXECUTABLE: ${CLANG}")
|
||||||
|
+else()
|
||||||
|
+ find_program_or_die( CLANG "clang" "clang binary")
|
||||||
|
+endif()
|
||||||
|
execute_process(COMMAND "${CLANG}" "--version" OUTPUT_VARIABLE LLVM_CLANG_VERSION RESULT_VARIABLE CLANG_RES)
|
||||||
|
+
|
||||||
|
# TODO this should be optional
|
||||||
|
-find_program_or_die( CLANGXX "clang++" "clang++ binary")
|
||||||
|
+# if(DEFINED CLANGXX_EXECUTABLE)
|
||||||
|
+if(DEFINED CMAKE_CXX_COMPILER)
|
||||||
|
+ # set(CLANGXX "${CLANGXX_EXECUTABLE}")
|
||||||
|
+ set(CLANGXX "${CMAKE_CXX_COMPILER}")
|
||||||
|
+ message(STATUS "Using CLANGXX_EXECUTABLE: ${CLANGXX}")
|
||||||
|
+else()
|
||||||
|
+ find_program_or_die( CLANGXX "clang++" "clang++ binary")
|
||||||
|
+endif()
|
||||||
|
execute_process(COMMAND "${CLANGXX}" "--version" OUTPUT_VARIABLE LLVM_CLANGXX_VERSION RESULT_VARIABLE CLANGXX_RES)
|
||||||
|
+
|
||||||
|
if(CLANGXX_RES OR CLANG_RES)
|
||||||
|
message(FATAL_ERROR "Failed running clang/clang++ --version")
|
||||||
|
endif()
|
||||||
|
--
|
||||||
|
2.45.1
|
||||||
|
|
||||||
255
pkgs/pocl/default.nix
Normal file
255
pkgs/pocl/default.nix
Normal file
@@ -0,0 +1,255 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
llvmPackages,
|
||||||
|
ninja,
|
||||||
|
cmake,
|
||||||
|
hwloc,
|
||||||
|
ocl-icd,
|
||||||
|
opencl-headers,
|
||||||
|
getconf,
|
||||||
|
pkg-config,
|
||||||
|
spirv-llvm-translator,
|
||||||
|
spirv-tools,
|
||||||
|
libxml2, # required for statically linked llvm
|
||||||
|
python3,
|
||||||
|
writableTmpDirAsHomeHook,
|
||||||
|
writeText,
|
||||||
|
runCommand,
|
||||||
|
opencl-cts,
|
||||||
|
|
||||||
|
fetchFromGitHub,
|
||||||
|
|
||||||
|
useGit ? false,
|
||||||
|
gitUrl ? "git@gitlab-internal.bsc.es:task-awareness/pocl/pocl.git",
|
||||||
|
gitBranch ? "feat/nosv",
|
||||||
|
gitCommit ? "556542309fc3c5900cf05dae5b41d200cd3de6a0",
|
||||||
|
|
||||||
|
staticLLVM ? true,
|
||||||
|
enableICD ? true,
|
||||||
|
enableSPIRV ? true,
|
||||||
|
enableHWLOC ? true,
|
||||||
|
enableRemoteServer ? false,
|
||||||
|
enableRemoteClient ? false,
|
||||||
|
enableDistroVariants ? false,
|
||||||
|
|
||||||
|
lttng-ust,
|
||||||
|
enableLTTNG ? false,
|
||||||
|
|
||||||
|
onetbb,
|
||||||
|
enableTBB ? false,
|
||||||
|
|
||||||
|
nosv ? null,
|
||||||
|
ovni ? null,
|
||||||
|
enableNOSV ? useGit,
|
||||||
|
enableOVNI ? useGit,
|
||||||
|
|
||||||
|
buildPackages,
|
||||||
|
targetPackages,
|
||||||
|
nix-update-script,
|
||||||
|
}:
|
||||||
|
|
||||||
|
assert (enableNOSV || enableOVNI) -> useGit;
|
||||||
|
|
||||||
|
let
|
||||||
|
|
||||||
|
release = rec {
|
||||||
|
version = "7.1";
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "pocl";
|
||||||
|
repo = "pocl";
|
||||||
|
tag = "v${version}";
|
||||||
|
hash = "sha256-bS6vTIjLO7YLs7qYLKW0cYYbEJ/hRS/+IjjAKbkj8ac=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
git = rec {
|
||||||
|
version = src.shortRev;
|
||||||
|
src = builtins.fetchGit {
|
||||||
|
url = gitUrl;
|
||||||
|
ref = gitBranch;
|
||||||
|
rev = gitCommit;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
source = if (useGit) then git else release;
|
||||||
|
|
||||||
|
stdenv = llvmPackages.stdenv;
|
||||||
|
|
||||||
|
buildLlvmPackages = buildPackages.llvmPackages;
|
||||||
|
|
||||||
|
isCross = stdenv.hostPlatform != stdenv.buildPlatform;
|
||||||
|
|
||||||
|
featureList = lib.concatStringsSep "+" (
|
||||||
|
(lib.optionals enableICD [ "icd" ])
|
||||||
|
++ (lib.optionals enableNOSV [ "nosv" ])
|
||||||
|
++ (lib.optionals enableOVNI [ "ovni" ])
|
||||||
|
++ (lib.optionals enableSPIRV [ "spirv" ])
|
||||||
|
++ (lib.optionals enableTBB [ "tbb" ])
|
||||||
|
++ (lib.optionals enableRemoteClient [ "server" ])
|
||||||
|
++ (lib.optionals enableRemoteServer [ "client" ])
|
||||||
|
);
|
||||||
|
in
|
||||||
|
|
||||||
|
stdenv.mkDerivation (finalAttrs: {
|
||||||
|
pname = "pocl";
|
||||||
|
version = featureList + "-" + source.version;
|
||||||
|
inherit (source) src;
|
||||||
|
|
||||||
|
patches = lib.optionals useGit [
|
||||||
|
./0001-cmake-use-clang-from-cmake-variable.patch
|
||||||
|
./0001-cmake-do-not-use-suffix.patch
|
||||||
|
./0001-cmake-native-build-tools.patch
|
||||||
|
];
|
||||||
|
|
||||||
|
cmakeFlags = [
|
||||||
|
# TODO: all these are broken when cross compiling. Upstream has refactored
|
||||||
|
# all the cmake infra for cross compilation, but it's not in a release yet
|
||||||
|
(lib.cmakeOptionType "filepath" "WITH_LLVM_CONFIG" (
|
||||||
|
lib.getExe' buildLlvmPackages.llvm.dev "llvm-config"
|
||||||
|
))
|
||||||
|
(lib.cmakeOptionType "filepath" "CLANG" (lib.getExe' buildLlvmPackages.clangUseLLVM "clang"))
|
||||||
|
(lib.cmakeOptionType "filepath" "CLANGXX" (lib.getExe' buildLlvmPackages.clangUseLLVM "clang++"))
|
||||||
|
(lib.cmakeOptionType "path" "CLANG_RESOURCE_DIR" "${llvmPackages.stdenv.cc}/resource-root")
|
||||||
|
|
||||||
|
(lib.cmakeBool "ENABLE_TESTS" finalAttrs.finalPackage.doCheck)
|
||||||
|
|
||||||
|
(lib.cmakeBool "ENABLE_RELOCATION" true)
|
||||||
|
(lib.cmakeBool "ENABLE_POCL_BUILDING" true)
|
||||||
|
(lib.cmakeBool "POCL_ICD_ABSOLUTE_PATH" true)
|
||||||
|
|
||||||
|
(lib.cmakeBool "ENABLE_TBB_DEVICE" enableTBB)
|
||||||
|
(lib.cmakeBool "ENABLE_ICD" enableICD)
|
||||||
|
(lib.cmakeBool "ENABLE_HWLOC" enableHWLOC)
|
||||||
|
(lib.cmakeBool "ENABLE_LTTNG" enableLTTNG)
|
||||||
|
|
||||||
|
(lib.cmakeBool "ENABLE_REMOTE_CLIENT" enableRemoteClient)
|
||||||
|
(lib.cmakeBool "ENABLE_REMOTE_SERVER" enableRemoteServer)
|
||||||
|
|
||||||
|
# avoid the runtime linker pulling in a different llvm e.g. from graphics drivers
|
||||||
|
(lib.cmakeBool "STATIC_LLVM" staticLLVM)
|
||||||
|
]
|
||||||
|
++ lib.optionals (enableNOSV || enableOVNI) [
|
||||||
|
(lib.cmakeBool "ENABLE_NOSV" enableNOSV)
|
||||||
|
(lib.cmakeBool "ENABLE_OVNI" enableOVNI)
|
||||||
|
]
|
||||||
|
++ lib.optionals (!isCross && enableDistroVariants) [
|
||||||
|
(lib.cmakeFeature "KERNELLIB_HOST_CPU_VARIANTS" "distro") # TODO: check if we can do it when cross compiling
|
||||||
|
]
|
||||||
|
++ lib.optionals isCross [
|
||||||
|
(lib.cmakeFeature "CMAKE_SYSTEM_NAME" "Linux")
|
||||||
|
(lib.cmakeFeature "CMAKE_FIND_ROOT_PATH_MODE_PROGRAM" "NEVER")
|
||||||
|
(lib.cmakeFeature "CMAKE_FIND_ROOT_PATH_MODE_LIBRARY" "ONLY")
|
||||||
|
(lib.cmakeFeature "CMAKE_FIND_ROOT_PATH_MODE_INCLUDE" "ONLY")
|
||||||
|
(lib.cmakeFeature "CMAKE_FIND_ROOT_PATH_MODE_PACKAGE" "ONLY")
|
||||||
|
]
|
||||||
|
++ lib.optionals stdenv.hostPlatform.isRiscV [
|
||||||
|
(lib.cmakeFeature "LLC_TRIPLE" "riscv64-unknown-linux-gnu")
|
||||||
|
(lib.cmakeFeature "LLC_HOST_CPU" "rv64g")
|
||||||
|
(lib.cmakeFeature "CLANG_MARCH_FLAG" "-march=")
|
||||||
|
];
|
||||||
|
|
||||||
|
# Fixes error: ld: cannot find -lgcc / -lgcc_s when linking from libpocl on
|
||||||
|
# host
|
||||||
|
preConfigure = ''
|
||||||
|
cmakeFlagsArray+=(
|
||||||
|
-DEXTRA_HOST_LD_FLAGS="${lib.escapeShellArg (builtins.readFile "${targetPackages.stdenv.cc}/nix-support/cc-ldflags")}"
|
||||||
|
-DEXTRA_KERNEL_FLAGS="${lib.escapeShellArg (builtins.readFile "${targetPackages.stdenv.cc}/nix-support/cc-ldflags")}"
|
||||||
|
)
|
||||||
|
'';
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
cmake
|
||||||
|
getconf
|
||||||
|
ninja
|
||||||
|
pkg-config
|
||||||
|
python3
|
||||||
|
];
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
opencl-headers
|
||||||
|
llvmPackages.libclang
|
||||||
|
llvmPackages.llvm
|
||||||
|
]
|
||||||
|
++ lib.optionals staticLLVM [ libxml2 ]
|
||||||
|
++ lib.optionals enableNOSV [ nosv ]
|
||||||
|
++ lib.optionals enableOVNI [ ovni ]
|
||||||
|
++ lib.optionals enableHWLOC [ hwloc ]
|
||||||
|
++ lib.optionals enableTBB [ onetbb ]
|
||||||
|
++ lib.optionals enableICD [ ocl-icd ]
|
||||||
|
++ lib.optionals enableLTTNG [ lttng-ust ]
|
||||||
|
++ lib.optionals enableSPIRV [
|
||||||
|
(spirv-llvm-translator.override { inherit (llvmPackages) llvm; })
|
||||||
|
spirv-tools
|
||||||
|
];
|
||||||
|
|
||||||
|
nativeInstallCheckInputs = [
|
||||||
|
writableTmpDirAsHomeHook # needed for POCL_CACHE_DIR
|
||||||
|
];
|
||||||
|
|
||||||
|
doInstallCheck = true;
|
||||||
|
|
||||||
|
installCheckPhase = lib.optionalString enableICD ''
|
||||||
|
runHook preInstallCheck
|
||||||
|
|
||||||
|
export OCL_ICD_VENDORS=$out/etc/OpenCL/vendors
|
||||||
|
$out/bin/poclcc -o poclcc.cl.pocl $src/examples/poclcc/poclcc.cl
|
||||||
|
|
||||||
|
runHook postInstallCheck
|
||||||
|
'';
|
||||||
|
|
||||||
|
setupHook = lib.optionalDrvAttr enableICD (
|
||||||
|
writeText "setup-hook" ''
|
||||||
|
addToSearchPath OCL_ICD_VENDORS @out@/etc/OpenCL/vendors
|
||||||
|
''
|
||||||
|
);
|
||||||
|
|
||||||
|
passthru =
|
||||||
|
let
|
||||||
|
self = finalAttrs.finalPackage;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
updateScript = nix-update-script { };
|
||||||
|
git = self.override { useGit = true; };
|
||||||
|
|
||||||
|
withICD = enableICD;
|
||||||
|
|
||||||
|
test = {
|
||||||
|
# Run builtin tests (causes a rebuild)
|
||||||
|
self = self.overrideAttrs { doCheck = true; };
|
||||||
|
|
||||||
|
# Run basic test from Khronos OpenCL Conformance Test Suite
|
||||||
|
# WARN: despite its name, test_basic is very exhaustive, and can take more
|
||||||
|
# than 1 hour in a marenostrum5 node.
|
||||||
|
cts =
|
||||||
|
assert enableICD;
|
||||||
|
lib.genAttrs [ "api" "basic" "c11_atomics" "printf" "svm" ] (
|
||||||
|
name:
|
||||||
|
runCommand "pocl-cts-test_${name}" {
|
||||||
|
nativeBuildInputs = [ self ];
|
||||||
|
requiredSystemFeatures = [ "sys-devices" ];
|
||||||
|
env = {
|
||||||
|
POCL_DEBUG = "error,warn";
|
||||||
|
POCL_CACHE_DIR = "/build/pocl_cache";
|
||||||
|
};
|
||||||
|
} "${opencl-cts}/bin/Release/test_${name} | tee $out"
|
||||||
|
);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
env.HWLOC_SYNTHETIC = lib.optionalDrvAttr enableHWLOC "node:1 core:1 pu:1";
|
||||||
|
|
||||||
|
propagatedBuildInputs = [ stdenv.cc.cc ];
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
description = "A portable open source (MIT-licensed) implementation of the OpenCL standard";
|
||||||
|
homepage = "http://portablecl.org";
|
||||||
|
license = licenses.mit;
|
||||||
|
maintainers = with maintainers; [
|
||||||
|
leixb
|
||||||
|
jansol
|
||||||
|
xddxdd
|
||||||
|
bsc.maintainers.abonerib
|
||||||
|
];
|
||||||
|
platforms = platforms.linux ++ platforms.darwin;
|
||||||
|
};
|
||||||
|
})
|
||||||
58
pkgs/rodinia/default.nix
Normal file
58
pkgs/rodinia/default.nix
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
{
|
||||||
|
stdenv,
|
||||||
|
lib,
|
||||||
|
fetchurl,
|
||||||
|
ocl-icd,
|
||||||
|
opencl-headers,
|
||||||
|
}:
|
||||||
|
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
pname = "rodinia-opencl";
|
||||||
|
version = "3.1";
|
||||||
|
src = fetchurl {
|
||||||
|
url = "http://www.cs.virginia.edu/~skadron/lava/Rodinia/Packages/rodinia_3.1.tar.bz2";
|
||||||
|
hash = "sha256-+uusfBHtj4/Pa/LX6FwwhvwtEfciBNbfwo3FsujyrP0=";
|
||||||
|
};
|
||||||
|
|
||||||
|
patches = [
|
||||||
|
./rodinia-fixes.patch
|
||||||
|
./rodinia-rm.patch
|
||||||
|
];
|
||||||
|
buildInputs = [
|
||||||
|
opencl-headers
|
||||||
|
ocl-icd
|
||||||
|
];
|
||||||
|
buildFlags = [
|
||||||
|
"OPENCL"
|
||||||
|
"--always-make"
|
||||||
|
];
|
||||||
|
|
||||||
|
preBuild = ''
|
||||||
|
mkdir -p bin/linux/{cuda,omp,opencl}
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
|
||||||
|
mkdir -p $out/share
|
||||||
|
cp -r bin data opencl $out
|
||||||
|
cp LICENSE README $out/share
|
||||||
|
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
homepage = "https://rodinia.cs.virginia.edu/";
|
||||||
|
description = "Test Suite of Compute-Intensive Applications with Accelerators";
|
||||||
|
maintainers = with lib.maintainers.bsc; [ abonerib ];
|
||||||
|
platforms = lib.platforms.linux;
|
||||||
|
license = {
|
||||||
|
deprecated = false;
|
||||||
|
free = false;
|
||||||
|
fullName = "Rodinia License";
|
||||||
|
redistributable = true;
|
||||||
|
shortName = "rodinia";
|
||||||
|
url = "https://www.cs.virginia.edu/~skadron/lava/rodinia/license.htm";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
1540
pkgs/rodinia/rodinia-fixes.patch
Normal file
1540
pkgs/rodinia/rodinia-fixes.patch
Normal file
File diff suppressed because it is too large
Load Diff
1880
pkgs/rodinia/rodinia-rm.patch
Normal file
1880
pkgs/rodinia/rodinia-rm.patch
Normal file
File diff suppressed because it is too large
Load Diff
@@ -35,5 +35,6 @@ stdenv.mkDerivation rec {
|
|||||||
maintainers = with lib.maintainers.bsc; [ rarias ];
|
maintainers = with lib.maintainers.bsc; [ rarias ];
|
||||||
platforms = lib.platforms.linux;
|
platforms = lib.platforms.linux;
|
||||||
license = lib.licenses.mit;
|
license = lib.licenses.mit;
|
||||||
|
cross = true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,23 +5,14 @@
|
|||||||
, automake
|
, automake
|
||||||
, autoconf
|
, autoconf
|
||||||
, libtool
|
, libtool
|
||||||
, mpi
|
|
||||||
, autoreconfHook
|
, autoreconfHook
|
||||||
, gpi-2
|
, gpi-2
|
||||||
, boost
|
, boost
|
||||||
, numactl
|
, numactl
|
||||||
, rdma-core
|
, rdma-core
|
||||||
, gfortran
|
, gfortran
|
||||||
, symlinkJoin
|
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
|
||||||
mpiAll = symlinkJoin {
|
|
||||||
name = "mpi-all";
|
|
||||||
paths = [ mpi.all ];
|
|
||||||
};
|
|
||||||
in
|
|
||||||
|
|
||||||
stdenv.mkDerivation rec {
|
stdenv.mkDerivation rec {
|
||||||
pname = "tagaspi";
|
pname = "tagaspi";
|
||||||
enableParallelBuilding = true;
|
enableParallelBuilding = true;
|
||||||
@@ -35,16 +26,18 @@ stdenv.mkDerivation rec {
|
|||||||
hash = "sha256-RGG/Re2uM293HduZfGzKUWioDtwnSYYdfeG9pVrX9EM=";
|
hash = "sha256-RGG/Re2uM293HduZfGzKUWioDtwnSYYdfeG9pVrX9EM=";
|
||||||
};
|
};
|
||||||
|
|
||||||
buildInputs = [
|
nativeBuildInputs = [
|
||||||
autoreconfHook
|
autoreconfHook
|
||||||
automake
|
automake
|
||||||
autoconf
|
autoconf
|
||||||
libtool
|
libtool
|
||||||
|
gfortran
|
||||||
|
];
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
boost
|
boost
|
||||||
numactl
|
numactl
|
||||||
rdma-core
|
rdma-core
|
||||||
gfortran
|
|
||||||
mpiAll
|
|
||||||
];
|
];
|
||||||
|
|
||||||
dontDisableStatic = true;
|
dontDisableStatic = true;
|
||||||
@@ -63,5 +56,6 @@ stdenv.mkDerivation rec {
|
|||||||
maintainers = with lib.maintainers.bsc; [ rarias ];
|
maintainers = with lib.maintainers.bsc; [ rarias ];
|
||||||
platforms = lib.platforms.linux;
|
platforms = lib.platforms.linux;
|
||||||
license = lib.licenses.gpl3Plus;
|
license = lib.licenses.gpl3Plus;
|
||||||
|
cross = false; # gpi-2 cannot cross
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,5 +68,6 @@ in stdenv.mkDerivation {
|
|||||||
maintainers = with lib.maintainers.bsc; [ rarias ];
|
maintainers = with lib.maintainers.bsc; [ rarias ];
|
||||||
platforms = lib.platforms.linux;
|
platforms = lib.platforms.linux;
|
||||||
license = lib.licenses.gpl3Plus;
|
license = lib.licenses.gpl3Plus;
|
||||||
|
cross = true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
87
pkgs/tasycl/default.nix
Normal file
87
pkgs/tasycl/default.nix
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
{
|
||||||
|
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" ];
|
||||||
|
}
|
||||||
63
pkgs/unified-runtime/default.nix
Normal file
63
pkgs/unified-runtime/default.nix
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
stdenv,
|
||||||
|
fetchFromGitHub,
|
||||||
|
cmake,
|
||||||
|
python3,
|
||||||
|
cudatoolkit,
|
||||||
|
libbacktrace,
|
||||||
|
intel-compute-runtime,
|
||||||
|
level-zero,
|
||||||
|
unified-memory-framework,
|
||||||
|
autoAddDriverRunpath,
|
||||||
|
|
||||||
|
enableL0 ? false,
|
||||||
|
}:
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
pname = "unified-runtime";
|
||||||
|
version = "2025-WW45";
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "intel";
|
||||||
|
repo = "llvm";
|
||||||
|
tag = version;
|
||||||
|
sha256 = "sha256-yf8pFEeNEWf9LpEhAy4vMdFDlA08x5XaCegnq+5aXRw=";
|
||||||
|
};
|
||||||
|
|
||||||
|
sourceRoot = "${src.name}/unified-runtime";
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
cmake
|
||||||
|
python3
|
||||||
|
libbacktrace
|
||||||
|
(python3.withPackages (
|
||||||
|
python-pkgs: with python-pkgs; [
|
||||||
|
lit
|
||||||
|
filecheck
|
||||||
|
]
|
||||||
|
))
|
||||||
|
autoAddDriverRunpath
|
||||||
|
];
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
unified-memory-framework
|
||||||
|
cudatoolkit
|
||||||
|
]
|
||||||
|
++ lib.optionals enableL0 [
|
||||||
|
intel-compute-runtime
|
||||||
|
level-zero
|
||||||
|
];
|
||||||
|
|
||||||
|
cmakeFlags = [
|
||||||
|
(lib.cmakeBool "UR_USE_EXTERNAL_UMF" true)
|
||||||
|
(lib.cmakeBool "UR_BUILD_TESTS" false)
|
||||||
|
|
||||||
|
(lib.cmakeBool "UR_BUILD_ADAPTER_CUDA" true)
|
||||||
|
(lib.cmakeBool "UR_BUILD_ADAPTER_L0" enableL0)
|
||||||
|
|
||||||
|
(lib.cmakeBool "UR_BUILD_ADAPTER_OPENCL" false)
|
||||||
|
(lib.cmakeBool "UR_BUILD_ADAPTER_HIP" false)
|
||||||
|
(lib.cmakeBool "UR_BUILD_ADAPTER_NATIVE_CPU" false)
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -1,9 +1,11 @@
|
|||||||
{ python3Packages, lib }:
|
{ python3Packages, lib }:
|
||||||
|
|
||||||
python3Packages.buildPythonApplication rec {
|
python3Packages.buildPythonApplication {
|
||||||
pname = "upc-qaire-exporter";
|
pname = "upc-qaire-exporter";
|
||||||
version = "1.0";
|
version = "1.0";
|
||||||
|
|
||||||
|
pyproject = true;
|
||||||
|
|
||||||
src = ./.;
|
src = ./.;
|
||||||
|
|
||||||
doCheck = false;
|
doCheck = false;
|
||||||
|
|||||||
@@ -1,25 +1,29 @@
|
|||||||
age-encryption.org/v1
|
age-encryption.org/v1
|
||||||
-> ssh-ed25519 AY8zKw /gmhFOFqOs8IobAImvQVKeM5Y6k0FpuR61/Cu5drVVI
|
-> ssh-ed25519 AY8zKw Crgof1PMHzv3jBw8VeJAst6FKSoyqPFdANFpf79CAgo
|
||||||
g9FXJg2oIoien0zJ70FWHwSTM8SBwbpS188S3Swj7EM
|
7fagE5BmlWdTsdY/i3RbExu1KBcjW1LQXbYwu6chxlk
|
||||||
-> ssh-ed25519 sgAamA opPjlWPhSiI0Rd5l7kd204S5FXFLcQcQftyKb7MDmnU
|
-> ssh-ed25519 sgAamA tGRCaK8mjvz65YziXjRcjMOHIRoyGNJFzBEEbivXPDo
|
||||||
3XrRDVnglCP+vBwvfd1rP5gHttsGDHyXwbf10a8/kKY
|
YLzE5a3J81r+gzkfZIeh9gS+mXzMooC82tBbZ+C3C8o
|
||||||
-> ssh-ed25519 HY2yRg QKZbubM76C3tobPoyCFDRclA9Pzb2fC7s4WOoIgdORc
|
-> ssh-ed25519 HY2yRg +vhO1/vdGPM1JnZRsvVnViFWaFWUZ7MIqvWdePivkxA
|
||||||
K5kckU0KhQFTE6SikJXFJgM41Tco5+VqOsaG0qLrY1Q
|
2K+JdN82DTeGh9QwZBTaghg8C5BCLoEsOgTCM64PU28
|
||||||
-> ssh-ed25519 fw2Xhg +ohqts8dLFjvdHxrGHcOGxU0dm+V3N//giljHkobpDM
|
-> ssh-ed25519 fw2Xhg NHDn0dq32I/AVdUZlpzBX6retlEYEUipde7A9R90qW4
|
||||||
jR/UzGrfS9lrJ/VeolKLxfzeJAf2fIB2pdIn/6ukqNk
|
SJO78ooqEwfHlBRW+YCzgSQJb1JHNo8jz37t3qvLClE
|
||||||
-> ssh-ed25519 tcumPQ 3DPkDPIQQSVtXSLzIRETsIyXQ0k1o18Evn6vf+l/6R8
|
-> ssh-ed25519 G5LX5w d4HfLzI2623artkR2FIfRJgr5yb2BKZJUWqPnwOWDCk
|
||||||
bLXF62OmJjnOT1vvgq3+AcOKKSG5NonrK5EqCVc0Mwo
|
Kh50QESJZSjaJPyp3xroHGn0fD5pPNEYgKkDdqxGpjs
|
||||||
-> ssh-ed25519 JJ1LWg 2Wefc7eLolMU5InEmCNTq21Mf71mI0a2N1HgDrlHvy4
|
-> ssh-ed25519 tcumPQ wQyOKtT15Qezs3cyv5/xxIPVD7Jyk6N6ZLkfxxBHLTo
|
||||||
qXFW9CQBnrzubZ0mzS0Io2WGRrwGBkmeYndBTcZn/fM
|
rKlRBjJdfDVT6U8211+ssFF8yY9yRs1u3GhCSvsw2oE
|
||||||
-> ssh-ed25519 cDBabA oiH36AoIt/fFFYgnoxtH7OoetP+2/wjtn8qo3RJDSHc
|
-> ssh-ed25519 JJ1LWg 98tF1MdA244xNny4w3RnMFuubf4WcuQaZf2bN2Uq8Qc
|
||||||
qKmkxy1aZGP4ZwC0iH7n7hiJ0+rFQYvjQb5O1a1Z0r4
|
MA1Xh1H9vHisVYdqkxNeBkngtn8cYuT2eSimvooIXYo
|
||||||
-> ssh-ed25519 cK5kHw bX3RtO5StMejUYWAaA37fjHA5nO7Xs1vWDQk3yOjs2o
|
-> ssh-ed25519 cDBabA imJ0rXLQETELP7yo3sArhqA9nJwY+S6gkC7tA7CJsQA
|
||||||
Egxmcf8FKAd+E5hMLmhV1yQsCo5rJyUazf1szOvpTAM
|
pKMHW/KDAoEj5ZD64VKekg6et9hlS2PKSgDw3eB3eu8
|
||||||
-> ssh-ed25519 CAWG4Q oKqqRDJH0w8lsoQBQk0w8PO+z5gFNmSaGBUSumvDp1I
|
-> ssh-ed25519 WY7yGw +2g5021/02HvLxLqq42ynr6qKgOKJ3J5GgB1a1bmFXg
|
||||||
m1zWp9MfViAmtpbJhqOHraIokDaPKb0DvvO4vAGCTWI
|
fYvj52R6bM6ngPOZ2lwVezTJnx+8LJBbdnaapKKbyd0
|
||||||
-> ssh-ed25519 xA739A G26kPOz6sbFATs+KAr7gbDvji13eA1smFusQAOJXMwA
|
-> ssh-ed25519 cK5kHw fLZ6yF3NggJ724rjYqhs5ZZh1xUExuK+ITAyqONluzk
|
||||||
Sppvz7A103kZoNxoGsd6eXeCvVh7mBE2MRwLFj9O1dY
|
NS9OMX70XEHrbPQnmC4KB/eoiHChIb8DwDLYJiwOLUU
|
||||||
-> ssh-ed25519 MSF3dg 55ekNcp+inbUd+GQ/VZ7BoBASaJ8YDqF74CVXy1PUxQ
|
-> ssh-ed25519 CAWG4Q tVduE/wMzdfS+DjNbU3Q4blNhL/A63IehNSZGJkJjD0
|
||||||
aTHLLAbzQPWWld/OT3BKebc6FcmsqMTaWCPBGm1UHic
|
jEBB5zG+gLA/88YF+KqWQsNH7lfCsWNvAkrgfbescFs
|
||||||
--- mVkAMnI9XQhS3fMiFuuXP/yLR9wEG9+Rr8pA4Uc0avY
|
-> ssh-ed25519 xA739A ZhFvev77I+YOl1YSHKn2ZcEvGoLjWOILufjd4q/k8HM
|
||||||
<04>DU <20><>s<EFBFBD><73><EFBFBD><EFBFBD>j<EFBFBD><6A>M<EFBFBD><4D>$<24>[<5B>M<EFBFBD><4D><EFBFBD><03>[_<>K7s<37>ju<>v<EFBFBD>D<EFBFBD>4<EFBFBD>g<EFBFBD><67>܄3<>Gn<47><6E><EFBFBD> ɽ<>P<EFBFBD>7~rZs<><73>
|
YXEtHHtjPQlgZW60zHgHm7CLI6vYiRo+AM8QERL9tCg
|
||||||
|
-> ssh-ed25519 MSF3dg 9DvLNheBU1vlfW2zNNxBrGnJ6k4P5ox7s+OGKlgRdyQ
|
||||||
|
wseHfLGHz0huNi5sZsNOfeNkm6Kjjx0SZ8lK4/oXtUQ
|
||||||
|
--- bnJE+14onuSla0XmckD4z/wChWGZh6exbkcbyhcmNYU
|
||||||
|
<EFBFBD><EFBFBD>t<>N猈<><10>U<EFBFBD>w▮i2<69><32>-<2D>iV'(<1E>IF<49><46> S<><53>xs/s<><73> <09><>NDm<44>Q<EFBFBD><51><EFBFBD>o<EFBFBD><6F><EFBFBD><EFBFBD>wZv<7F><76>.\
|
||||||
Binary file not shown.
Binary file not shown.
@@ -1,13 +1,13 @@
|
|||||||
age-encryption.org/v1
|
age-encryption.org/v1
|
||||||
-> ssh-ed25519 HY2yRg U2KQWviZIVNemm9e8h7H+eOzoYNxXgLLS3hsZLMAuGk
|
-> ssh-ed25519 HY2yRg eHM55QsHK1ca9b5nP3EoVUZYu0w2d4B5tkilNK0j/lw
|
||||||
6n5dH1McNzk3rscP4v2pqZYDWtUFMd15rZsEd/mqIFM
|
6Na6lkMe0fOd7+vNP1fLIaVEQDUw5m65Wh8jUH1I6C0
|
||||||
-> ssh-ed25519 cK5kHw Ebrj/cpz1cFWAYAV9OxgyyH85OEMUnfUIV66p7jaoFY
|
-> ssh-ed25519 cK5kHw 0ekhoBYwF7OSWwn4P5f/J4gXb9UHJAWGKV0yI7HCzzE
|
||||||
6J7hWqODtS/fIF4BpxhxbrxZq5vbolvbLqRKqazT02M
|
2Q+Tt5jXAB9ip9jf1z+jeM4FSiqd1w5DNtbqtacuOcM
|
||||||
-> ssh-ed25519 CAWG4Q mXqoQH9ycHF7u0y8mazCgynHxNLxTnrmQHke+2a5QCc
|
-> ssh-ed25519 CAWG4Q Jmw4v9efOFXHjjNky96q/d6vGBP5dNM4wK9zoGrwOh8
|
||||||
mq6PdSF+KOqthuXwzTCsOQsi5KG0z1wHUck+bSTyOBY
|
u5I17wcIq8/2ARWckDXsYckhfX0jWE4AEm5mip/KHws
|
||||||
-> ssh-ed25519 xA739A TADeswueqDEroZWLjMw3RDNwVQ2xRD+JUMVZENovn0M
|
-> ssh-ed25519 xA739A 10pPeC2YG9DJzaQlt7p+fGo27VDiL2dN6JmvY2npcUw
|
||||||
KFlnSjVFbjc+ZsbY8Ed7edC5B01TJGzd/dSryiLArPc
|
4aRV8DekYeL9HagGWgOSjlYnPKmYdKZH8Aw4lRdm+r8
|
||||||
-> ssh-ed25519 MSF3dg Pq+ZD8AqJGDHDbd4PO1ngNFST8+6C2ghZkO/knKzzEc
|
-> ssh-ed25519 MSF3dg hDwIE3Su6cN3sq2E5v/oy6vTNfxTT1ZPts85//gIhwY
|
||||||
wyiL/u38hdQMokmfTsBrY7CtYwc+31FG4EDaqVEn31U
|
aoiaGjQYJB1ededhIuVBCKDRLIOVThWz1pSTvg65J3Y
|
||||||
--- 1z4cOipayh0zYkvasEVEvGreajegE/dqBV7b6E7aFh0
|
--- OYPAGb5U/nwLOIV5VchSvxhChjNnwzbEgU9glSkWCl4
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>R<EFBFBD>@<40>/i<>I'<27><><EFBFBD>Nx<4E>r"<1D>`<1E>O<EFBFBD><4F><EFBFBD>y<><79>8<EFBFBD><38> \/<2F><>I<19><17>D<EFBFBD>`<60>ߓ<EFBFBD><DF93><EFBFBD><1E><04>uy<75><79><EFBFBD>:9Lt<4C><1D><><EFBFBD>؋<EFBFBD><D88B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AU<41><55><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>`<60>;<3B>q8<71>GLU#<23>i<EFBFBD>y<EFBFBD><79>i<03>ڜ
|
<EFBFBD>=<3D><><EFBFBD>c<EFBFBD>WȟJSaІ&<26><1F>ቧ)E<><0B> C<><43>J~u<>c<63><7F>2<EFBFBD><32>v<EFBFBD><76><EFBFBD><03><>s<EFBFBD><73><EFBFBD>vf<76><10><>X7(<28>~<7E><1A>=XCi;<3B>״<EFBFBD>\ߢ<><DFA2><EFBFBD>ܣ<EFBFBD><10><><07>ɳCe<43>D;;X*<2A>3<EFBFBD>i<EFBFBD><69>r<EFBFBD>Em<45><6D><
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,14 +1,13 @@
|
|||||||
age-encryption.org/v1
|
age-encryption.org/v1
|
||||||
-> ssh-ed25519 G5LX5w SRJhNenoQXbT1FgX3TMPnVH5P6oe2eHot+M1YsEjsEk
|
-> ssh-ed25519 G5LX5w /9lcJOXC9CN02+XLswUaJ0H7jU6Xhjd8Xg4+KY0l1Vc
|
||||||
hfTSLgKi98Eh7JK5o7x2POpTEtQlQCpEa3keUFYCuME
|
fCLzsLc9zrocM8SHOKyZwt6eUEr8r1WLug9RLi63KU0
|
||||||
-> ssh-ed25519 cK5kHw z5TwWJTkvx7HztjXHJW/aCOtOfPrQaLP0gyIT7rXcyU
|
-> ssh-ed25519 cK5kHw 1qza6h2NRSs4g8LYdFU7E+Dn1CgdtCU7DPdYInP1GwM
|
||||||
b4NCpHfasgvkLLr+6LcWUl60p59aSNnfp3bl2OFYXo0
|
/6uk7pTFkNTRTI7nA+x4y4CyOBVQVXX2lnpOg3ktPe4
|
||||||
-> ssh-ed25519 CAWG4Q 4VpS1/OnFe8nxcQbRTKNhjsh/ZQ5cbhSMXwK/jjQ+3o
|
-> ssh-ed25519 CAWG4Q o+vyzcejSaNVYPSGzzOdzaqPByZ6zA1uaJf4KOg+wQA
|
||||||
WF9wvOkqVml4UcEzyzeumKuUwCwwr2zvKLMg+PCB8nk
|
wfZmWrDSfRV8C+Hu+SeZDcomf/qigBqxuQK77SfnuEo
|
||||||
-> ssh-ed25519 xA739A 67FhuJ070jBVMt/xbKHWhfri6iIm0FyaFvzQabsvFBM
|
-> ssh-ed25519 xA739A +rBsOC+IBE3lmc/pfrziftLIqMSyaGMsggRjC5Pqwl0
|
||||||
1G5/913dDv/r/6p1x/c5YiUnZzrX/LvIj33KW+PN0KU
|
xa7ulLz2+YC3g2hu7e9XhRYDIUb2sriaaigJRYF2oB8
|
||||||
-> ssh-ed25519 MSF3dg Bj/yB4N2wkyHCHC22tcjjJAA4ebSamN0Z4UVX3ZnryI
|
-> ssh-ed25519 MSF3dg TK6PmKjjQt8ni0mJLCt7P41lUsgimlj3o5Q6n3N+DE4
|
||||||
6D/ZgTs+j+MGDAbPU5zyK0i9zN6tQy68IcOnQZ27mYg
|
ne+s3ctcg8cBjY06LY2lrW7wcxomvKHxu6MlirEA8Kg
|
||||||
--- 169erk3ICSYLs4FPEuXCn7QlekWhsmSn0Lr+/R14I5Q
|
--- eorg2ckkUZ1Ogi4iTTg2MoiVBwl1F0RCmH2D8N1d1So
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><05>ҽ3<D2BD>s<EFBFBD>
|
<EFBFBD><EFBFBD><EFBFBD>8<1C><><EFBFBD><EFBFBD><EFBFBD><12>i<17>$]K<>J=2Z<1D><>ӼF<D3BC>][<14><><EFBFBD>8<EFBFBD><38>ޤ<12> <09>=<3D><>LD/<2F>gz
|
||||||
w<EFBFBD><EFBFBD>4D<EFBFBD><EFBFBD>b.<2E><><EFBFBD>"|<7C><><EFBFBD>)"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;<3B>.<2E>ɫ7)<29>LeC<05>=S؟
|
|
||||||
Binary file not shown.
@@ -1,14 +1,13 @@
|
|||||||
age-encryption.org/v1
|
age-encryption.org/v1
|
||||||
-> ssh-ed25519 cDBabA heyW9/cxgwFX9IexQIXjAQDWGQPNcMXcArQp2Rxsqx4
|
-> ssh-ed25519 cDBabA So/Tqwdwd7G0PbE4RwH2qDrNcdqTkhFjF4IJrLKKpkM
|
||||||
o9MQ7EH8PDDjsJdpH9F3Xq2zUoaDAJQlfFmYucSFs6Y
|
MEA5dzlUeFXm3pa+ndxrcE0ZWdO00Xf98+Q8U9LZ+cQ
|
||||||
-> ssh-ed25519 cK5kHw Sza4pos7K3qW3omEeyidI/jszJNf9smemSZnUJfCIww
|
-> ssh-ed25519 cK5kHw sCHD/hHBOfMBUQXkLG3MBPNC4ebLOXW37OlF/C8FEjU
|
||||||
D6vazXki7hIYraIuSiGPS+FPbkFUwHhHWDf52OhEIMg
|
4TFbKoy23Ic2vteXZ02fMrFxyb4NxyWaSo5I8dn48mI
|
||||||
-> ssh-ed25519 CAWG4Q YexIHueOIMmIN8JIDyNUOKBkyz/k18HqV3hTXh48KlM
|
-> ssh-ed25519 CAWG4Q KYGPAXTx8H5cBC3YIBxi5B7OeF15C9rEIPFCcG0vEDw
|
||||||
xh8UJzzWT6ByN+Dpn4JrMNsjGC/uc/v6LynwjBDz9NQ
|
9LC2Zvp1Oiau1/hfPf+nJknl6BUSr+lzTn6TozZNxJg
|
||||||
-> ssh-ed25519 xA739A KySG3TXdqfCMUkVEDGa74B0op745s3XGYxFLyAXSQAc
|
-> ssh-ed25519 xA739A hpvNBHPgYRtUx0HyUAdCW8s7QTmGyPXwzRHb8qYoeG0
|
||||||
5EI/yb5ctW9Qu18bHm3/sK97kwGcKzzmWvPSCWm89XA
|
QkUZINY7Fr7HpyY6lbIMcP+hGO3oCmLL6N+yDN4weyk
|
||||||
-> ssh-ed25519 MSF3dg MNxnNj0fHmri8ophexXPNjRUBUWrzcuk5S1mucxUMTE
|
-> ssh-ed25519 MSF3dg P9TmEfXS+hyxsbVKja58UWAFpad0ZS3LhwrMkLnSNAY
|
||||||
GVFWXtISEU8ZmlwL4nh4weAgfGrt2GHX0DTzbpS6zg8
|
hiHuh7HhoYwHi2KFbCczXJoF3On9eqjD1Wsp9Q1NW/w
|
||||||
--- UdrqkYG2ZApAuwdZeNhC50NP2rkD/Ol6y8nJa4RHx7Y
|
--- SN3peoDvjXuD/Q4DdebQFam1CE22NyGZlMmnKyCTuX8
|
||||||
<EFBFBD>ܻ<EFBFBD>m(<28><><EFBFBD>><3E>H<48>Y87<><37>G<0F>+*<12><><EFBFBD><EFBFBD>9V<>.<2E><><EFBFBD><EFBFBD><03><><EFBFBD>p<EFBFBD>Oo<4F>=+哇<>P0<50><30>{<7B>)<29><17><><EFBFBD><EFBFBD>><3E>z3P^
|
s<0F><><14><>&׳֦<D7B3><D6A6><EFBFBD><EFBFBD>}<7D>#In0&<26><1F>{<7B>1<EFBFBD><31>.
|
||||||
u
|
|
||||||
Binary file not shown.
91
test/compilers/hello-sycl.nix
Normal file
91
test/compilers/hello-sycl.nix
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
{
|
||||||
|
intelPackages,
|
||||||
|
writeText,
|
||||||
|
strace,
|
||||||
|
pocl,
|
||||||
|
}:
|
||||||
|
|
||||||
|
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 (finalAttrs: {
|
||||||
|
version = "0.0.1";
|
||||||
|
name = "hello-sycl";
|
||||||
|
nativeBuildInputs = [
|
||||||
|
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 | tee test-output
|
||||||
|
set +x
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
cp test-output $out
|
||||||
|
'';
|
||||||
|
|
||||||
|
passthru = {
|
||||||
|
withPocl = finalAttrs.finalPackage.overrideAttrs (old: {
|
||||||
|
nativeBuildInputs = old.nativeBuildInputs ++ [ pocl ];
|
||||||
|
env = (old.env or { }) // {
|
||||||
|
POCL_DEBUG = "error,warn";
|
||||||
|
POCL_CACHE_DIR = "/build/pocl_cache";
|
||||||
|
|
||||||
|
# Make PoCL report Intel vendor id so oneapi SYCL works
|
||||||
|
POCL_DRIVER_VERSION_OVERRIDE = "2024.18.6.0.02_160000";
|
||||||
|
POCL_CPU_VENDOR_ID_OVERRIDE = 32902;
|
||||||
|
};
|
||||||
|
doInstallCheck = true;
|
||||||
|
installCheckPhase = ''
|
||||||
|
grep "Hello World! (on device)" $out
|
||||||
|
'';
|
||||||
|
});
|
||||||
|
withIntel = finalAttrs.finalPackage.overrideAttrs (old: {
|
||||||
|
env = (old.env or { }) // {
|
||||||
|
OCL_ICD_VENDORS = intelPackages.compiler + "/etc/OpenCL/vendors";
|
||||||
|
};
|
||||||
|
doInstallCheck = true;
|
||||||
|
installCheckPhase = ''
|
||||||
|
grep "Hello World! (on device)" $out
|
||||||
|
'';
|
||||||
|
|
||||||
|
});
|
||||||
|
};
|
||||||
|
})
|
||||||
110
test/compilers/icpx-ompss2.nix
Normal file
110
test/compilers/icpx-ompss2.nix
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
{
|
||||||
|
writeText,
|
||||||
|
intelPackages,
|
||||||
|
nodes,
|
||||||
|
nosv,
|
||||||
|
clangOmpss2Nodes,
|
||||||
|
strace,
|
||||||
|
pocl,
|
||||||
|
}:
|
||||||
|
|
||||||
|
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 (finalAttrs: {
|
||||||
|
version = "0.0.1";
|
||||||
|
name = "hello-syclompss";
|
||||||
|
|
||||||
|
src = hello_cpp;
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
strace
|
||||||
|
nodes
|
||||||
|
nosv
|
||||||
|
];
|
||||||
|
|
||||||
|
passthru = {
|
||||||
|
withPocl = finalAttrs.finalPackage.overrideAttrs (old: {
|
||||||
|
nativeBuildInputs = old.nativeBuildInputs ++ [ pocl ];
|
||||||
|
env = (old.env or { }) // {
|
||||||
|
POCL_DEBUG = "error,warn";
|
||||||
|
POCL_CACHE_DIR = "/build/pocl_cache";
|
||||||
|
|
||||||
|
# Make PoCL report Intel vendor id so oneapi SYCL works
|
||||||
|
POCL_DRIVER_VERSION_OVERRIDE = "2024.18.6.0.02_160000";
|
||||||
|
POCL_CPU_VENDOR_ID_OVERRIDE = 32902;
|
||||||
|
};
|
||||||
|
doInstallCheck = true;
|
||||||
|
installCheckPhase = ''
|
||||||
|
grep "Hello World! (on device)" $out
|
||||||
|
'';
|
||||||
|
});
|
||||||
|
|
||||||
|
withIntel = finalAttrs.finalPackage.overrideAttrs (old: {
|
||||||
|
env = (old.env or { }) // {
|
||||||
|
OCL_ICD_VENDORS = intelPackages.compiler + "/etc/OpenCL/vendors";
|
||||||
|
};
|
||||||
|
doInstallCheck = true;
|
||||||
|
installCheckPhase = ''
|
||||||
|
grep "Hello World! (on device)" $out
|
||||||
|
'';
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
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 | tee test-output
|
||||||
|
set +x
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
cp test-output $out
|
||||||
|
'';
|
||||||
|
})
|
||||||
127
test/compilers/opencl.c
Normal file
127
test/compilers/opencl.c
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
#include <CL/cl.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#define BUF_LEN 128
|
||||||
|
|
||||||
|
cl_int exit_err = CL_SUCCESS;
|
||||||
|
|
||||||
|
#define CHECK(cmd) \
|
||||||
|
do { \
|
||||||
|
cl_int err = cmd; \
|
||||||
|
if (err != CL_SUCCESS) { \
|
||||||
|
printf("[ERROR] " #cmd " (Error code: %d)\n" \
|
||||||
|
"@ "__FILE__ \
|
||||||
|
":%d", \
|
||||||
|
err, __LINE__); \
|
||||||
|
exit_err = err; \
|
||||||
|
goto cleanup; \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
const char *kernel_source = "__kernel void vector_add(__global const float *a, "
|
||||||
|
"__global const float *b, __global float *c) {\n"
|
||||||
|
" int gid = get_global_id(0);\n"
|
||||||
|
" c[gid] = a[gid] + b[gid];\n"
|
||||||
|
"}\n";
|
||||||
|
|
||||||
|
cl_int test_kernel_compilation(cl_platform_id platform) {
|
||||||
|
cl_device_id device = NULL;
|
||||||
|
cl_context context = NULL;
|
||||||
|
cl_program program = NULL;
|
||||||
|
cl_int err = CL_SUCCESS;
|
||||||
|
char device_name[BUF_LEN];
|
||||||
|
|
||||||
|
// Get first device for this platform
|
||||||
|
CHECK(clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL, 1, &device, NULL));
|
||||||
|
|
||||||
|
// Get device name
|
||||||
|
CHECK(clGetDeviceInfo(device, CL_DEVICE_NAME, sizeof(device_name),
|
||||||
|
device_name, NULL));
|
||||||
|
printf(" Device: %s\n", device_name);
|
||||||
|
|
||||||
|
context = clCreateContext(NULL, 1, &device, NULL, NULL, &err);
|
||||||
|
CHECK(err);
|
||||||
|
|
||||||
|
program = clCreateProgramWithSource(context, 1, &kernel_source, NULL, &err);
|
||||||
|
CHECK(err);
|
||||||
|
|
||||||
|
err = clBuildProgram(program, 1, &device, NULL, NULL, NULL);
|
||||||
|
if (err != CL_SUCCESS) {
|
||||||
|
printf(" [ERROR] Kernel compilation failed (Error code: %d)\n", err);
|
||||||
|
|
||||||
|
// Build log
|
||||||
|
size_t log_size;
|
||||||
|
CHECK(clGetProgramBuildInfo(program, device, CL_PROGRAM_BUILD_LOG, 0, NULL,
|
||||||
|
&log_size));
|
||||||
|
char *log = (char *)malloc(log_size);
|
||||||
|
CHECK(clGetProgramBuildInfo(program, device, CL_PROGRAM_BUILD_LOG, log_size,
|
||||||
|
log, NULL));
|
||||||
|
printf(" Build log:\n%s\n", log);
|
||||||
|
free(log);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf(" [OK] Kernel compiled successfully!\n");
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
if (program)
|
||||||
|
clReleaseProgram(program);
|
||||||
|
if (context)
|
||||||
|
clReleaseContext(context);
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
return exit_err;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
cl_uint num_platforms;
|
||||||
|
cl_platform_id *platforms = NULL;
|
||||||
|
|
||||||
|
// Get number of platforms
|
||||||
|
CHECK(clGetPlatformIDs(0, NULL, &num_platforms));
|
||||||
|
|
||||||
|
printf("Found %d OpenCL platform(s)\n\n", num_platforms);
|
||||||
|
|
||||||
|
if (num_platforms == 0) {
|
||||||
|
printf("No OpenCL platforms found!\n");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Allocate memory for platforms
|
||||||
|
platforms = (cl_platform_id *)malloc(sizeof(cl_platform_id) * num_platforms);
|
||||||
|
|
||||||
|
// Get platform IDs
|
||||||
|
CHECK(clGetPlatformIDs(num_platforms, platforms, NULL));
|
||||||
|
|
||||||
|
// Query each platform and test kernel compilation
|
||||||
|
for (cl_uint i = 0; i < num_platforms; i++) {
|
||||||
|
char platform_name[BUF_LEN];
|
||||||
|
char platform_vendor[BUF_LEN];
|
||||||
|
char platform_version[BUF_LEN];
|
||||||
|
|
||||||
|
CHECK(clGetPlatformInfo(platforms[i], CL_PLATFORM_NAME,
|
||||||
|
sizeof(platform_name), platform_name, NULL));
|
||||||
|
CHECK(clGetPlatformInfo(platforms[i], CL_PLATFORM_VENDOR,
|
||||||
|
sizeof(platform_vendor), platform_vendor, NULL));
|
||||||
|
CHECK(clGetPlatformInfo(platforms[i], CL_PLATFORM_VERSION,
|
||||||
|
sizeof(platform_version), platform_version, NULL));
|
||||||
|
|
||||||
|
printf("Platform %d: %s\n", i, platform_name);
|
||||||
|
printf(" Vendor: %s\n", platform_vendor);
|
||||||
|
printf(" Version: %s\n", platform_version);
|
||||||
|
|
||||||
|
// Test kernel compilation
|
||||||
|
CHECK(test_kernel_compilation(platforms[i]));
|
||||||
|
}
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
if (platforms)
|
||||||
|
free(platforms);
|
||||||
|
|
||||||
|
if (exit_err == CL_SUCCESS)
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
104
test/compilers/opencl.nix
Normal file
104
test/compilers/opencl.nix
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
{
|
||||||
|
stdenv,
|
||||||
|
ocl-icd,
|
||||||
|
opencl-headers,
|
||||||
|
pocl,
|
||||||
|
clinfo,
|
||||||
|
runCommand,
|
||||||
|
lib,
|
||||||
|
}:
|
||||||
|
|
||||||
|
stdenv.mkDerivation (finalAttrs: {
|
||||||
|
pname = "opencl-pocl-test";
|
||||||
|
version = "1.0.0";
|
||||||
|
|
||||||
|
src = ./opencl.c;
|
||||||
|
|
||||||
|
dontUnpack = true;
|
||||||
|
dontConfigure = true;
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
ocl-icd
|
||||||
|
opencl-headers
|
||||||
|
];
|
||||||
|
|
||||||
|
buildPhase = ''
|
||||||
|
runHook preBuild
|
||||||
|
|
||||||
|
$CC -Wall -Wextra -D CL_TARGET_OPENCL_VERSION=100 $src -o ocl-hello -lOpenCL
|
||||||
|
|
||||||
|
runHook postBuild
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
|
||||||
|
mkdir -p $out/bin
|
||||||
|
cp ocl-hello $out/bin
|
||||||
|
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
|
||||||
|
passthru = {
|
||||||
|
test-icd =
|
||||||
|
runCommand "custom-clinfo"
|
||||||
|
{
|
||||||
|
nativeBuildInputs =
|
||||||
|
assert !(lib.hasPrefix "pocl" ocl-icd.pname);
|
||||||
|
[
|
||||||
|
clinfo
|
||||||
|
finalAttrs.finalPackage
|
||||||
|
pocl
|
||||||
|
];
|
||||||
|
|
||||||
|
env = {
|
||||||
|
POCL_DEBUG = "error,warn";
|
||||||
|
POCL_CACHE_DIR = "/build/pocl_cache";
|
||||||
|
};
|
||||||
|
|
||||||
|
requiredSystemFeatures = [ "sys-devices" ];
|
||||||
|
}
|
||||||
|
|
||||||
|
''
|
||||||
|
set -x
|
||||||
|
|
||||||
|
mkdir $out
|
||||||
|
|
||||||
|
clinfo -l >$out/clinfo
|
||||||
|
clinfo >$out/clinfo-full
|
||||||
|
|
||||||
|
ocl-hello >$out/hello
|
||||||
|
|
||||||
|
for i in $out/*; do
|
||||||
|
grep "Portable Computing Language" $i
|
||||||
|
done
|
||||||
|
|
||||||
|
echo $OCL_ICD_VENDORS >$out/env
|
||||||
|
|
||||||
|
grep "pocl.*/etc/OpenCL/vendors" $out/env
|
||||||
|
|
||||||
|
set +x
|
||||||
|
'';
|
||||||
|
# this needs: ocl-icd = pocl-noicd
|
||||||
|
test-noicd =
|
||||||
|
runCommand "custom-clinfo"
|
||||||
|
{
|
||||||
|
nativeBuildInputs = [
|
||||||
|
finalAttrs.finalPackage
|
||||||
|
];
|
||||||
|
|
||||||
|
env = {
|
||||||
|
POCL_DEBUG = "error,warn";
|
||||||
|
POCL_CACHE_DIR = "/build/pocl_cache";
|
||||||
|
};
|
||||||
|
|
||||||
|
requiredSystemFeatures = [ "sys-devices" ];
|
||||||
|
}
|
||||||
|
|
||||||
|
''
|
||||||
|
ocl-hello >$out
|
||||||
|
|
||||||
|
grep "Portable Computing Language" $out
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
})
|
||||||
27
test/compilers/pocl.nix
Normal file
27
test/compilers/pocl.nix
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
runCommand,
|
||||||
|
pocl,
|
||||||
|
clinfo,
|
||||||
|
}:
|
||||||
|
|
||||||
|
runCommand "clinfo-pocl"
|
||||||
|
{
|
||||||
|
nativeBuildInputs = [
|
||||||
|
clinfo
|
||||||
|
pocl
|
||||||
|
];
|
||||||
|
|
||||||
|
requiredSystemFeatures = [ "sys-devices" ];
|
||||||
|
|
||||||
|
env = {
|
||||||
|
POCL_DEBUG = "error,warn";
|
||||||
|
POCL_CACHE_DIR = "/build/pocl_cache";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
''
|
||||||
|
echo $OCL_ICD_VENDORS
|
||||||
|
clinfo >$out
|
||||||
|
|
||||||
|
# check that we have PoCL:
|
||||||
|
grep "Portable Computing Language" $out
|
||||||
|
''
|
||||||
40
test/compilers/sycl-ls.nix
Normal file
40
test/compilers/sycl-ls.nix
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
intelPackages,
|
||||||
|
pocl,
|
||||||
|
runCommandWith,
|
||||||
|
symlinkJoin,
|
||||||
|
clinfo,
|
||||||
|
}:
|
||||||
|
|
||||||
|
runCommandWith
|
||||||
|
{
|
||||||
|
name = "sycl-ls";
|
||||||
|
inherit (intelPackages) stdenv;
|
||||||
|
runLocal = true;
|
||||||
|
derivationArgs = {
|
||||||
|
nativeBuildInputs = [ clinfo ];
|
||||||
|
env = {
|
||||||
|
OCL_ICD_VENDORS = symlinkJoin {
|
||||||
|
name = "vendors";
|
||||||
|
paths = builtins.map (p: p + "/etc/OpenCL/vendors") [
|
||||||
|
intelPackages.compiler
|
||||||
|
pocl
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
POCL_DRIVER_VERSION_OVERRIDE = "2025.20.6.0.04_224945";
|
||||||
|
POCL_CPU_VENDOR_ID_OVERRIDE = 32902;
|
||||||
|
POCL_DEBUG = "error,warn";
|
||||||
|
POCL_CACHE_DIR = "/build/pocl_cache";
|
||||||
|
|
||||||
|
HWLOC_SYNTHETIC = "node:1 core:1 pu:1";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
# bash
|
||||||
|
''
|
||||||
|
clinfo -l | tee -a $out
|
||||||
|
sycl-ls | tee -a $out
|
||||||
|
|
||||||
|
test x6 = x"$(cat $out | wc -l)" # 2 lines per clinfo entry and 1 per sycl-ls
|
||||||
|
''
|
||||||
Reference in New Issue
Block a user