forked from rarias/jungle
Compare commits
92 Commits
remove-old
...
mega-merge
| Author | SHA1 | Date | |
|---|---|---|---|
|
33d85afc11
|
|||
|
3ac19eb970
|
|||
|
0fabb9da19
|
|||
|
cb5b730458
|
|||
|
f6c4e32be2
|
|||
|
0be0ebe359
|
|||
|
bd22d6650d
|
|||
|
556aacb6b8
|
|||
|
9991207323
|
|||
|
54a583dcfa
|
|||
|
1571f53af0
|
|||
|
fc50bf5562
|
|||
|
7bc6fc9b02
|
|||
|
0994be3b93
|
|||
|
1375a068a0
|
|||
|
a329893fbe
|
|||
|
7c833c556e
|
|||
|
9d86074f22
|
|||
|
1dec96e20b
|
|||
|
3a23299835
|
|||
|
663e905444
|
|||
|
ab8d4c4360
|
|||
|
1102f1afd2
|
|||
|
c0dab997a2
|
|||
|
0307b07231
|
|||
|
0aa69ba4f9
|
|||
|
e7622da9df
|
|||
|
4de4b6da1d
|
|||
|
8e30063cdd
|
|||
|
b60b904372
|
|||
|
3d56d438b6
|
|||
|
9ef739bd99
|
|||
|
64b1019978
|
|||
|
03fc97cdbc
|
|||
|
ea67b76018
|
|||
|
5db7c54ce5
|
|||
|
2dddd986b7
|
|||
|
03652a2efa
|
|||
|
658d3ff01f
|
|||
|
817d21d1f2
|
|||
|
4b70f8ad9a
|
|||
|
2d5d0053f8
|
|||
|
32acd179f9
|
|||
|
421f0d44e4
|
|||
|
faa4b48538
|
|||
|
3e033836fc
|
|||
|
29c8c4826b
|
|||
|
6765635462
|
|||
|
0a5b3403d4
|
|||
|
6dfa515b3b
|
|||
|
6bef5ab4c6
|
|||
|
02d9f5a062
|
|||
|
fcc9719ccd
|
|||
|
1e36c3b204
|
|||
|
972518c2d8
|
|||
|
ee9af71da0
|
|||
|
1d3bda33a0
|
|||
|
87bf095dae
|
|||
|
2264e15102
|
|||
|
209f8a582e
|
|||
|
1457d85f4c
|
|||
|
ad812ea32d
|
|||
|
5bc928c407
|
|||
|
eb9358abab
|
|||
|
d2025d35d9
|
|||
|
6e089344da
|
|||
|
a173af654f
|
|||
|
2fff7e4a7b
|
|||
|
a761b73336
|
|||
|
86eb796771
|
|||
|
08633435cf
|
|||
|
39d64456a4
|
|||
|
410040a4a0
|
|||
| fc69ef3217 | |||
| 1d025f7a38 | |||
| 7989779c8f | |||
| 7d721084a7 | |||
| 796d34a549 | |||
| 5ff1b1343b | |||
| c5cc13fad8 | |||
| 2e09314a7e | |||
| 217d9c1fc0 | |||
| f47ab7757e | |||
| 4b265c071e | |||
| 019826d09e | |||
| a294daf7e3 | |||
| a7018250ca | |||
| e3d1785285 | |||
|
ab86243a07
|
|||
| 14f2393d30 | |||
| f115d611e7 | |||
| 4261d327c6 |
90
flake.lock
generated
90
flake.lock
generated
@@ -1,107 +1,25 @@
|
|||||||
{
|
{
|
||||||
"nodes": {
|
"nodes": {
|
||||||
"agenix": {
|
|
||||||
"inputs": {
|
|
||||||
"darwin": "darwin",
|
|
||||||
"home-manager": "home-manager",
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"systems": "systems"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1750173260,
|
|
||||||
"narHash": "sha256-9P1FziAwl5+3edkfFcr5HeGtQUtrSdk/MksX39GieoA=",
|
|
||||||
"owner": "ryantm",
|
|
||||||
"repo": "agenix",
|
|
||||||
"rev": "531beac616433bac6f9e2a19feb8e99a22a66baf",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "ryantm",
|
|
||||||
"repo": "agenix",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"darwin": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"agenix",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1744478979,
|
|
||||||
"narHash": "sha256-dyN+teG9G82G+m+PX/aSAagkC+vUv0SgUw3XkPhQodQ=",
|
|
||||||
"owner": "lnl7",
|
|
||||||
"repo": "nix-darwin",
|
|
||||||
"rev": "43975d782b418ebf4969e9ccba82466728c2851b",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "lnl7",
|
|
||||||
"ref": "master",
|
|
||||||
"repo": "nix-darwin",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"home-manager": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"agenix",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1745494811,
|
|
||||||
"narHash": "sha256-YZCh2o9Ua1n9uCvrvi5pRxtuVNml8X2a03qIFfRKpFs=",
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "home-manager",
|
|
||||||
"rev": "abfad3d2958c9e6300a883bd443512c55dfeb1be",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "home-manager",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1752436162,
|
"lastModified": 1764522689,
|
||||||
"narHash": "sha256-Kt1UIPi7kZqkSc5HVj6UY5YLHHEzPBkgpNUByuyxtlw=",
|
"narHash": "sha256-SqUuBFjhl/kpDiVaKLQBoD8TLD+/cTUzzgVFoaHrkqY=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "dfcd5b901dbab46c9c6e80b265648481aafb01f8",
|
"rev": "8bb5646e0bed5dbd3ab08c7a7cc15b75ab4e1d0f",
|
||||||
"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"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"agenix": "agenix",
|
|
||||||
"nixpkgs": "nixpkgs"
|
"nixpkgs": "nixpkgs"
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"systems": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1681028828,
|
|
||||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
|
||||||
"owner": "nix-systems",
|
|
||||||
"repo": "default",
|
|
||||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nix-systems",
|
|
||||||
"repo": "default",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"root": "root",
|
"root": "root",
|
||||||
|
|||||||
@@ -1,15 +1,13 @@
|
|||||||
{
|
{
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05";
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
|
||||||
agenix.url = "github:ryantm/agenix";
|
|
||||||
agenix.inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = { self, nixpkgs, agenix, ... }:
|
outputs = { self, nixpkgs, ... }:
|
||||||
let
|
let
|
||||||
mkConf = name: nixpkgs.lib.nixosSystem {
|
mkConf = name: nixpkgs.lib.nixosSystem {
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
specialArgs = { inherit nixpkgs agenix; theFlake = self; };
|
specialArgs = { inherit nixpkgs; theFlake = self; };
|
||||||
modules = [ "${self.outPath}/m/${name}/configuration.nix" ];
|
modules = [ "${self.outPath}/m/${name}/configuration.nix" ];
|
||||||
};
|
};
|
||||||
# For now we only support x86
|
# For now we only support x86
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
./base/august-shutdown.nix
|
./base/august-shutdown.nix
|
||||||
./base/boot.nix
|
./base/boot.nix
|
||||||
./base/env.nix
|
./base/env.nix
|
||||||
|
./base/fish.nix
|
||||||
./base/fs.nix
|
./base/fs.nix
|
||||||
./base/hw.nix
|
./base/hw.nix
|
||||||
./base/net.nix
|
./base/net.nix
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
{ agenix, ... }:
|
{ pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
imports = [ agenix.nixosModules.default ];
|
imports = [ ../../module/agenix.nix ];
|
||||||
|
|
||||||
environment.systemPackages = [
|
# Add agenix to system packages
|
||||||
agenix.packages.x86_64-linux.default
|
environment.systemPackages = [ pkgs.agenix ];
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,14 @@
|
|||||||
{ pkgs, config, ... }:
|
{ pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
vim wget git htop tmux pciutils tcpdump ripgrep nix-index nixos-option
|
vim wget git htop tmux pciutils tcpdump ripgrep nix-index nixos-option
|
||||||
nix-diff ipmitool freeipmi ethtool lm_sensors cmake gnumake file tree
|
nix-diff ipmitool freeipmi ethtool lm_sensors cmake gnumake file tree
|
||||||
ncdu config.boot.kernelPackages.perf ldns pv
|
ncdu perf ldns pv
|
||||||
# From bsckgs overlay
|
nix-output-monitor
|
||||||
osumb
|
nixfmt-tree
|
||||||
|
# From jungle overlay
|
||||||
|
osumb nixgen
|
||||||
];
|
];
|
||||||
|
|
||||||
programs.direnv.enable = true;
|
programs.direnv.enable = true;
|
||||||
@@ -28,9 +30,22 @@
|
|||||||
VISUAL = "vim";
|
VISUAL = "vim";
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.bash.promptInit = ''
|
programs.bash.promptInit = # bash
|
||||||
PS1="\h\\$ "
|
''
|
||||||
'';
|
if echo "$PATH" | grep -qc '/nix/store'; then
|
||||||
|
# Inside a nix shell, dumb prompt
|
||||||
|
PS1="\h\\$ "
|
||||||
|
elif [ "$TERM" != "dumb" ] ; then
|
||||||
|
PROMPT_COLOR="1;31m"
|
||||||
|
((UID)) && PROMPT_COLOR="1;32m"
|
||||||
|
|
||||||
|
PS1="\n\[\033[$PROMPT_COLOR\][\[\e]0;\u@\h: \w\a\]\u@\h:\w]\\$\[\033[0m\] "
|
||||||
|
|
||||||
|
if test "$TERM" = "xterm"; then
|
||||||
|
PS1="\[\033]2;\h:\u:\w\007\]$PS1"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
|
||||||
time.timeZone = "Europe/Madrid";
|
time.timeZone = "Europe/Madrid";
|
||||||
i18n.defaultLocale = "en_DK.UTF-8";
|
i18n.defaultLocale = "en_DK.UTF-8";
|
||||||
|
|||||||
3
m/common/base/fish.nix
Normal file
3
m/common/base/fish.nix
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
programs.fish.enable = true;
|
||||||
|
}
|
||||||
@@ -87,6 +87,13 @@
|
|||||||
openssh.authorizedKeys.keys = [
|
openssh.authorizedKeys.keys = [
|
||||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIIFiqXqt88VuUfyANkZyLJNiuroIITaGlOOTMhVDKjf abonerib@bsc"
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIIFiqXqt88VuUfyANkZyLJNiuroIITaGlOOTMhVDKjf abonerib@bsc"
|
||||||
];
|
];
|
||||||
|
shell = pkgs.fish;
|
||||||
|
packages = with pkgs; [
|
||||||
|
fzf
|
||||||
|
jujutsu
|
||||||
|
neovim
|
||||||
|
starship
|
||||||
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
vlopez = {
|
vlopez = {
|
||||||
@@ -180,6 +187,19 @@
|
|||||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFmMqKqPg4uocNOr3O41kLbZMOMJn3m2ZdN1JvTR96z3 bsccns@arnau-bsc"
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFmMqKqPg4uocNOr3O41kLbZMOMJn3m2ZdN1JvTR96z3 bsccns@arnau-bsc"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
aaguirre = {
|
||||||
|
uid = 9655;
|
||||||
|
isNormalUser = true;
|
||||||
|
home = "/home/Computational/aaguirre";
|
||||||
|
description = "Alejandro Aguirre";
|
||||||
|
group = "Computational";
|
||||||
|
hosts = [ "apex" "hut" ];
|
||||||
|
hashedPassword = "$6$TXRXQT6jjBvxkxU6$E.sh5KspAm1qeG5Ct7OPHpo8REmbGDwjFGvqeGgTVz3GASGOAnPL7UMZsMAsAKBoahOw.v8LNno6XGrTEPzZH1";
|
||||||
|
openssh.authorizedKeys.keys = [
|
||||||
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOlRX7ZCnqtUJYCxKgWmgSrFCYuA2LHY96rVwqxXPl86 aaguirre@BSC-8488184117"
|
||||||
|
];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
./postgresql.nix
|
./postgresql.nix
|
||||||
./nginx.nix
|
./nginx.nix
|
||||||
./p.nix
|
./p.nix
|
||||||
|
./ompss2-timer.nix
|
||||||
#./pxe.nix
|
#./pxe.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@@ -29,6 +29,9 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Allow gitea user to send mail
|
||||||
|
users.users.gitea.extraGroups = [ "mail-robot" ];
|
||||||
|
|
||||||
services.gitea-actions-runner.instances = {
|
services.gitea-actions-runner.instances = {
|
||||||
runrun = {
|
runrun = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
{ config, lib, ... }:
|
{ config, lib, ... }:
|
||||||
{
|
{
|
||||||
|
# Robot user that can see the password to send mail from jungle-robot
|
||||||
|
users.groups.mail-robot = {};
|
||||||
|
|
||||||
age.secrets.jungleRobotPassword = {
|
age.secrets.jungleRobotPassword = {
|
||||||
file = ../../secrets/jungle-robot-password.age;
|
file = ../../secrets/jungle-robot-password.age;
|
||||||
group = "gitea";
|
group = "mail-robot";
|
||||||
mode = "440";
|
mode = "440";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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 = "739bf0175a7f05380fe7ad7023ff1d60db1710e1";
|
rev = "52abaf4d71652a9ef77a0b098db14ca33bffff4c";
|
||||||
hash = "sha256-ea5DzhYTzZ9TmqD+x95rdNdLbxPnBluqlYH2NmBYmc4=";
|
hash = "sha256-/ul9GazbOrOkmlvSgDz/+2W+V+ir5725Y7mVLc3rb0M=";
|
||||||
};
|
};
|
||||||
buildInputs = [ pkgs.hugo ];
|
buildInputs = [ pkgs.hugo ];
|
||||||
buildPhase = ''
|
buildPhase = ''
|
||||||
|
|||||||
85
m/hut/ompss2-timer.nix
Normal file
85
m/hut/ompss2-timer.nix
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
{
|
||||||
|
systemd.timers = {
|
||||||
|
"ompss2-closing" = {
|
||||||
|
wantedBy = [ "timers.target" ];
|
||||||
|
timerConfig = {
|
||||||
|
Unit = "ompss2-closing.service";
|
||||||
|
OnCalendar = [ "*-03-15 07:00:00" "*-09-15 07:00:00"];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"ompss2-freeze" = {
|
||||||
|
wantedBy = [ "timers.target" ];
|
||||||
|
timerConfig = {
|
||||||
|
Unit = "ompss2-freeze.service";
|
||||||
|
OnCalendar = [ "*-04-15 07:00:00" "*-10-15 07:00:00" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"ompss2-release" = {
|
||||||
|
wantedBy = [ "timers.target" ];
|
||||||
|
timerConfig = {
|
||||||
|
Unit = "ompss2-release.service";
|
||||||
|
OnCalendar = [ "*-05-15 07:00:00" "*-11-15 07:00:00" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.services =
|
||||||
|
let
|
||||||
|
closing = pkgs.writeText "closing.txt"
|
||||||
|
''
|
||||||
|
Subject: OmpSs-2 release enters closing period
|
||||||
|
|
||||||
|
Hi,
|
||||||
|
|
||||||
|
You have one month to merge the remaining features for the next OmpSs-2
|
||||||
|
release. Please, identify what needs to be merged and discuss it in the next
|
||||||
|
OmpSs-2 meeting.
|
||||||
|
|
||||||
|
Thanks!,
|
||||||
|
Jungle robot
|
||||||
|
'';
|
||||||
|
freeze = pkgs.writeText "freeze.txt"
|
||||||
|
''
|
||||||
|
Subject: OmpSs-2 release enters freeze period
|
||||||
|
|
||||||
|
Hi,
|
||||||
|
|
||||||
|
The period to introduce new features or breaking changes is over, only bug
|
||||||
|
fixes are allowed now. During this time, please prepare the release notes
|
||||||
|
to be included in the next OmpSs-2 release.
|
||||||
|
|
||||||
|
Thanks!,
|
||||||
|
Jungle robot
|
||||||
|
'';
|
||||||
|
release = pkgs.writeText "release.txt"
|
||||||
|
''
|
||||||
|
Subject: OmpSs-2 release now
|
||||||
|
|
||||||
|
Hi,
|
||||||
|
|
||||||
|
The period to introduce bug fixes is now over. Please, proceed to do the
|
||||||
|
OmpSs-2 release.
|
||||||
|
|
||||||
|
Thanks!,
|
||||||
|
Jungle robot
|
||||||
|
'';
|
||||||
|
mkServ = name: mail: {
|
||||||
|
"ompss2-${name}" = {
|
||||||
|
script = ''
|
||||||
|
set -eu
|
||||||
|
set -o pipefail
|
||||||
|
cat ${mail} | ${config.security.wrapperDir}/sendmail star@bsc.es
|
||||||
|
'';
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "oneshot";
|
||||||
|
DynamicUser = true;
|
||||||
|
Group = "mail-robot";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
(mkServ "closing" closing) //
|
||||||
|
(mkServ "freeze" freeze) //
|
||||||
|
(mkServ "release" release);
|
||||||
|
}
|
||||||
357
m/module/agenix.nix
Normal file
357
m/module/agenix.nix
Normal file
@@ -0,0 +1,357 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.age;
|
||||||
|
|
||||||
|
isDarwin = lib.attrsets.hasAttrByPath [ "environment" "darwinConfig" ] options;
|
||||||
|
|
||||||
|
ageBin = config.age.ageBin;
|
||||||
|
|
||||||
|
users = config.users.users;
|
||||||
|
|
||||||
|
sysusersEnabled =
|
||||||
|
if isDarwin then
|
||||||
|
false
|
||||||
|
else
|
||||||
|
options.systemd ? sysusers && (config.systemd.sysusers.enable || config.services.userborn.enable);
|
||||||
|
|
||||||
|
mountCommand =
|
||||||
|
if isDarwin then
|
||||||
|
''
|
||||||
|
if ! diskutil info "${cfg.secretsMountPoint}" &> /dev/null; then
|
||||||
|
num_sectors=1048576
|
||||||
|
dev=$(hdiutil attach -nomount ram://"$num_sectors" | sed 's/[[:space:]]*$//')
|
||||||
|
newfs_hfs -v agenix "$dev"
|
||||||
|
mount -t hfs -o nobrowse,nodev,nosuid,-m=0751 "$dev" "${cfg.secretsMountPoint}"
|
||||||
|
fi
|
||||||
|
''
|
||||||
|
else
|
||||||
|
''
|
||||||
|
grep -q "${cfg.secretsMountPoint} ramfs" /proc/mounts ||
|
||||||
|
mount -t ramfs none "${cfg.secretsMountPoint}" -o nodev,nosuid,mode=0751
|
||||||
|
'';
|
||||||
|
newGeneration = ''
|
||||||
|
_agenix_generation="$(basename "$(readlink ${cfg.secretsDir})" || echo 0)"
|
||||||
|
(( ++_agenix_generation ))
|
||||||
|
echo "[agenix] creating new generation in ${cfg.secretsMountPoint}/$_agenix_generation"
|
||||||
|
mkdir -p "${cfg.secretsMountPoint}"
|
||||||
|
chmod 0751 "${cfg.secretsMountPoint}"
|
||||||
|
${mountCommand}
|
||||||
|
mkdir -p "${cfg.secretsMountPoint}/$_agenix_generation"
|
||||||
|
chmod 0751 "${cfg.secretsMountPoint}/$_agenix_generation"
|
||||||
|
'';
|
||||||
|
|
||||||
|
chownGroup = if isDarwin then "admin" else "keys";
|
||||||
|
# chown the secrets mountpoint and the current generation to the keys group
|
||||||
|
# instead of leaving it root:root.
|
||||||
|
chownMountPoint = ''
|
||||||
|
chown :${chownGroup} "${cfg.secretsMountPoint}" "${cfg.secretsMountPoint}/$_agenix_generation"
|
||||||
|
'';
|
||||||
|
|
||||||
|
setTruePath = secretType: ''
|
||||||
|
${
|
||||||
|
if secretType.symlink then
|
||||||
|
''
|
||||||
|
_truePath="${cfg.secretsMountPoint}/$_agenix_generation/${secretType.name}"
|
||||||
|
''
|
||||||
|
else
|
||||||
|
''
|
||||||
|
_truePath="${secretType.path}"
|
||||||
|
''
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
|
||||||
|
installSecret = secretType: ''
|
||||||
|
${setTruePath secretType}
|
||||||
|
echo "decrypting '${secretType.file}' to '$_truePath'..."
|
||||||
|
TMP_FILE="$_truePath.tmp"
|
||||||
|
|
||||||
|
IDENTITIES=()
|
||||||
|
for identity in ${toString cfg.identityPaths}; do
|
||||||
|
test -r "$identity" || continue
|
||||||
|
test -s "$identity" || continue
|
||||||
|
IDENTITIES+=(-i)
|
||||||
|
IDENTITIES+=("$identity")
|
||||||
|
done
|
||||||
|
|
||||||
|
test "''${#IDENTITIES[@]}" -eq 0 && echo "[agenix] WARNING: no readable identities found!"
|
||||||
|
|
||||||
|
mkdir -p "$(dirname "$_truePath")"
|
||||||
|
[ "${secretType.path}" != "${cfg.secretsDir}/${secretType.name}" ] && mkdir -p "$(dirname "${secretType.path}")"
|
||||||
|
(
|
||||||
|
umask u=r,g=,o=
|
||||||
|
test -f "${secretType.file}" || echo '[agenix] WARNING: encrypted file ${secretType.file} does not exist!'
|
||||||
|
test -d "$(dirname "$TMP_FILE")" || echo "[agenix] WARNING: $(dirname "$TMP_FILE") does not exist!"
|
||||||
|
LANG=${
|
||||||
|
config.i18n.defaultLocale or "C"
|
||||||
|
} ${ageBin} --decrypt "''${IDENTITIES[@]}" -o "$TMP_FILE" "${secretType.file}"
|
||||||
|
)
|
||||||
|
chmod ${secretType.mode} "$TMP_FILE"
|
||||||
|
mv -f "$TMP_FILE" "$_truePath"
|
||||||
|
|
||||||
|
${optionalString secretType.symlink ''
|
||||||
|
[ "${secretType.path}" != "${cfg.secretsDir}/${secretType.name}" ] && ln -sfT "${cfg.secretsDir}/${secretType.name}" "${secretType.path}"
|
||||||
|
''}
|
||||||
|
'';
|
||||||
|
|
||||||
|
testIdentities = map (path: ''
|
||||||
|
test -f ${path} || echo '[agenix] WARNING: config.age.identityPaths entry ${path} not present!'
|
||||||
|
'') cfg.identityPaths;
|
||||||
|
|
||||||
|
cleanupAndLink = ''
|
||||||
|
_agenix_generation="$(basename "$(readlink ${cfg.secretsDir})" || echo 0)"
|
||||||
|
(( ++_agenix_generation ))
|
||||||
|
echo "[agenix] symlinking new secrets to ${cfg.secretsDir} (generation $_agenix_generation)..."
|
||||||
|
ln -sfT "${cfg.secretsMountPoint}/$_agenix_generation" ${cfg.secretsDir}
|
||||||
|
|
||||||
|
(( _agenix_generation > 1 )) && {
|
||||||
|
echo "[agenix] removing old secrets (generation $(( _agenix_generation - 1 )))..."
|
||||||
|
rm -rf "${cfg.secretsMountPoint}/$(( _agenix_generation - 1 ))"
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
|
||||||
|
installSecrets = builtins.concatStringsSep "\n" (
|
||||||
|
[ "echo '[agenix] decrypting secrets...'" ]
|
||||||
|
++ testIdentities
|
||||||
|
++ (map installSecret (builtins.attrValues cfg.secrets))
|
||||||
|
++ [ cleanupAndLink ]
|
||||||
|
);
|
||||||
|
|
||||||
|
chownSecret = secretType: ''
|
||||||
|
${setTruePath secretType}
|
||||||
|
chown ${secretType.owner}:${secretType.group} "$_truePath"
|
||||||
|
'';
|
||||||
|
|
||||||
|
chownSecrets = builtins.concatStringsSep "\n" (
|
||||||
|
[ "echo '[agenix] chowning...'" ]
|
||||||
|
++ [ chownMountPoint ]
|
||||||
|
++ (map chownSecret (builtins.attrValues cfg.secrets))
|
||||||
|
);
|
||||||
|
|
||||||
|
secretType = types.submodule (
|
||||||
|
{ config, ... }:
|
||||||
|
{
|
||||||
|
options = {
|
||||||
|
name = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = config._module.args.name;
|
||||||
|
defaultText = literalExpression "config._module.args.name";
|
||||||
|
description = ''
|
||||||
|
Name of the file used in {option}`age.secretsDir`
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
file = mkOption {
|
||||||
|
type = types.path;
|
||||||
|
description = ''
|
||||||
|
Age file the secret is loaded from.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
path = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "${cfg.secretsDir}/${config.name}";
|
||||||
|
defaultText = literalExpression ''
|
||||||
|
"''${cfg.secretsDir}/''${config.name}"
|
||||||
|
'';
|
||||||
|
description = ''
|
||||||
|
Path where the decrypted secret is installed.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
mode = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "0400";
|
||||||
|
description = ''
|
||||||
|
Permissions mode of the decrypted secret in a format understood by chmod.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
owner = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "0";
|
||||||
|
description = ''
|
||||||
|
User of the decrypted secret.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
group = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = users.${config.owner}.group or "0";
|
||||||
|
defaultText = literalExpression ''
|
||||||
|
users.''${config.owner}.group or "0"
|
||||||
|
'';
|
||||||
|
description = ''
|
||||||
|
Group of the decrypted secret.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
symlink = mkEnableOption "symlinking secrets to their destination" // {
|
||||||
|
default = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
(mkRenamedOptionModule [ "age" "sshKeyPaths" ] [ "age" "identityPaths" ])
|
||||||
|
];
|
||||||
|
|
||||||
|
options.age = {
|
||||||
|
ageBin = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "${pkgs.age}/bin/age";
|
||||||
|
defaultText = literalExpression ''
|
||||||
|
"''${pkgs.age}/bin/age"
|
||||||
|
'';
|
||||||
|
description = ''
|
||||||
|
The age executable to use.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
secrets = mkOption {
|
||||||
|
type = types.attrsOf secretType;
|
||||||
|
default = { };
|
||||||
|
description = ''
|
||||||
|
Attrset of secrets.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
secretsDir = mkOption {
|
||||||
|
type = types.path;
|
||||||
|
default = "/run/agenix";
|
||||||
|
description = ''
|
||||||
|
Folder where secrets are symlinked to
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
secretsMountPoint = mkOption {
|
||||||
|
type =
|
||||||
|
types.addCheck types.str (
|
||||||
|
s:
|
||||||
|
(builtins.match "[ \t\n]*" s) == null # non-empty
|
||||||
|
&& (builtins.match ".+/" s) == null
|
||||||
|
) # without trailing slash
|
||||||
|
// {
|
||||||
|
description = "${types.str.description} (with check: non-empty without trailing slash)";
|
||||||
|
};
|
||||||
|
default = "/run/agenix.d";
|
||||||
|
description = ''
|
||||||
|
Where secrets are created before they are symlinked to {option}`age.secretsDir`
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
identityPaths = mkOption {
|
||||||
|
type = types.listOf types.path;
|
||||||
|
default =
|
||||||
|
if isDarwin then
|
||||||
|
[
|
||||||
|
"/etc/ssh/ssh_host_ed25519_key"
|
||||||
|
"/etc/ssh/ssh_host_rsa_key"
|
||||||
|
]
|
||||||
|
else if (config.services.openssh.enable or false) then
|
||||||
|
map (e: e.path) (
|
||||||
|
lib.filter (e: e.type == "rsa" || e.type == "ed25519") config.services.openssh.hostKeys
|
||||||
|
)
|
||||||
|
else
|
||||||
|
[ ];
|
||||||
|
defaultText = literalExpression ''
|
||||||
|
if isDarwin
|
||||||
|
then [
|
||||||
|
"/etc/ssh/ssh_host_ed25519_key"
|
||||||
|
"/etc/ssh/ssh_host_rsa_key"
|
||||||
|
]
|
||||||
|
else if (config.services.openssh.enable or false)
|
||||||
|
then map (e: e.path) (lib.filter (e: e.type == "rsa" || e.type == "ed25519") config.services.openssh.hostKeys)
|
||||||
|
else [];
|
||||||
|
'';
|
||||||
|
description = ''
|
||||||
|
Path to SSH keys to be used as identities in age decryption.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf (cfg.secrets != { }) (mkMerge [
|
||||||
|
{
|
||||||
|
assertions = [
|
||||||
|
{
|
||||||
|
assertion = cfg.identityPaths != [ ];
|
||||||
|
message = "age.identityPaths must be set, for example by enabling openssh.";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
(optionalAttrs (!isDarwin) {
|
||||||
|
# When using sysusers we no longer be started as an activation script
|
||||||
|
# because those are started in initrd while sysusers is started later.
|
||||||
|
systemd.services.agenix-install-secrets = mkIf sysusersEnabled {
|
||||||
|
wantedBy = [ "sysinit.target" ];
|
||||||
|
after = [ "systemd-sysusers.service" ];
|
||||||
|
unitConfig.DefaultDependencies = "no";
|
||||||
|
|
||||||
|
path = [ pkgs.mount ];
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "oneshot";
|
||||||
|
ExecStart = pkgs.writeShellScript "agenix-install" (concatLines [
|
||||||
|
newGeneration
|
||||||
|
installSecrets
|
||||||
|
chownSecrets
|
||||||
|
]);
|
||||||
|
RemainAfterExit = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Create a new directory full of secrets for symlinking (this helps
|
||||||
|
# ensure removed secrets are actually removed, or at least become
|
||||||
|
# invalid symlinks).
|
||||||
|
system.activationScripts = mkIf (!sysusersEnabled) {
|
||||||
|
agenixNewGeneration = {
|
||||||
|
text = newGeneration;
|
||||||
|
deps = [
|
||||||
|
"specialfs"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
agenixInstall = {
|
||||||
|
text = installSecrets;
|
||||||
|
deps = [
|
||||||
|
"agenixNewGeneration"
|
||||||
|
"specialfs"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# So user passwords can be encrypted.
|
||||||
|
users.deps = [ "agenixInstall" ];
|
||||||
|
|
||||||
|
# Change ownership and group after users and groups are made.
|
||||||
|
agenixChown = {
|
||||||
|
text = chownSecrets;
|
||||||
|
deps = [
|
||||||
|
"users"
|
||||||
|
"groups"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# So other activation scripts can depend on agenix being done.
|
||||||
|
agenix = {
|
||||||
|
text = "";
|
||||||
|
deps = [ "agenixChown" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
})
|
||||||
|
|
||||||
|
(optionalAttrs isDarwin {
|
||||||
|
launchd.daemons.activate-agenix = {
|
||||||
|
script = ''
|
||||||
|
set -e
|
||||||
|
set -o pipefail
|
||||||
|
export PATH="${pkgs.gnugrep}/bin:${pkgs.coreutils}/bin:@out@/sw/bin:/usr/bin:/bin:/usr/sbin:/sbin"
|
||||||
|
${newGeneration}
|
||||||
|
${installSecrets}
|
||||||
|
${chownSecrets}
|
||||||
|
exit 0
|
||||||
|
'';
|
||||||
|
serviceConfig = {
|
||||||
|
RunAtLoad = true;
|
||||||
|
KeepAlive.SuccessfulExit = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
})
|
||||||
|
]);
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
|
||||||
@@ -86,9 +51,7 @@ in {
|
|||||||
# when a task runs (srun) so we can ssh early.
|
# when a task runs (srun) so we can ssh early.
|
||||||
PrologFlags=Alloc,Contain,X11
|
PrologFlags=Alloc,Contain,X11
|
||||||
|
|
||||||
# LaunchParameters=ulimit_pam_adopt will set RLIMIT_RSS in processes
|
LaunchParameters=use_interactive_step
|
||||||
# adopted by the external step, similar to tasks running in regular steps
|
|
||||||
# LaunchParameters=ulimit_pam_adopt
|
|
||||||
SlurmdDebug=debug5
|
SlurmdDebug=debug5
|
||||||
#DebugFlags=Protocol,Cgroup
|
#DebugFlags=Protocol,Cgroup
|
||||||
'';
|
'';
|
||||||
|
|||||||
@@ -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 = "739bf0175a7f05380fe7ad7023ff1d60db1710e1";
|
rev = "52abaf4d71652a9ef77a0b098db14ca33bffff4c";
|
||||||
hash = "sha256-ea5DzhYTzZ9TmqD+x95rdNdLbxPnBluqlYH2NmBYmc4=";
|
hash = "sha256-/ul9GazbOrOkmlvSgDz/+2W+V+ir5725Y7mVLc3rb0M=";
|
||||||
};
|
};
|
||||||
buildInputs = [ pkgs.hugo ];
|
buildInputs = [ pkgs.hugo ];
|
||||||
buildPhase = ''
|
buildPhase = ''
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
{ lib, ... }:
|
{ lib, pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
../common/ssf.nix
|
../common/ssf.nix
|
||||||
../module/hut-substituter.nix
|
../module/hut-substituter.nix
|
||||||
|
./hydra.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
# Select this using the ID to avoid mismatches
|
# Select this using the ID to avoid mismatches
|
||||||
@@ -30,4 +31,22 @@
|
|||||||
prefixLength = 24;
|
prefixLength = 24;
|
||||||
} ];
|
} ];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
services.nix-serve = {
|
||||||
|
enable = true;
|
||||||
|
bindAddress = "0.0.0.0";
|
||||||
|
port = 5000;
|
||||||
|
package = pkgs.haskell.lib.overrideSrc (pkgs.haskell.packages.ghc96.nix-serve-ng.override { nix = pkgs.nixVersions.nix_2_28; }) {
|
||||||
|
src = pkgs.fetchgit {
|
||||||
|
url = "https://jungle.bsc.es/git/abonerib/nix-serve-ng.git";
|
||||||
|
rev = "9c056641300a826db66b66d7e584b2541d38927a";
|
||||||
|
hash = "sha256-y69ZchFiZOU71eyeljcQgLxkLk5JUzZfanq8Yzw4MkI=";
|
||||||
|
};
|
||||||
|
version = "unstable";
|
||||||
|
};
|
||||||
|
|
||||||
|
secretKeyFile = "/var/cache-priv-key.pem";
|
||||||
|
# Public key:
|
||||||
|
# 10.0.40.6:8jBhIdXEBap+Qo+vc1/fnV9vj43A2oDk839EEheRr/U=
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
57
m/weasel/hydra.nix
Normal file
57
m/weasel/hydra.nix
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
services.hydra = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
# Wrap hydra so it puts quiet flag every time... This is dumb and annoying,
|
||||||
|
# but i can't override the systemd ExecStart without running into infinite
|
||||||
|
# recursion.
|
||||||
|
package = pkgs.symlinkJoin {
|
||||||
|
name = "hydra-quiet";
|
||||||
|
paths = [ pkgs.hydra ];
|
||||||
|
postBuild = ''
|
||||||
|
for prog in hydra-queue-runner hydra-evaluator ; do
|
||||||
|
prev=$(realpath $out/bin/$prog)
|
||||||
|
rm $out/bin/$prog
|
||||||
|
cat >$out/bin/$prog <<EOF
|
||||||
|
#!/bin/sh
|
||||||
|
args=()
|
||||||
|
for arg in "\$@"; do
|
||||||
|
if [ "\$arg" != "-v" ]; then
|
||||||
|
args+=("\$arg")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
exec $prev --quiet "\''${args[@]}"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
chmod +x $out/bin/$prog
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
hydraURL = "http://localhost:3001"; # externally visible URL
|
||||||
|
notificationSender = "hydra@jungle.bsc.es"; # e-mail of Hydra service
|
||||||
|
port = 3001;
|
||||||
|
# a standalone Hydra will require you to unset the buildMachinesFiles list to avoid using a nonexistant /etc/nix/machines
|
||||||
|
buildMachinesFiles = [ ];
|
||||||
|
# you will probably also want, otherwise *everything* will be built from scratch
|
||||||
|
useSubstitutes = true;
|
||||||
|
listenHost = "0.0.0.0"; # Force IPv4
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.services.hydra-send-stats.enable = lib.mkForce false;
|
||||||
|
|
||||||
|
networking.firewall.allowedTCPPorts = [ config.services.hydra.port ];
|
||||||
|
|
||||||
|
nix.settings.extra-allowed-uris = [
|
||||||
|
"git+ssh://git@bscpm04.bsc.es"
|
||||||
|
"git+ssh://git@gitlab-internal.bsc.es"
|
||||||
|
"https://github.com"
|
||||||
|
"git+ssh://github.com"
|
||||||
|
];
|
||||||
|
}
|
||||||
75
overlay.nix
75
overlay.nix
@@ -7,7 +7,11 @@ let
|
|||||||
callPackage = final.callPackage;
|
callPackage = final.callPackage;
|
||||||
|
|
||||||
bscPkgs = {
|
bscPkgs = {
|
||||||
|
agenix = prev.callPackage ./pkgs/agenix/default.nix { };
|
||||||
amd-uprof = prev.callPackage ./pkgs/amd-uprof/default.nix { };
|
amd-uprof = prev.callPackage ./pkgs/amd-uprof/default.nix { };
|
||||||
|
aoccUnwrapped = callPackage ./pkgs/aocc/unwrapped.nix { };
|
||||||
|
aocc = callPackage ./pkgs/aocc/default.nix { };
|
||||||
|
stdenvAocc = final.overrideCC final.stdenv final.aocc;
|
||||||
bench6 = callPackage ./pkgs/bench6/default.nix { };
|
bench6 = callPackage ./pkgs/bench6/default.nix { };
|
||||||
bigotes = callPackage ./pkgs/bigotes/default.nix { };
|
bigotes = callPackage ./pkgs/bigotes/default.nix { };
|
||||||
clangOmpss2 = callPackage ./pkgs/llvm-ompss2/default.nix { };
|
clangOmpss2 = callPackage ./pkgs/llvm-ompss2/default.nix { };
|
||||||
@@ -18,7 +22,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
|
||||||
@@ -28,28 +37,45 @@ 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 = callPackage ./pkgs/llvm-intel/default.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; };
|
||||||
|
papi = callPackage ./pkgs/papi/default.nix { papi = prev.papi; };
|
||||||
paraverKernel = callPackage ./pkgs/paraver/kernel.nix { };
|
paraverKernel = callPackage ./pkgs/paraver/kernel.nix { };
|
||||||
|
pertalde = callPackage ./pkgs/pertalde/default.nix { };
|
||||||
|
pocl = callPackage ./pkgs/pocl/default.nix { };
|
||||||
|
pocl-unpublished = callPackage ./pkgs/pocl/default.nix {
|
||||||
|
gitUrl = "git@github.com:pocl/unpublished.git";
|
||||||
|
gitBranch = "loopvec-next";
|
||||||
|
gitCommit = "74f7e2b5644b1c5598205c8cac1914bb4c5dadec";
|
||||||
|
enableNOSV = false;
|
||||||
|
enableOVNI = false;
|
||||||
|
};
|
||||||
|
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; };
|
||||||
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; };
|
||||||
stdenvClangOmpss2Nanos6 = final.stdenv.override { cc = final.clangOmpss2Nanos6; allowedRequisites = null; };
|
stdenvClangOmpss2Nanos6 = final.stdenv.override { cc = final.clangOmpss2Nanos6; allowedRequisites = null; };
|
||||||
@@ -57,8 +83,18 @@ 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 { };
|
||||||
|
taopencl = callPackage ./pkgs/taopencl/default.nix { };
|
||||||
wxparaver = callPackage ./pkgs/paraver/default.nix { };
|
wxparaver = callPackage ./pkgs/paraver/default.nix { };
|
||||||
|
|
||||||
|
_cuda = prev._cuda.extend (_: _prev: final.lib.recursiveUpdate _prev {
|
||||||
|
extensions = _prev.extensions ++ [(finalAttrs: _: {
|
||||||
|
tacuda = finalAttrs.callPackage ./pkgs/tacuda/default.nix { };
|
||||||
|
})];
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
tests = rec {
|
tests = rec {
|
||||||
@@ -66,6 +102,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; };
|
||||||
@@ -75,6 +118,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 {
|
||||||
@@ -92,20 +142,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 { } ''
|
||||||
@@ -125,7 +186,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 // {
|
||||||
|
|||||||
212
pkgs/agenix/agenix.sh
Normal file
212
pkgs/agenix/agenix.sh
Normal file
@@ -0,0 +1,212 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -Eeuo pipefail
|
||||||
|
|
||||||
|
PACKAGE="agenix"
|
||||||
|
|
||||||
|
function show_help () {
|
||||||
|
echo "$PACKAGE - edit and rekey age secret files"
|
||||||
|
echo " "
|
||||||
|
echo "$PACKAGE -e FILE [-i PRIVATE_KEY]"
|
||||||
|
echo "$PACKAGE -r [-i PRIVATE_KEY]"
|
||||||
|
echo ' '
|
||||||
|
echo 'options:'
|
||||||
|
echo '-h, --help show help'
|
||||||
|
# shellcheck disable=SC2016
|
||||||
|
echo '-e, --edit FILE edits FILE using $EDITOR'
|
||||||
|
echo '-r, --rekey re-encrypts all secrets with specified recipients'
|
||||||
|
echo '-d, --decrypt FILE decrypts FILE to STDOUT'
|
||||||
|
echo '-i, --identity identity to use when decrypting'
|
||||||
|
echo '-v, --verbose verbose output'
|
||||||
|
echo ' '
|
||||||
|
echo 'FILE an age-encrypted file'
|
||||||
|
echo ' '
|
||||||
|
echo 'PRIVATE_KEY a path to a private SSH key used to decrypt file'
|
||||||
|
echo ' '
|
||||||
|
echo 'EDITOR environment variable of editor to use when editing FILE'
|
||||||
|
echo ' '
|
||||||
|
echo 'If STDIN is not interactive, EDITOR will be set to "cp /dev/stdin"'
|
||||||
|
echo ' '
|
||||||
|
echo 'RULES environment variable with path to Nix file specifying recipient public keys.'
|
||||||
|
echo "Defaults to './secrets.nix'"
|
||||||
|
echo ' '
|
||||||
|
echo "agenix version: @version@"
|
||||||
|
echo "age binary path: @ageBin@"
|
||||||
|
echo "age version: $(@ageBin@ --version)"
|
||||||
|
}
|
||||||
|
|
||||||
|
function warn() {
|
||||||
|
printf '%s\n' "$*" >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
function err() {
|
||||||
|
warn "$*"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
test $# -eq 0 && (show_help && exit 1)
|
||||||
|
|
||||||
|
REKEY=0
|
||||||
|
DECRYPT_ONLY=0
|
||||||
|
DEFAULT_DECRYPT=(--decrypt)
|
||||||
|
|
||||||
|
while test $# -gt 0; do
|
||||||
|
case "$1" in
|
||||||
|
-h|--help)
|
||||||
|
show_help
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
-e|--edit)
|
||||||
|
shift
|
||||||
|
if test $# -gt 0; then
|
||||||
|
export FILE=$1
|
||||||
|
else
|
||||||
|
echo "no FILE specified"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-i|--identity)
|
||||||
|
shift
|
||||||
|
if test $# -gt 0; then
|
||||||
|
DEFAULT_DECRYPT+=(--identity "$1")
|
||||||
|
else
|
||||||
|
echo "no PRIVATE_KEY specified"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-r|--rekey)
|
||||||
|
shift
|
||||||
|
REKEY=1
|
||||||
|
;;
|
||||||
|
-d|--decrypt)
|
||||||
|
shift
|
||||||
|
DECRYPT_ONLY=1
|
||||||
|
if test $# -gt 0; then
|
||||||
|
export FILE=$1
|
||||||
|
else
|
||||||
|
echo "no FILE specified"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-v|--verbose)
|
||||||
|
shift
|
||||||
|
set -x
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
show_help
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
RULES=${RULES:-./secrets.nix}
|
||||||
|
function cleanup {
|
||||||
|
if [ -n "${CLEARTEXT_DIR+x}" ]
|
||||||
|
then
|
||||||
|
rm -rf -- "$CLEARTEXT_DIR"
|
||||||
|
fi
|
||||||
|
if [ -n "${REENCRYPTED_DIR+x}" ]
|
||||||
|
then
|
||||||
|
rm -rf -- "$REENCRYPTED_DIR"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
trap "cleanup" 0 2 3 15
|
||||||
|
|
||||||
|
function keys {
|
||||||
|
(@nixInstantiate@ --json --eval --strict -E "(let rules = import $RULES; in rules.\"$1\".publicKeys)" | @jqBin@ -r .[]) || exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function armor {
|
||||||
|
(@nixInstantiate@ --json --eval --strict -E "(let rules = import $RULES; in (builtins.hasAttr \"armor\" rules.\"$1\" && rules.\"$1\".armor))") || exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function decrypt {
|
||||||
|
FILE=$1
|
||||||
|
KEYS=$2
|
||||||
|
if [ -z "$KEYS" ]
|
||||||
|
then
|
||||||
|
err "There is no rule for $FILE in $RULES."
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "$FILE" ]
|
||||||
|
then
|
||||||
|
DECRYPT=("${DEFAULT_DECRYPT[@]}")
|
||||||
|
if [[ "${DECRYPT[*]}" != *"--identity"* ]]; then
|
||||||
|
if [ -f "$HOME/.ssh/id_rsa" ]; then
|
||||||
|
DECRYPT+=(--identity "$HOME/.ssh/id_rsa")
|
||||||
|
fi
|
||||||
|
if [ -f "$HOME/.ssh/id_ed25519" ]; then
|
||||||
|
DECRYPT+=(--identity "$HOME/.ssh/id_ed25519")
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [[ "${DECRYPT[*]}" != *"--identity"* ]]; then
|
||||||
|
err "No identity found to decrypt $FILE. Try adding an SSH key at $HOME/.ssh/id_rsa or $HOME/.ssh/id_ed25519 or using the --identity flag to specify a file."
|
||||||
|
fi
|
||||||
|
|
||||||
|
@ageBin@ "${DECRYPT[@]}" -- "$FILE" || exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function edit {
|
||||||
|
FILE=$1
|
||||||
|
KEYS=$(keys "$FILE") || exit 1
|
||||||
|
ARMOR=$(armor "$FILE") || exit 1
|
||||||
|
|
||||||
|
CLEARTEXT_DIR=$(@mktempBin@ -d)
|
||||||
|
CLEARTEXT_FILE="$CLEARTEXT_DIR/$(basename -- "$FILE")"
|
||||||
|
DEFAULT_DECRYPT+=(-o "$CLEARTEXT_FILE")
|
||||||
|
|
||||||
|
decrypt "$FILE" "$KEYS" || exit 1
|
||||||
|
|
||||||
|
[ ! -f "$CLEARTEXT_FILE" ] || cp -- "$CLEARTEXT_FILE" "$CLEARTEXT_FILE.before"
|
||||||
|
|
||||||
|
[ -t 0 ] || EDITOR='cp -- /dev/stdin'
|
||||||
|
|
||||||
|
$EDITOR "$CLEARTEXT_FILE"
|
||||||
|
|
||||||
|
if [ ! -f "$CLEARTEXT_FILE" ]
|
||||||
|
then
|
||||||
|
warn "$FILE wasn't created."
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
[ -f "$FILE" ] && [ "$EDITOR" != ":" ] && @diffBin@ -q -- "$CLEARTEXT_FILE.before" "$CLEARTEXT_FILE" && warn "$FILE wasn't changed, skipping re-encryption." && return
|
||||||
|
|
||||||
|
ENCRYPT=()
|
||||||
|
if [[ "$ARMOR" == "true" ]]; then
|
||||||
|
ENCRYPT+=(--armor)
|
||||||
|
fi
|
||||||
|
while IFS= read -r key
|
||||||
|
do
|
||||||
|
if [ -n "$key" ]; then
|
||||||
|
ENCRYPT+=(--recipient "$key")
|
||||||
|
fi
|
||||||
|
done <<< "$KEYS"
|
||||||
|
|
||||||
|
REENCRYPTED_DIR=$(@mktempBin@ -d)
|
||||||
|
REENCRYPTED_FILE="$REENCRYPTED_DIR/$(basename -- "$FILE")"
|
||||||
|
|
||||||
|
ENCRYPT+=(-o "$REENCRYPTED_FILE")
|
||||||
|
|
||||||
|
@ageBin@ "${ENCRYPT[@]}" <"$CLEARTEXT_FILE" || exit 1
|
||||||
|
|
||||||
|
mkdir -p -- "$(dirname -- "$FILE")"
|
||||||
|
|
||||||
|
mv -f -- "$REENCRYPTED_FILE" "$FILE"
|
||||||
|
}
|
||||||
|
|
||||||
|
function rekey {
|
||||||
|
FILES=$( (@nixInstantiate@ --json --eval -E "(let rules = import $RULES; in builtins.attrNames rules)" | @jqBin@ -r .[]) || exit 1)
|
||||||
|
|
||||||
|
for FILE in $FILES
|
||||||
|
do
|
||||||
|
warn "rekeying $FILE..."
|
||||||
|
EDITOR=: edit "$FILE"
|
||||||
|
cleanup
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
[ $REKEY -eq 1 ] && rekey && exit 0
|
||||||
|
[ $DECRYPT_ONLY -eq 1 ] && DEFAULT_DECRYPT+=("-o" "-") && decrypt "${FILE}" "$(keys "$FILE")" && exit 0
|
||||||
|
edit "$FILE" && cleanup && exit 0
|
||||||
66
pkgs/agenix/default.nix
Normal file
66
pkgs/agenix/default.nix
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
stdenv,
|
||||||
|
age,
|
||||||
|
jq,
|
||||||
|
nix,
|
||||||
|
mktemp,
|
||||||
|
diffutils,
|
||||||
|
replaceVars,
|
||||||
|
ageBin ? "${age}/bin/age",
|
||||||
|
shellcheck,
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
bin = "${placeholder "out"}/bin/agenix";
|
||||||
|
in
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
pname = "agenix";
|
||||||
|
version = "0.15.0";
|
||||||
|
src = replaceVars ./agenix.sh {
|
||||||
|
inherit ageBin version;
|
||||||
|
jqBin = "${jq}/bin/jq";
|
||||||
|
nixInstantiate = "${nix}/bin/nix-instantiate";
|
||||||
|
mktempBin = "${mktemp}/bin/mktemp";
|
||||||
|
diffBin = "${diffutils}/bin/diff";
|
||||||
|
};
|
||||||
|
dontUnpack = true;
|
||||||
|
doInstallCheck = true;
|
||||||
|
installCheckInputs = [ shellcheck ];
|
||||||
|
postInstallCheck = ''
|
||||||
|
shellcheck ${bin}
|
||||||
|
${bin} -h | grep ${version}
|
||||||
|
|
||||||
|
test_tmp=$(mktemp -d 2>/dev/null || mktemp -d -t 'mytmpdir')
|
||||||
|
export HOME="$test_tmp/home"
|
||||||
|
export NIX_STORE_DIR="$test_tmp/nix/store"
|
||||||
|
export NIX_STATE_DIR="$test_tmp/nix/var"
|
||||||
|
mkdir -p "$HOME" "$NIX_STORE_DIR" "$NIX_STATE_DIR"
|
||||||
|
function cleanup {
|
||||||
|
rm -rf "$test_tmp"
|
||||||
|
}
|
||||||
|
trap "cleanup" 0 2 3 15
|
||||||
|
|
||||||
|
mkdir -p $HOME/.ssh
|
||||||
|
cp -r "${./example}" $HOME/secrets
|
||||||
|
chmod -R u+rw $HOME/secrets
|
||||||
|
(
|
||||||
|
umask u=rw,g=r,o=r
|
||||||
|
cp ${./example_keys/user1.pub} $HOME/.ssh/id_ed25519.pub
|
||||||
|
chown $UID $HOME/.ssh/id_ed25519.pub
|
||||||
|
)
|
||||||
|
(
|
||||||
|
umask u=rw,g=,o=
|
||||||
|
cp ${./example_keys/user1} $HOME/.ssh/id_ed25519
|
||||||
|
chown $UID $HOME/.ssh/id_ed25519
|
||||||
|
)
|
||||||
|
|
||||||
|
cd $HOME/secrets
|
||||||
|
test $(${bin} -d secret1.age) = "hello"
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
install -D $src ${bin}
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta.description = "age-encrypted secrets for NixOS";
|
||||||
|
}
|
||||||
7
pkgs/agenix/example/-leading-hyphen-filename.age
Normal file
7
pkgs/agenix/example/-leading-hyphen-filename.age
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
age-encryption.org/v1
|
||||||
|
-> ssh-ed25519 V3XmEA zirqdzZZ1E+sedBn7fbEHq4ntLEkokZ4GctarBBOHXY
|
||||||
|
Rvs5YHaAUeCZyNwPedubPcHClWYIuXXWA5zadXPWY6w
|
||||||
|
-> ssh-ed25519 KLPP8w BVp4rDkOYSQyn8oVeHFeinSqW+pdVtxBF9+5VM1yORY
|
||||||
|
bMwppAi8Nhz0328taU4AzUkTVyWtSLvFZG6c5W/Fs78
|
||||||
|
--- xCbqLhXAcOziO2wmbjTiSQfZvt5Rlsc4SCvF+iEzpQA
|
||||||
|
<EFBFBD>KB<EFBFBD><EFBFBD>/<2F>Z<><5A>r<EFBFBD>%<01><>4<EFBFBD><34><EFBFBD>Mq5<71><35>_<EFBFBD><5F>ݒ<><DD92><EFBFBD><EFBFBD><EFBFBD>11ܨqM;& <20><>Lr<4C><72><EFBFBD>f<EFBFBD><66><EFBFBD>]>N
|
||||||
7
pkgs/agenix/example/armored-secret.age
Normal file
7
pkgs/agenix/example/armored-secret.age
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFYzWG1FQSBpZkZW
|
||||||
|
aFpLNnJxc0VUMHRmZ2dZS0pjMGVENnR3OHd5K0RiT1RjRUhibFZBCnN5UG5vUjA3
|
||||||
|
SXpsNGtiVUw4T0tIVFo5Wkk5QS9NQlBndzVvektiQ0ozc0kKLS0tIGxyY1Q4dEZ1
|
||||||
|
VGZEanJyTFNta2JNRmpZb2FnK2JyS1hSVml1UGdMNWZKQXMKYla+wTXcRedyZoEb
|
||||||
|
LVWaSx49WoUTU0KBPJg9RArxaeC23GoCDzR/aM/1DvYU
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
9
pkgs/agenix/example/passwordfile-user1.age
Normal file
9
pkgs/agenix/example/passwordfile-user1.age
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
age-encryption.org/v1
|
||||||
|
-> ssh-ed25519 KLPP8w s1DYZRlZuSsyhmZCF1lFB+E9vB8bZ/+ZhBRlx8nprwE
|
||||||
|
nmYVCsVBrX2CFXXPU+D+bbkkIe/foofp+xoUrg9DHZw
|
||||||
|
-> ssh-ed25519 V3XmEA Pwv3oCwcY0DX8rY48UNfsj9RumWsn4dbgorYHCwObgI
|
||||||
|
FKxRYkL3JHtJxUwymWDF0rAtJ33BivDI6IfPsfumM90
|
||||||
|
-> V'v(/u$-grease em/Vgf 2qDuk
|
||||||
|
7I3iiQLPGi1COML9u/JeYkr7EqbSLoU
|
||||||
|
--- 57WJRigUGtmcObrssS3s4PvmR8wgh1AOC/ijJn1s3xI
|
||||||
|
<EFBFBD>'K<>ƷY&<26>7G<37>O<EFBFBD><4F>Fj<13>k<EFBFBD>X<EFBFBD><58>BnuJ<75><4A>:9<>(<><7F><EFBFBD>X<EFBFBD>#<23>A<EFBFBD><41><EFBFBD><EFBFBD>ڧj<DAA7>,<02>_<17><><EFBFBD>?<3F>Z<EFBFBD><17>v<EFBFBD><76>V<EFBFBD>96]oks~%<25>c <04>e^C<>%JQ5<51><H<>z}<7D>C<EFBFBD>,<2C>p<EFBFBD><70>*!W<><57><EFBFBD>A<EFBFBD><41><EFBFBD>҅dC<15>K)<10><>-<2D>y
|
||||||
BIN
pkgs/agenix/example/secret1.age
Normal file
BIN
pkgs/agenix/example/secret1.age
Normal file
Binary file not shown.
5
pkgs/agenix/example/secret2.age
Normal file
5
pkgs/agenix/example/secret2.age
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
age-encryption.org/v1
|
||||||
|
-> ssh-ed25519 V3XmEA OB4+1FbPhQ3r6iGksM7peWX5it8NClpXIq/o5nnP7GA
|
||||||
|
FmHVUj+A5i5+bDFgySQskmlvynnosJiWUTJmBRiNA9I
|
||||||
|
--- tP+3mFVtd7ogVu1Lkboh55zoi5a77Ht08Uc/QuIviv4
|
||||||
|
<EFBFBD><EFBFBD>X<EFBFBD>{<7B><>O<EFBFBD><4F><1F><04>tMXx<58>vӪ(<28>I<EFBFBD>myP<79><50><EFBFBD><EFBFBD>+3<>S3i
|
||||||
23
pkgs/agenix/example/secrets.nix
Normal file
23
pkgs/agenix/example/secrets.nix
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
let
|
||||||
|
user1 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL0idNvgGiucWgup/mP78zyC23uFjYq0evcWdjGQUaBH";
|
||||||
|
system1 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPJDyIr/FSz1cJdcoW69R+NrWzwGK/+3gJpqD1t8L2zE";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
"secret1.age".publicKeys = [
|
||||||
|
user1
|
||||||
|
system1
|
||||||
|
];
|
||||||
|
"secret2.age".publicKeys = [ user1 ];
|
||||||
|
"passwordfile-user1.age".publicKeys = [
|
||||||
|
user1
|
||||||
|
system1
|
||||||
|
];
|
||||||
|
"-leading-hyphen-filename.age".publicKeys = [
|
||||||
|
user1
|
||||||
|
system1
|
||||||
|
];
|
||||||
|
"armored-secret.age" = {
|
||||||
|
publicKeys = [ user1 ];
|
||||||
|
armor = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
7
pkgs/agenix/example_keys/system1
Normal file
7
pkgs/agenix/example_keys/system1
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
-----BEGIN OPENSSH PRIVATE KEY-----
|
||||||
|
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
|
||||||
|
QyNTUxOQAAACDyQ8iK/xUs9XCXXKFuvUfja1s8Biv/t4Caag9bfC9sxAAAAJA3yvCWN8rw
|
||||||
|
lgAAAAtzc2gtZWQyNTUxOQAAACDyQ8iK/xUs9XCXXKFuvUfja1s8Biv/t4Caag9bfC9sxA
|
||||||
|
AAAEA+J2V6AG1NriAIvnNKRauIEh1JE9HSdhvKJ68a5Fm0w/JDyIr/FSz1cJdcoW69R+Nr
|
||||||
|
WzwGK/+3gJpqD1t8L2zEAAAADHJ5YW50bUBob21lMQE=
|
||||||
|
-----END OPENSSH PRIVATE KEY-----
|
||||||
1
pkgs/agenix/example_keys/system1.pub
Normal file
1
pkgs/agenix/example_keys/system1.pub
Normal file
@@ -0,0 +1 @@
|
|||||||
|
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPJDyIr/FSz1cJdcoW69R+NrWzwGK/+3gJpqD1t8L2zE
|
||||||
7
pkgs/agenix/example_keys/user1
Normal file
7
pkgs/agenix/example_keys/user1
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
-----BEGIN OPENSSH PRIVATE KEY-----
|
||||||
|
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
|
||||||
|
QyNTUxOQAAACC9InTb4BornFoLqf5j+/M8gtt7hY2KtHr3FnYxkFGgRwAAAJC2JJ8htiSf
|
||||||
|
IQAAAAtzc2gtZWQyNTUxOQAAACC9InTb4BornFoLqf5j+/M8gtt7hY2KtHr3FnYxkFGgRw
|
||||||
|
AAAEDxt5gC/s53IxiKAjfZJVCCcFIsdeERdIgbYhLO719+Kb0idNvgGiucWgup/mP78zyC
|
||||||
|
23uFjYq0evcWdjGQUaBHAAAADHJ5YW50bUBob21lMQE=
|
||||||
|
-----END OPENSSH PRIVATE KEY-----
|
||||||
1
pkgs/agenix/example_keys/user1.pub
Normal file
1
pkgs/agenix/example_keys/user1.pub
Normal file
@@ -0,0 +1 @@
|
|||||||
|
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL0idNvgGiucWgup/mP78zyC23uFjYq0evcWdjGQUaBH
|
||||||
23
pkgs/agenix/update.sh
Executable file
23
pkgs/agenix/update.sh
Executable file
@@ -0,0 +1,23 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# All operations are done relative to root
|
||||||
|
GITROOT=$(git rev-parse --show-toplevel)
|
||||||
|
cd "$GITROOT"
|
||||||
|
|
||||||
|
REVISION=${1:-main}
|
||||||
|
|
||||||
|
TMPCLONE=$(mktemp -d)
|
||||||
|
trap "rm -rf ${TMPCLONE}" EXIT
|
||||||
|
|
||||||
|
git clone https://github.com/ryantm/agenix.git --revision="$REVISION" "$TMPCLONE" --depth=1
|
||||||
|
|
||||||
|
cp "${TMPCLONE}/pkgs/agenix.sh" pkgs/agenix/agenix.sh
|
||||||
|
cp "${TMPCLONE}/pkgs/agenix.nix" pkgs/agenix/default.nix
|
||||||
|
sed -i 's#../example#./example#' pkgs/agenix/default.nix
|
||||||
|
|
||||||
|
cp "${TMPCLONE}/example/"* pkgs/agenix/example/
|
||||||
|
cp "${TMPCLONE}/example_keys/"* pkgs/agenix/example_keys/
|
||||||
|
|
||||||
|
cp "${TMPCLONE}/modules/age.nix" m/module/agenix.nix
|
||||||
@@ -47,6 +47,7 @@ in
|
|||||||
inherit version;
|
inherit version;
|
||||||
src = uprofSrc;
|
src = uprofSrc;
|
||||||
dontStrip = true;
|
dontStrip = true;
|
||||||
|
strictDeps = true;
|
||||||
phases = [ "installPhase" "fixupPhase" ];
|
phases = [ "installPhase" "fixupPhase" ];
|
||||||
nativeBuildInputs = [ autoPatchelfHook radare2 ];
|
nativeBuildInputs = [ autoPatchelfHook radare2 ];
|
||||||
buildInputs = [
|
buildInputs = [
|
||||||
@@ -90,7 +91,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 ];
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -18,8 +18,9 @@ in stdenv.mkDerivation {
|
|||||||
set +x
|
set +x
|
||||||
'';
|
'';
|
||||||
hardeningDisable = [ "pic" "format" ];
|
hardeningDisable = [ "pic" "format" ];
|
||||||
|
strictDeps = true;
|
||||||
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__( \
|
||||||
17
pkgs/aocc/default.nix
Normal file
17
pkgs/aocc/default.nix
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
wrapCCWith,
|
||||||
|
aoccUnwrapped,
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
cc = aoccUnwrapped;
|
||||||
|
in
|
||||||
|
wrapCCWith {
|
||||||
|
inherit cc;
|
||||||
|
nixSupport.cc-cflags = [ "-isystem ${cc}/include" ];
|
||||||
|
|
||||||
|
extraBuildCommands = ''
|
||||||
|
wrap aocc $wrapper $ccPath/clang
|
||||||
|
wrap aocc++ $wrapper $ccPath/clang++
|
||||||
|
'';
|
||||||
|
}
|
||||||
52
pkgs/aocc/unwrapped.nix
Normal file
52
pkgs/aocc/unwrapped.nix
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
fetchurl,
|
||||||
|
stdenv,
|
||||||
|
autoPatchelfHook,
|
||||||
|
rocmPackages,
|
||||||
|
zlib,
|
||||||
|
libffi,
|
||||||
|
elfutils,
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
# in newer nixpkgs the runtime is hsakmt
|
||||||
|
rocmRuntime = if rocmPackages ? hsakmt then rocmPackages.hsakmt else rocmPackages.rocm-runtime;
|
||||||
|
in
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
pname = "aocc-compiler";
|
||||||
|
version = "5.0.0";
|
||||||
|
|
||||||
|
src = fetchurl {
|
||||||
|
url = "https://download.amd.com/developer/eula/aocc/aocc-5-0/aocc-compiler-5.0.0.tar";
|
||||||
|
sha256 = "sha256-lm+sLSx1np3m6WnBCtp6ezBsET9/HgfqN2gp7IY4Dao=";
|
||||||
|
};
|
||||||
|
|
||||||
|
nativeBuildInputs = [ autoPatchelfHook ];
|
||||||
|
buildInputs = [
|
||||||
|
elfutils
|
||||||
|
zlib
|
||||||
|
rocmRuntime
|
||||||
|
stdenv.cc.cc.lib
|
||||||
|
];
|
||||||
|
phases = [
|
||||||
|
"unpackPhase"
|
||||||
|
"installPhase"
|
||||||
|
"fixupPhase"
|
||||||
|
];
|
||||||
|
dontStrip = true;
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out
|
||||||
|
cp -a . $out/
|
||||||
|
|
||||||
|
ln -s ${lib.getLib libffi}/lib/libffi.so $out/lib/libffi.so.6
|
||||||
|
'';
|
||||||
|
|
||||||
|
passthru = {
|
||||||
|
inherit rocmRuntime;
|
||||||
|
isClang = true; # Needed for wrapCCWith
|
||||||
|
};
|
||||||
|
|
||||||
|
meta.mainProgram = "clang";
|
||||||
|
}
|
||||||
25
pkgs/babeltrace/default.nix
Normal file
25
pkgs/babeltrace/default.nix
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{ stdenv, lib, fetchurl, pkg-config, glib, libuuid, popt, elfutils, swig4, python3 }:
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
name = "babeltrace-1.5.8";
|
||||||
|
|
||||||
|
src = fetchurl {
|
||||||
|
url = "https://www.efficios.com/files/babeltrace/${name}.tar.bz2";
|
||||||
|
sha256 = "1hkg3phnamxfrhwzmiiirbhdgckzfkqwhajl0lmr1wfps7j47wcz";
|
||||||
|
};
|
||||||
|
|
||||||
|
nativeBuildInputs = [ pkg-config ];
|
||||||
|
buildInputs = [ glib libuuid popt elfutils swig4 python3 ];
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
description = "Command-line tool and library to read and convert LTTng tracefiles";
|
||||||
|
homepage = "https://www.efficios.com/babeltrace";
|
||||||
|
license = licenses.mit;
|
||||||
|
platforms = platforms.linux;
|
||||||
|
maintainers = [ maintainers.bjornfor ];
|
||||||
|
};
|
||||||
|
|
||||||
|
configureFlags = [
|
||||||
|
"--enable-python-bindings"
|
||||||
|
];
|
||||||
|
}
|
||||||
34
pkgs/babeltrace2/default.nix
Normal file
34
pkgs/babeltrace2/default.nix
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
stdenv
|
||||||
|
, fetchurl
|
||||||
|
, pkg-config
|
||||||
|
, glib
|
||||||
|
, libuuid
|
||||||
|
, popt
|
||||||
|
, elfutils
|
||||||
|
, python3
|
||||||
|
, swig4
|
||||||
|
, ncurses
|
||||||
|
, breakpointHook
|
||||||
|
}:
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
pname = "babeltrace2";
|
||||||
|
version = "2.0.3";
|
||||||
|
|
||||||
|
src = fetchurl {
|
||||||
|
url = "https://www.efficios.com/files/babeltrace/${pname}-${version}.tar.bz2";
|
||||||
|
sha256 = "1804pyq7fz6rkcz4r1abkkn0pfnss13m6fd8if32s42l4lajadm5";
|
||||||
|
};
|
||||||
|
|
||||||
|
enableParallelBuilding = true;
|
||||||
|
nativeBuildInputs = [ pkg-config ];
|
||||||
|
buildInputs = [ glib libuuid popt elfutils python3 swig4 ncurses breakpointHook ];
|
||||||
|
hardeningDisable = [ "all" ];
|
||||||
|
|
||||||
|
configureFlags = [
|
||||||
|
"--enable-python-plugins"
|
||||||
|
"--enable-python-bindings"
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
||||||
@@ -59,6 +59,7 @@ stdenv.mkDerivation rec {
|
|||||||
];
|
];
|
||||||
hardeningDisable = [ "all" ];
|
hardeningDisable = [ "all" ];
|
||||||
dontStrip = true;
|
dontStrip = true;
|
||||||
|
strictDeps = true;
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
homepage = "https://gitlab.pm.bsc.es/rarias/bench6";
|
homepage = "https://gitlab.pm.bsc.es/rarias/bench6";
|
||||||
|
|||||||
@@ -16,6 +16,8 @@ stdenv.mkDerivation {
|
|||||||
};
|
};
|
||||||
nativeBuildInputs = [ cmake ];
|
nativeBuildInputs = [ cmake ];
|
||||||
|
|
||||||
|
strictDeps = true;
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
homepage = "https://github.com/rodarima/bigotes";
|
homepage = "https://github.com/rodarima/bigotes";
|
||||||
description = "Versatile benchmark tool";
|
description = "Versatile benchmark tool";
|
||||||
|
|||||||
54
pkgs/clsync/default.nix
Normal file
54
pkgs/clsync/default.nix
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
{ stdenv
|
||||||
|
, fetchFromGitHub
|
||||||
|
, libcap
|
||||||
|
, libcgroup
|
||||||
|
, libmhash
|
||||||
|
, doxygen
|
||||||
|
, graphviz
|
||||||
|
, autoreconfHook
|
||||||
|
, pkg-config
|
||||||
|
, glib
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
version = "0.4.4";
|
||||||
|
|
||||||
|
in stdenv.mkDerivation {
|
||||||
|
pname = "clsync";
|
||||||
|
inherit version;
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
repo = "clsync";
|
||||||
|
owner = "clsync";
|
||||||
|
rev = "v${version}";
|
||||||
|
sha256 = "0sdiyfwp0iqr6l1sirm51pirzmhi4jzgky5pzfj24nn71q3fwqgz";
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = [ "out" "dev" ];
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
autoreconfHook
|
||||||
|
libcap
|
||||||
|
libcgroup
|
||||||
|
libmhash
|
||||||
|
doxygen
|
||||||
|
graphviz
|
||||||
|
pkg-config
|
||||||
|
glib
|
||||||
|
];
|
||||||
|
|
||||||
|
preConfigure = ''
|
||||||
|
./configure --help
|
||||||
|
'';
|
||||||
|
|
||||||
|
enableParallelBuilding = true;
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
description = "File live sync daemon based on inotify/kqueue/bsm (Linux, FreeBSD), written in GNU C";
|
||||||
|
homepage = "https://github.com/clsync/clsync";
|
||||||
|
license = licenses.gpl3Plus;
|
||||||
|
maintainers = [ ];
|
||||||
|
platforms = platforms.linux;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
51
pkgs/cn6/default.nix
Normal file
51
pkgs/cn6/default.nix
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
{
|
||||||
|
stdenv
|
||||||
|
, lib
|
||||||
|
, babeltrace2
|
||||||
|
, pkg-config
|
||||||
|
, uthash
|
||||||
|
, enableTest ? false
|
||||||
|
, mpi ? null
|
||||||
|
, clangOmpss2 ? null
|
||||||
|
, tampi ? null
|
||||||
|
}:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
assert (enableTest -> (mpi != null));
|
||||||
|
assert (enableTest -> (clangOmpss2 != null));
|
||||||
|
assert (enableTest -> (tampi != null));
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
pname = "cn6";
|
||||||
|
version = "${src.shortRev}";
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
babeltrace2
|
||||||
|
pkg-config
|
||||||
|
uthash
|
||||||
|
mpi
|
||||||
|
] ++ optionals (enableTest) [ mpi clangOmpss2 tampi ];
|
||||||
|
|
||||||
|
src = builtins.fetchGit {
|
||||||
|
url = "ssh://git@bscpm04.bsc.es/rarias/cn6.git";
|
||||||
|
ref = "master";
|
||||||
|
rev = "c72c3b66b720c2a33950f536fc819051c8f20a69";
|
||||||
|
};
|
||||||
|
|
||||||
|
makeFlags = [ "PREFIX=$(out)" ];
|
||||||
|
|
||||||
|
postBuild = optionalString (enableTest) ''
|
||||||
|
(
|
||||||
|
cd test
|
||||||
|
make timediff timediff_mpi
|
||||||
|
)
|
||||||
|
'';
|
||||||
|
|
||||||
|
postInstall = optionalString (enableTest) ''
|
||||||
|
(
|
||||||
|
cd test
|
||||||
|
cp timediff timediff_mpi sync-err.sh $out/bin/
|
||||||
|
)
|
||||||
|
'';
|
||||||
|
}
|
||||||
21
pkgs/cpuid/default.nix
Normal file
21
pkgs/cpuid/default.nix
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
stdenv
|
||||||
|
, perl # For the pod2man command
|
||||||
|
}:
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
version = "20201006";
|
||||||
|
pname = "cpuid";
|
||||||
|
|
||||||
|
buildInputs = [ perl ];
|
||||||
|
|
||||||
|
# Replace /usr install directory for $out
|
||||||
|
postPatch = ''
|
||||||
|
sed -i "s@/usr@$out@g" Makefile
|
||||||
|
'';
|
||||||
|
|
||||||
|
src = builtins.fetchTarball {
|
||||||
|
url = "http://www.etallen.com/cpuid/${pname}-${version}.src.tar.gz";
|
||||||
|
sha256 = "04qhs938gs1kjxpsrnfy6lbsircsprfyh4db62s5cf83a1nrwn9w";
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
stdenv
|
stdenv
|
||||||
|
, lib
|
||||||
, cudatoolkit
|
, cudatoolkit
|
||||||
, cudaPackages
|
, cudaPackages
|
||||||
, autoAddDriverRunpath
|
, autoAddDriverRunpath
|
||||||
@@ -9,11 +10,14 @@
|
|||||||
stdenv.mkDerivation (finalAttrs: {
|
stdenv.mkDerivation (finalAttrs: {
|
||||||
name = "cudainfo";
|
name = "cudainfo";
|
||||||
src = ./.;
|
src = ./.;
|
||||||
buildInputs = [
|
strictDeps = true;
|
||||||
|
nativeBuildInputs = [
|
||||||
cudatoolkit # Required for nvcc
|
cudatoolkit # Required for nvcc
|
||||||
cudaPackages.cuda_cudart.static # Required for -lcudart_static
|
|
||||||
autoAddDriverRunpath
|
autoAddDriverRunpath
|
||||||
];
|
];
|
||||||
|
buildInputs = [
|
||||||
|
(lib.getOutput "static" cudaPackages.cuda_cudart) # Required for -lcudart_static
|
||||||
|
];
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
mkdir -p $out/bin
|
mkdir -p $out/bin
|
||||||
cp -a cudainfo $out/bin
|
cp -a cudainfo $out/bin
|
||||||
@@ -22,6 +26,7 @@ stdenv.mkDerivation (finalAttrs: {
|
|||||||
name = "cudainfo-test";
|
name = "cudainfo-test";
|
||||||
requiredSystemFeatures = [ "cuda" ];
|
requiredSystemFeatures = [ "cuda" ];
|
||||||
dontBuild = true;
|
dontBuild = true;
|
||||||
|
strictDeps = true;
|
||||||
nativeCheckInputs = [
|
nativeCheckInputs = [
|
||||||
finalAttrs.finalPackage # The cudainfo package from above
|
finalAttrs.finalPackage # The cudainfo package from above
|
||||||
strace # When it fails, it will show the trace
|
strace # When it fails, it will show the trace
|
||||||
@@ -40,4 +45,9 @@ stdenv.mkDerivation (finalAttrs: {
|
|||||||
'';
|
'';
|
||||||
installPhase = "touch $out";
|
installPhase = "touch $out";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
platforms = [ "x86_64-linux" ];
|
||||||
|
maintainers = with lib.maintainers.bsc; [ rarias ];
|
||||||
|
};
|
||||||
})
|
})
|
||||||
|
|||||||
25
pkgs/dummy/default.nix
Normal file
25
pkgs/dummy/default.nix
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
stdenv
|
||||||
|
}:
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
name = "dummy";
|
||||||
|
|
||||||
|
src = null;
|
||||||
|
dontUnpack = true;
|
||||||
|
dontBuild = true;
|
||||||
|
|
||||||
|
programPath = "/bin/dummy";
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out/bin
|
||||||
|
|
||||||
|
cat > $out/bin/dummy <<EOF
|
||||||
|
#!/bin/sh
|
||||||
|
echo Hello worlda!
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
chmod +x $out/bin/dummy
|
||||||
|
'';
|
||||||
|
}
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
#, python3Packages
|
#, python3Packages
|
||||||
, installShellFiles
|
, installShellFiles
|
||||||
, symlinkJoin
|
, symlinkJoin
|
||||||
, enablePapi ? stdenv.hostPlatform == stdenv.buildPlatform # Disabled when cross-compiling
|
, enablePapi ? true
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
|
|||||||
58
pkgs/fftw/default.nix
Normal file
58
pkgs/fftw/default.nix
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
{ fetchurl, stdenv, lib, llvmPackages ? null, precision ? "double", perl, mpi }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
assert stdenv.cc.isClang -> llvmPackages != null;
|
||||||
|
assert elem precision [ "single" "double" "long-double" "quad-precision" ];
|
||||||
|
|
||||||
|
let
|
||||||
|
version = "3.3.8";
|
||||||
|
withDoc = stdenv.cc.isGNU;
|
||||||
|
in
|
||||||
|
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
name = "fftw-${precision}-${version}";
|
||||||
|
|
||||||
|
src = fetchurl {
|
||||||
|
urls = [
|
||||||
|
"http://fftw.org/fftw-${version}.tar.gz"
|
||||||
|
"ftp://ftp.fftw.org/pub/fftw/fftw-${version}.tar.gz"
|
||||||
|
];
|
||||||
|
sha256 = "00z3k8fq561wq2khssqg0kallk0504dzlx989x3vvicjdqpjc4v1";
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = [ "out" "dev" "man" ]
|
||||||
|
++ optional withDoc "info"; # it's dev-doc only
|
||||||
|
outputBin = "dev"; # fftw-wisdom
|
||||||
|
|
||||||
|
buildInputs = [ mpi ]
|
||||||
|
++ lib.optionals stdenv.cc.isClang [
|
||||||
|
# TODO: This may mismatch the LLVM version sin the stdenv, see #79818.
|
||||||
|
llvmPackages.openmp
|
||||||
|
];
|
||||||
|
|
||||||
|
configureFlags =
|
||||||
|
[ "--enable-shared"
|
||||||
|
"--enable-threads"
|
||||||
|
"--enable-mpi"
|
||||||
|
"--disable-openmp"
|
||||||
|
]
|
||||||
|
++ optional (precision != "double") "--enable-${precision}"
|
||||||
|
# all x86_64 have sse2
|
||||||
|
# however, not all float sizes fit
|
||||||
|
++ optional (stdenv.isx86_64 && (precision == "single" || precision == "double") ) "--enable-sse2"
|
||||||
|
# doc generation causes Fortran wrapper generation which hard-codes gcc
|
||||||
|
++ optional (!withDoc) "--disable-doc";
|
||||||
|
|
||||||
|
enableParallelBuilding = true;
|
||||||
|
|
||||||
|
checkInputs = [ perl ];
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
description = "Fastest Fourier Transform in the West library";
|
||||||
|
homepage = "http://www.fftw.org/";
|
||||||
|
license = licenses.gpl2Plus;
|
||||||
|
maintainers = [ maintainers.spwhitt ];
|
||||||
|
platforms = platforms.unix;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -9,7 +9,6 @@
|
|||||||
, automake
|
, automake
|
||||||
, libtool
|
, libtool
|
||||||
, mpi
|
, mpi
|
||||||
, rsync
|
|
||||||
, gfortran
|
, gfortran
|
||||||
}:
|
}:
|
||||||
|
|
||||||
@@ -34,6 +33,7 @@ stdenv.mkDerivation rec {
|
|||||||
};
|
};
|
||||||
|
|
||||||
enableParallelBuilding = true;
|
enableParallelBuilding = true;
|
||||||
|
strictDeps = true;
|
||||||
|
|
||||||
patches = [ ./rdma-core.patch ./max-mem.patch ];
|
patches = [ ./rdma-core.patch ./max-mem.patch ];
|
||||||
|
|
||||||
@@ -44,13 +44,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 +71,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
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
From 1454525f70b43a6957b7c9e1870e997368787da3 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Samuel Dionne-Riel <samuel@dionne-riel.com>
|
||||||
|
Date: Fri, 8 Nov 2019 21:59:21 -0500
|
||||||
|
Subject: [PATCH] Fix cross-compilation by looking for `ar`.
|
||||||
|
|
||||||
|
---
|
||||||
|
Makefile.am | 2 +-
|
||||||
|
configure.ac | 2 ++
|
||||||
|
2 files changed, 3 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/Makefile.am b/Makefile.am
|
||||||
|
index d18c49b8..b1b53338 100644
|
||||||
|
--- a/Makefile.am
|
||||||
|
+++ b/Makefile.am
|
||||||
|
@@ -494,7 +494,7 @@ CCC=@CXX@
|
||||||
|
# INSTALL_INFO
|
||||||
|
# LN_S
|
||||||
|
|
||||||
|
-AR=ar
|
||||||
|
+AR=@AR@
|
||||||
|
ETAGS=etags
|
||||||
|
ETAGSFLAGS=
|
||||||
|
# Flag that tells etags to assume C++.
|
||||||
|
diff --git a/configure.ac b/configure.ac
|
||||||
|
index 28e75f17..2449b9f5 100644
|
||||||
|
--- a/configure.ac
|
||||||
|
+++ b/configure.ac
|
||||||
|
@@ -37,6 +37,7 @@ AC_CONFIG_AUX_DIR([build-aux])
|
||||||
|
|
||||||
|
AC_CONFIG_HEADERS([src/include/config.h:src/include/config.hin])
|
||||||
|
AC_CONFIG_SRCDIR([src/roff/groff/groff.cpp])
|
||||||
|
+AC_CONFIG_MACRO_DIR([m4])
|
||||||
|
|
||||||
|
AC_USE_SYSTEM_EXTENSIONS
|
||||||
|
|
||||||
|
@@ -72,6 +73,7 @@ GROFF_DOC_CHECK
|
||||||
|
GROFF_MAKEINFO
|
||||||
|
GROFF_TEXI2DVI
|
||||||
|
AC_PROG_RANLIB
|
||||||
|
+AC_CHECK_TOOL([AR], [ar], [ar])
|
||||||
|
GROFF_INSTALL_SH
|
||||||
|
GROFF_INSTALL_INFO
|
||||||
|
AC_PROG_INSTALL
|
||||||
|
--
|
||||||
|
2.23.0
|
||||||
|
|
||||||
127
pkgs/groff/default.nix
Normal file
127
pkgs/groff/default.nix
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
{ stdenv, lib, fetchurl, perl
|
||||||
|
, ghostscript #for postscript and html output
|
||||||
|
, psutils, netpbm #for html output
|
||||||
|
, buildPackages
|
||||||
|
, autoreconfHook
|
||||||
|
, pkg-config
|
||||||
|
, texinfo
|
||||||
|
}:
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
pname = "groff";
|
||||||
|
version = "1.22.4";
|
||||||
|
|
||||||
|
src = fetchurl {
|
||||||
|
url = "mirror://gnu/groff/${pname}-${version}.tar.gz";
|
||||||
|
sha256 = "14q2mldnr1vx0l9lqp9v2f6iww24gj28iyh4j2211hyynx67p3p7";
|
||||||
|
};
|
||||||
|
|
||||||
|
enableParallelBuilding = false;
|
||||||
|
|
||||||
|
patches = [
|
||||||
|
./0001-Fix-cross-compilation-by-looking-for-ar.patch
|
||||||
|
];
|
||||||
|
|
||||||
|
postPatch = lib.optionalString (psutils != null) ''
|
||||||
|
substituteInPlace src/preproc/html/pre-html.cpp \
|
||||||
|
--replace "psselect" "${psutils}/bin/psselect"
|
||||||
|
'' + lib.optionalString (netpbm != null) ''
|
||||||
|
substituteInPlace src/preproc/html/pre-html.cpp \
|
||||||
|
--replace "pnmcut" "${lib.getBin netpbm}/bin/pnmcut" \
|
||||||
|
--replace "pnmcrop" "${lib.getBin netpbm}/bin/pnmcrop" \
|
||||||
|
--replace "pnmtopng" "${lib.getBin netpbm}/bin/pnmtopng"
|
||||||
|
substituteInPlace tmac/www.tmac.in \
|
||||||
|
--replace "pnmcrop" "${lib.getBin netpbm}/bin/pnmcrop" \
|
||||||
|
--replace "pngtopnm" "${lib.getBin netpbm}/bin/pngtopnm" \
|
||||||
|
--replace "@PNMTOPS_NOSETPAGE@" "${lib.getBin netpbm}/bin/pnmtops -nosetpage"
|
||||||
|
'';
|
||||||
|
|
||||||
|
buildInputs = [ ghostscript psutils netpbm perl ];
|
||||||
|
nativeBuildInputs = [ autoreconfHook pkg-config texinfo ];
|
||||||
|
|
||||||
|
# Builds running without a chroot environment may detect the presence
|
||||||
|
# of /usr/X11 in the host system, leading to an impure build of the
|
||||||
|
# package. To avoid this issue, X11 support is explicitly disabled.
|
||||||
|
# Note: If we ever want to *enable* X11 support, then we'll probably
|
||||||
|
# have to pass "--with-appresdir", too.
|
||||||
|
configureFlags = [
|
||||||
|
"--without-x"
|
||||||
|
] ++ lib.optionals (ghostscript != null) [
|
||||||
|
"--with-gs=${ghostscript}/bin/gs"
|
||||||
|
] ++ lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [
|
||||||
|
"ac_cv_path_PERL=${buildPackages.perl}/bin/perl"
|
||||||
|
];
|
||||||
|
|
||||||
|
makeFlags = lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [
|
||||||
|
# Trick to get the build system find the proper 'native' groff
|
||||||
|
# http://www.mail-archive.com/bug-groff@gnu.org/msg01335.html
|
||||||
|
"GROFF_BIN_PATH=${buildPackages.groff}/bin"
|
||||||
|
"GROFFBIN=${buildPackages.groff}/bin/groff"
|
||||||
|
];
|
||||||
|
|
||||||
|
doCheck = true;
|
||||||
|
|
||||||
|
postInstall = ''
|
||||||
|
for f in 'man.local' 'mdoc.local'; do
|
||||||
|
cat '${./site.tmac}' >>"$out/share/groff/site-tmac/$f"
|
||||||
|
done
|
||||||
|
|
||||||
|
moveToOutput bin/gropdf $out
|
||||||
|
moveToOutput bin/pdfmom $out
|
||||||
|
moveToOutput bin/roff2text $out
|
||||||
|
moveToOutput bin/roff2pdf $out
|
||||||
|
moveToOutput bin/roff2ps $out
|
||||||
|
moveToOutput bin/roff2dvi $out
|
||||||
|
moveToOutput bin/roff2ps $out
|
||||||
|
moveToOutput bin/roff2html $out
|
||||||
|
moveToOutput bin/glilypond $out
|
||||||
|
moveToOutput bin/mmroff $out
|
||||||
|
moveToOutput bin/roff2x $out
|
||||||
|
moveToOutput bin/afmtodit $out
|
||||||
|
moveToOutput bin/gperl $out
|
||||||
|
moveToOutput bin/chem $out
|
||||||
|
moveToOutput share/groff/${version}/font/devpdf $out
|
||||||
|
|
||||||
|
# idk if this is needed, but Fedora does it
|
||||||
|
moveToOutput share/groff/${version}/tmac/pdf.tmac $out
|
||||||
|
|
||||||
|
moveToOutput bin/gpinyin $out
|
||||||
|
moveToOutput lib/groff/gpinyin $out
|
||||||
|
substituteInPlace $out/bin/gpinyin \
|
||||||
|
--replace $out/lib/groff/gpinyin $out/lib/groff/gpinyin
|
||||||
|
|
||||||
|
moveToOutput bin/groffer $out
|
||||||
|
moveToOutput lib/groff/groffer $out
|
||||||
|
substituteInPlace $out/bin/groffer \
|
||||||
|
--replace $out/lib/groff/groffer $out/lib/groff/groffer
|
||||||
|
|
||||||
|
moveToOutput bin/grog $out
|
||||||
|
moveToOutput lib/groff/grog $out
|
||||||
|
substituteInPlace $out/bin/grog \
|
||||||
|
--replace $out/lib/groff/grog $out/lib/groff/grog
|
||||||
|
|
||||||
|
'' + lib.optionalString (stdenv.buildPlatform != stdenv.hostPlatform) ''
|
||||||
|
find $out/ -type f -print0 | xargs --null sed -i 's|${buildPackages.perl}|${perl}|'
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
homepage = "https://www.gnu.org/software/groff/";
|
||||||
|
description = "GNU Troff, a typesetting package that reads plain text and produces formatted output";
|
||||||
|
license = licenses.gpl3Plus;
|
||||||
|
platforms = platforms.all;
|
||||||
|
maintainers = with maintainers; [ pSub ];
|
||||||
|
|
||||||
|
longDescription = ''
|
||||||
|
groff is the GNU implementation of troff, a document formatting
|
||||||
|
system. Included in this release are implementations of troff,
|
||||||
|
pic, eqn, tbl, grn, refer, -man, -mdoc, -mom, and -ms macros,
|
||||||
|
and drivers for PostScript, TeX dvi format, HP LaserJet 4
|
||||||
|
printers, Canon CAPSL printers, HTML and XHTML format (beta
|
||||||
|
status), and typewriter-like devices. Also included is a
|
||||||
|
modified version of the Berkeley -me macros, the enhanced
|
||||||
|
version gxditview of the X11 xditview previewer, and an
|
||||||
|
implementation of the -mm macros.
|
||||||
|
'';
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
16
pkgs/groff/site.tmac
Normal file
16
pkgs/groff/site.tmac
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
.
|
||||||
|
.if n \{\
|
||||||
|
. \" Character translations for non-keyboard
|
||||||
|
. \" characters - to make them searchable
|
||||||
|
. if '\*[.T]'utf8' \{\
|
||||||
|
. char \- \N'45'
|
||||||
|
. char - \N'45'
|
||||||
|
. char ' \N'39'
|
||||||
|
. char \' \N'39'
|
||||||
|
. \}
|
||||||
|
.
|
||||||
|
. \" Shut off SGR by default (groff colors)
|
||||||
|
. \" Require GROFF_SGR envvar defined to turn it on
|
||||||
|
. if '\V[GROFF_SGR]'' \
|
||||||
|
. output x X tty: sgr 0
|
||||||
|
.\}
|
||||||
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
|
||||||
70
pkgs/hwloc/1.11.6/default.nix
Normal file
70
pkgs/hwloc/1.11.6/default.nix
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
{ stdenv, lib, fetchurl, pkg-config, expat, ncurses
|
||||||
|
, pciutils, numactl }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
name = "hwloc-1.11.6";
|
||||||
|
|
||||||
|
src = fetchurl {
|
||||||
|
url = "http://www.open-mpi.org/software/hwloc/v1.11/downloads/${name}.tar.bz2";
|
||||||
|
sha256 = "1yl7dm2qplwmnidd712zy12qfvxk28k8ccs694n42ybwdjwzg1bn";
|
||||||
|
};
|
||||||
|
|
||||||
|
nativeBuildInputs = [ pkg-config ];
|
||||||
|
|
||||||
|
# Filter out `null' inputs. This allows users to `.override' the
|
||||||
|
# derivation and set optional dependencies to `null'.
|
||||||
|
buildInputs = filter (x: x != null)
|
||||||
|
([ expat ncurses ]
|
||||||
|
++ (optionals stdenv.isLinux [ numactl ]));
|
||||||
|
|
||||||
|
propagatedBuildInputs =
|
||||||
|
# Since `libpci' appears in `hwloc.pc', it must be propagated.
|
||||||
|
optional stdenv.isLinux pciutils;
|
||||||
|
|
||||||
|
enableParallelBuilding = true;
|
||||||
|
|
||||||
|
postInstall =
|
||||||
|
optionalString (stdenv.isLinux && numactl != null)
|
||||||
|
'' if [ -d "${numactl}/lib64" ]
|
||||||
|
then
|
||||||
|
numalibdir="${numactl}/lib64"
|
||||||
|
else
|
||||||
|
numalibdir="${numactl}/lib"
|
||||||
|
test -d "$numalibdir"
|
||||||
|
fi
|
||||||
|
|
||||||
|
sed -i "$out/lib/libhwloc.la" \
|
||||||
|
-e "s|-lnuma|-L$numalibdir -lnuma|g"
|
||||||
|
'';
|
||||||
|
|
||||||
|
# Checks disabled because they're impure (hardware dependent) and
|
||||||
|
# fail on some build machines.
|
||||||
|
doCheck = false;
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
description = "Portable abstraction of hierarchical architectures for high-performance computing";
|
||||||
|
longDescription = ''
|
||||||
|
hwloc provides a portable abstraction (across OS,
|
||||||
|
versions, architectures, ...) of the hierarchical topology of
|
||||||
|
modern architectures, including NUMA memory nodes, sockets,
|
||||||
|
shared caches, cores and simultaneous multithreading. It also
|
||||||
|
gathers various attributes such as cache and memory
|
||||||
|
information. It primarily aims at helping high-performance
|
||||||
|
computing applications with gathering information about the
|
||||||
|
hardware so as to exploit it accordingly and efficiently.
|
||||||
|
|
||||||
|
hwloc may display the topology in multiple convenient
|
||||||
|
formats. It also offers a powerful programming interface to
|
||||||
|
gather information about the hardware, bind processes, and much
|
||||||
|
more.
|
||||||
|
'';
|
||||||
|
|
||||||
|
# http://www.open-mpi.org/projects/hwloc/license.php
|
||||||
|
license = licenses.bsd3;
|
||||||
|
homepage = http://www.open-mpi.org/projects/hwloc/;
|
||||||
|
maintainers = [ ];
|
||||||
|
platforms = platforms.all;
|
||||||
|
};
|
||||||
|
}
|
||||||
40
pkgs/intel-compiler/default.nix
Normal file
40
pkgs/intel-compiler/default.nix
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
stdenv
|
||||||
|
, gcc
|
||||||
|
, iccUnwrapped
|
||||||
|
, wrapCCWith
|
||||||
|
, intelLicense
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
targetConfig = stdenv.targetPlatform.config;
|
||||||
|
inherit gcc;
|
||||||
|
in wrapCCWith rec {
|
||||||
|
cc = iccUnwrapped;
|
||||||
|
extraBuildCommands = ''
|
||||||
|
echo "-B${gcc.cc}/lib/gcc/${targetConfig}/${gcc.version}" >> $out/nix-support/cc-cflags
|
||||||
|
echo "-isystem ${iccUnwrapped}/include" >> $out/nix-support/cc-cflags
|
||||||
|
echo "-isystem ${iccUnwrapped}/include/intel64" >> $out/nix-support/cc-cflags
|
||||||
|
echo "-L${gcc.cc}/lib/gcc/${targetConfig}/${gcc.version}" >> $out/nix-support/cc-ldflags
|
||||||
|
echo "-L${gcc.cc.lib}/lib" >> $out/nix-support/cc-ldflags
|
||||||
|
|
||||||
|
cat "${iccUnwrapped}/nix-support/propagated-build-inputs" >> \
|
||||||
|
$out/nix-support/propagated-build-inputs
|
||||||
|
|
||||||
|
echo "export INTEL_LICENSE_FILE=${intelLicense}" \
|
||||||
|
>> $out/nix-support/setup-hook
|
||||||
|
|
||||||
|
# Create the wrappers for icc and icpc
|
||||||
|
if [ -e $ccPath/icc ]; then
|
||||||
|
wrap icc $wrapper $ccPath/icc
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -e $ccPath/icpc ]; then
|
||||||
|
wrap icpc $wrapper $ccPath/icpc
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -e $ccPath/ifort ]; then
|
||||||
|
wrap ifort $wrapper $ccPath/ifort
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
}
|
||||||
71
pkgs/intel-compiler/icc2020.nix
Normal file
71
pkgs/intel-compiler/icc2020.nix
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
{ stdenv
|
||||||
|
, lib
|
||||||
|
, fetchurl
|
||||||
|
, rpmextract
|
||||||
|
, autoPatchelfHook
|
||||||
|
, gcc
|
||||||
|
, intel-mpi
|
||||||
|
}:
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
version = "${year}.${v_a}.${v_b}";
|
||||||
|
name = "intel-compiler-${version}";
|
||||||
|
|
||||||
|
passthru = {
|
||||||
|
CC = "icc";
|
||||||
|
CXX = "icpc";
|
||||||
|
};
|
||||||
|
|
||||||
|
# From Arch Linux PKGBUILD
|
||||||
|
dir_nr="17114";
|
||||||
|
year="2020";
|
||||||
|
v_a="4";
|
||||||
|
v_b="304";
|
||||||
|
update="4";
|
||||||
|
composer_xe_dir="compilers_and_libraries_${year}.${v_a}.${v_b}";
|
||||||
|
tgz="parallel_studio_xe_2020_update${update}_professional_edition.tgz";
|
||||||
|
|
||||||
|
src = fetchurl {
|
||||||
|
url = "https://registrationcenter-download.intel.com/akdlm/irc_nas/tec/${dir_nr}/${tgz}";
|
||||||
|
sha256 = "1rn9kk5bjj0jfv853b09dxrx7kzvv8dlyzw3hl9ijx9mqr09lrzr";
|
||||||
|
};
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
rpmextract
|
||||||
|
autoPatchelfHook
|
||||||
|
gcc.cc.lib
|
||||||
|
gcc
|
||||||
|
intel-mpi
|
||||||
|
];
|
||||||
|
|
||||||
|
# The gcc package is required for building other programs
|
||||||
|
propagatedBuildInputs = [ gcc ];
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
pwd
|
||||||
|
ls -l rpm
|
||||||
|
rpmextract rpm/intel-icc-*.rpm
|
||||||
|
rpmextract rpm/intel-comp-*.rpm
|
||||||
|
rpmextract rpm/intel-c-comp-*.rpm
|
||||||
|
rpmextract rpm/intel-openmp*.rpm
|
||||||
|
rpmextract rpm/intel-ifort*.rpm
|
||||||
|
|
||||||
|
mkdir -p $out/{bin,lib,include}
|
||||||
|
|
||||||
|
pushd ./opt/intel/${composer_xe_dir}/linux/
|
||||||
|
cp -a bin/intel64/* $out/bin/
|
||||||
|
cp -a compiler/include/* $out/include/
|
||||||
|
cp -a compiler/lib/intel64_lin/* $out/lib/
|
||||||
|
ln -s lib $out/lib_lin
|
||||||
|
rm $out/lib/*.dbg
|
||||||
|
popd
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
homepage = "https://www.intel.com/content/www/us/en/developer/tools/overview.html";
|
||||||
|
description = "Intel compiler";
|
||||||
|
maintainers = with lib.maintainers.bsc; [ rarias ];
|
||||||
|
platforms = lib.platforms.linux;
|
||||||
|
license = lib.licenses.unfree;
|
||||||
|
};
|
||||||
|
}
|
||||||
156
pkgs/intel-compiler/icc2021.nix
Normal file
156
pkgs/intel-compiler/icc2021.nix
Normal file
@@ -0,0 +1,156 @@
|
|||||||
|
{ stdenv
|
||||||
|
, lib
|
||||||
|
, fetchurl
|
||||||
|
, dpkg
|
||||||
|
, rsync
|
||||||
|
, libffi
|
||||||
|
, libelf
|
||||||
|
, libxml2
|
||||||
|
, hwloc
|
||||||
|
, autoPatchelfHook
|
||||||
|
}:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
|
||||||
|
getsrc = url: sha256: fetchurl { inherit url sha256; };
|
||||||
|
|
||||||
|
version = "2021.2.0";
|
||||||
|
_debpkgrel = "610";
|
||||||
|
tbbrel = "357";
|
||||||
|
|
||||||
|
# Shorhands
|
||||||
|
main = "intel-oneapi-dpcpp-cpp";
|
||||||
|
compiler = "intel-oneapi-compiler-dpcpp-cpp";
|
||||||
|
shared = "intel-oneapi-compiler-shared";
|
||||||
|
openmp = "intel-oneapi-openmp";
|
||||||
|
tbb = "intel-oneapi-tbb";
|
||||||
|
|
||||||
|
# From Arch Linux PKGBUILD:
|
||||||
|
# https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=intel-oneapi-compiler-dpcpp-cpp
|
||||||
|
debs = [
|
||||||
|
# From intel-oneapi-compiler-dpcpp-cpp
|
||||||
|
"${main}-${version}-${version}-${_debpkgrel}_amd64.deb"
|
||||||
|
"${compiler}-common-${version}-${version}-${_debpkgrel}_all.deb"
|
||||||
|
"${compiler}-runtime-${version}-${version}-${_debpkgrel}_amd64.deb"
|
||||||
|
|
||||||
|
# From intel-oneapi-compiler-shared
|
||||||
|
"${shared}-${version}-${version}-${_debpkgrel}_amd64.deb"
|
||||||
|
"${shared}-runtime-${version}-${version}-${_debpkgrel}_amd64.deb"
|
||||||
|
"${shared}-common-${version}-${version}-${_debpkgrel}_all.deb"
|
||||||
|
"${shared}-common-runtime-${version}-${version}-${_debpkgrel}_all.deb"
|
||||||
|
"${compiler}-classic-fortran-shared-runtime-${version}-${version}-${_debpkgrel}_amd64.deb"
|
||||||
|
|
||||||
|
# From intel-oneapi-openmp
|
||||||
|
"${openmp}-${version}-${version}-${_debpkgrel}_amd64.deb"
|
||||||
|
"${openmp}-common-${version}-${version}-${_debpkgrel}_all.deb"
|
||||||
|
|
||||||
|
# From intel-oneapi-tbb
|
||||||
|
"${tbb}-${version}-${version}-${tbbrel}_amd64.deb"
|
||||||
|
"${tbb}-devel-${version}-${version}-${tbbrel}_amd64.deb"
|
||||||
|
"${tbb}-common-${version}-${version}-${tbbrel}_all.deb"
|
||||||
|
"${tbb}-common-devel-${version}-${version}-${tbbrel}_all.deb"
|
||||||
|
];
|
||||||
|
|
||||||
|
apthost = "https://apt.repos.intel.com/oneapi/pool/main/";
|
||||||
|
urls = map (x: apthost + x) debs;
|
||||||
|
|
||||||
|
sums = [
|
||||||
|
# From intel-oneapi-compiler-dpcpp-cpp
|
||||||
|
"0pwsfzkazr9yf6v6lgwb3p2in6ch3rlcc9qcfarkyqn052p760kk"
|
||||||
|
"0vzsanldhs4ym4gsfn0zjqm03x53ma1zjkj24hpkhpsvlr2r069w"
|
||||||
|
"0nx62v6g0wl70lqdh7sh7gfgxbynhrrips9gpj9if60ngz6fm21m"
|
||||||
|
|
||||||
|
# From intel-oneapi-compiler-shared
|
||||||
|
"1al80pcy2r3q2r2pm04sva7rd3z6y287mkdv5jq4p5bfd8yi14d4"
|
||||||
|
"07rp0cjmbgj48wly9dm6ibxzbsanmgrsjjqr7mx688ms6qbhv314"
|
||||||
|
"1pf4xckyyhssjknhs6hwampjsz2qjlg81jw2fc441zaccwf25yf3"
|
||||||
|
"0hk0x4wq60g9wnn9j051v25zcmbasjdzp34xfvrihmcvyws0s69g"
|
||||||
|
"0dhbw8kshw4abqc9zf891z5ic0x13x3kvhk56nrqkqgcfwps9w8a"
|
||||||
|
|
||||||
|
# From intel-oneapi-openmp
|
||||||
|
"1wqy2sjwlqdh72zhfrxl9pm106hjzfdbbm98cxigbg20fb5lbv5a"
|
||||||
|
"19nbqypvqcf8c3mwriaqrmp5igjpwvwrb9mq2fxa5i40w7bhlxjl"
|
||||||
|
|
||||||
|
# From intel-oneapi-tbb
|
||||||
|
"1dpii3g861kimky0x7dqcj6hg7zb6i5kw1wgwrxdc5yxhi5slbm9"
|
||||||
|
"0bl1flm6w0w9nzrh34ig4p9qz2gbdgw9q14as2pwp8flicd8p899"
|
||||||
|
"0w3kip6q713v1xlfc10ai4v15cbwmbqrv8r1f5x6pfqdbb0bpmbv"
|
||||||
|
"0v95nmddyi0mjjdvm07w9fm3vq4a0wkx7zxlyzn2f4xg38qc5j73"
|
||||||
|
];
|
||||||
|
|
||||||
|
in
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
inherit version;
|
||||||
|
name = "intel-compiler-${version}";
|
||||||
|
|
||||||
|
passthru = {
|
||||||
|
CC = "icc";
|
||||||
|
CXX = "icpc";
|
||||||
|
};
|
||||||
|
|
||||||
|
srcs = zipListsWith getsrc urls sums;
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
dpkg
|
||||||
|
rsync
|
||||||
|
libffi
|
||||||
|
libelf
|
||||||
|
libxml2
|
||||||
|
hwloc
|
||||||
|
autoPatchelfHook
|
||||||
|
stdenv.cc.cc.lib
|
||||||
|
];
|
||||||
|
|
||||||
|
dontBuild = true;
|
||||||
|
dontStrip = true;
|
||||||
|
|
||||||
|
# The gcc package is required for building other programs
|
||||||
|
#propagatedBuildInputs = [ gcc ];
|
||||||
|
|
||||||
|
unpackCmd = ''
|
||||||
|
dpkg -x $curSrc .
|
||||||
|
'';
|
||||||
|
|
||||||
|
# FIXME: Some dependencies are missing
|
||||||
|
autoPatchelfIgnoreMissingDeps = true;
|
||||||
|
#autoPatchelfIgnoreMissingDeps = [ "*" ];
|
||||||
|
|
||||||
|
# Compiler
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out/{bin,lib,include}
|
||||||
|
|
||||||
|
pushd intel/oneapi/compiler/${version}/linux
|
||||||
|
# Binaries
|
||||||
|
rsync -a bin/ $out/bin/
|
||||||
|
rsync -a bin/intel64/ $out/bin/
|
||||||
|
|
||||||
|
# Libraries
|
||||||
|
rsync -a --exclude=oclfpga lib/ $out/lib/
|
||||||
|
rsync -a compiler/lib/intel64_lin/ $out/lib/
|
||||||
|
|
||||||
|
# Headers
|
||||||
|
rsync -a include/ $out/include/
|
||||||
|
rsync -a compiler/include/ $out/include/
|
||||||
|
popd
|
||||||
|
|
||||||
|
# TBB
|
||||||
|
pushd intel/oneapi/tbb/${version}
|
||||||
|
# Libraries
|
||||||
|
rsync -a lib/intel64/gcc4.8/ $out/lib/
|
||||||
|
|
||||||
|
# Headers
|
||||||
|
rsync -a include/ $out/include/
|
||||||
|
popd
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
homepage = "https://www.intel.com/content/www/us/en/developer/tools/overview.html";
|
||||||
|
description = "Intel compiler";
|
||||||
|
maintainers = with lib.maintainers.bsc; [ rarias ];
|
||||||
|
platforms = lib.platforms.linux;
|
||||||
|
license = lib.licenses.unfree;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
39
pkgs/intel-compiler/license.nix
Normal file
39
pkgs/intel-compiler/license.nix
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
{ stdenv
|
||||||
|
, requireFile
|
||||||
|
}:
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
name = "intel-compiler-license";
|
||||||
|
version = "2019.7.217";
|
||||||
|
|
||||||
|
src = requireFile {
|
||||||
|
name = "license.lic";
|
||||||
|
sha256 = "0rgmsqkhpqcfny8j7msa4sgz3prhh248ylh69gjh12dkra77prsj";
|
||||||
|
message = ''
|
||||||
|
The Intel Compiler requires a license. You can get one (free of charge) if
|
||||||
|
you meet the requeriments at the website:
|
||||||
|
|
||||||
|
https://software.intel.com/content/www/us/en/develop/articles/qualify-for-free-software.html#opensourcecontributor
|
||||||
|
|
||||||
|
Or you can use your own license. Add it to the store with:
|
||||||
|
|
||||||
|
$ nix-store --add-fixed sha256 license.lic
|
||||||
|
/nix/store/2p9v0nvsl3scshjx348z6j32rh7ac0db-license.lic
|
||||||
|
|
||||||
|
Notice that the name must match exactly "license.lic".
|
||||||
|
|
||||||
|
Then update the hash in the bsc/intel-compiler/license.nix file using the
|
||||||
|
nix-hash command with:
|
||||||
|
|
||||||
|
$ nix-hash --type sha256 --base32 --flat /nix/store/2p9v0nvsl3scshjx348z6j32rh7ac0db-license.lic
|
||||||
|
06g2xgm1lch6zqfkhb768wacdx46kf61mfvj5wfpyssw0anr0x9q
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
dontUnpack = true;
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out
|
||||||
|
cp $src $out/
|
||||||
|
'';
|
||||||
|
}
|
||||||
29
pkgs/intel-compiler/wrapper2021.nix
Normal file
29
pkgs/intel-compiler/wrapper2021.nix
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
stdenv
|
||||||
|
, gcc
|
||||||
|
, iccUnwrapped
|
||||||
|
, wrapCCWith
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
targetConfig = stdenv.targetPlatform.config;
|
||||||
|
inherit gcc;
|
||||||
|
in wrapCCWith rec {
|
||||||
|
cc = iccUnwrapped;
|
||||||
|
extraBuildCommands = ''
|
||||||
|
echo "-B${gcc.cc}/lib/gcc/${targetConfig}/${gcc.version}" >> $out/nix-support/cc-cflags
|
||||||
|
echo "-isystem ${iccUnwrapped}/include" >> $out/nix-support/cc-cflags
|
||||||
|
echo "-isystem ${iccUnwrapped}/include/icc" >> $out/nix-support/cc-cflags
|
||||||
|
echo "-isystem ${gcc.cc}/include/c++/${gcc.version}" >> $out/nix-support/cc-cflags
|
||||||
|
echo "-isystem ${gcc.cc}/include/c++/${gcc.version}/${targetConfig}" >> $out/nix-support/cc-cflags
|
||||||
|
|
||||||
|
echo "-L${iccUnwrapped}/lib" >> $out/nix-support/cc-ldflags
|
||||||
|
echo "-L${gcc.cc}/lib/gcc/${targetConfig}/${gcc.version}" >> $out/nix-support/cc-ldflags
|
||||||
|
echo "-L${gcc.cc.lib}/lib" >> $out/nix-support/cc-ldflags
|
||||||
|
|
||||||
|
# Create the wrappers for icx*
|
||||||
|
wrap lld $wrapper $ccPath/lld
|
||||||
|
wrap icx $wrapper $ccPath/icx
|
||||||
|
wrap icpx $wrapper $ccPath/icpx
|
||||||
|
'';
|
||||||
|
}
|
||||||
113
pkgs/intel-mpi/default.nix
Normal file
113
pkgs/intel-mpi/default.nix
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
{ stdenv
|
||||||
|
, lib
|
||||||
|
, rpmextract
|
||||||
|
, gcc
|
||||||
|
, zlib
|
||||||
|
, ucx
|
||||||
|
, numactl
|
||||||
|
, rdma-core
|
||||||
|
, libpsm2
|
||||||
|
, patchelf
|
||||||
|
, autoPatchelfHook
|
||||||
|
, enableDebug ? false
|
||||||
|
# The _mt version seems to cause seg-faults and deadlocks with the libpsm2
|
||||||
|
# provider library with programs that call the MPI library without any locking
|
||||||
|
# mechanism. See https://pm.bsc.es/gitlab/rarias/bscpkgs/-/issues/28. By
|
||||||
|
# default, we use the non-mt variant, which provides a big lock. If you want to
|
||||||
|
# use it, take a look at the I_MPI_THREAD_SPLIT env-var as well.
|
||||||
|
, enableMt ? false
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
|
||||||
|
lib_variant = (if enableDebug then "debug" else "release");
|
||||||
|
|
||||||
|
# See https://software.intel.com/content/www/us/en/develop/documentation/mpi-developer-reference-linux/top/environment-variable-reference/other-environment-variables.html
|
||||||
|
lib_mt = (if enableMt then "_mt" else "");
|
||||||
|
lib_name = "${lib_variant}${lib_mt}";
|
||||||
|
|
||||||
|
in
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
name = "intel-mpi-${version}";
|
||||||
|
version = "2019.10.317";
|
||||||
|
dir_nr = "17534";
|
||||||
|
|
||||||
|
src = builtins.fetchTarball {
|
||||||
|
url = "http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/${dir_nr}/l_mpi_${version}.tgz";
|
||||||
|
sha256 = "00nimgqywr20dv1ns5kg4r8539gvharn0xfj48i7mhbg8kwf8s08";
|
||||||
|
};
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
rpmextract
|
||||||
|
autoPatchelfHook
|
||||||
|
gcc.cc.lib
|
||||||
|
zlib
|
||||||
|
ucx
|
||||||
|
numactl
|
||||||
|
rdma-core
|
||||||
|
libpsm2
|
||||||
|
patchelf
|
||||||
|
];
|
||||||
|
|
||||||
|
postUnpack = ''
|
||||||
|
pushd $sourceRoot
|
||||||
|
rpmextract rpm/intel-mpi-*.rpm
|
||||||
|
# Predictable name
|
||||||
|
mv opt/intel/compilers_and_libraries_* opt/intel/compilers_and_libraries
|
||||||
|
popd
|
||||||
|
sourceRoot="$sourceRoot/opt/intel/compilers_and_libraries/linux/mpi/intel64"
|
||||||
|
'';
|
||||||
|
|
||||||
|
patches = [
|
||||||
|
./mpicc.patch
|
||||||
|
./mpicxx.patch
|
||||||
|
];
|
||||||
|
|
||||||
|
postPatch = ''
|
||||||
|
for i in bin/mpi* ; do
|
||||||
|
echo "Fixing paths in $i"
|
||||||
|
sed -i "s:I_MPI_SUBSTITUTE_INSTALLDIR:$out:g" "$i"
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
|
||||||
|
dontBuild = true;
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out
|
||||||
|
mv etc $out
|
||||||
|
mv bin $out
|
||||||
|
mv include $out
|
||||||
|
mkdir $out/lib
|
||||||
|
cp -a lib/lib* $out/lib
|
||||||
|
cp -a lib/${lib_name}/lib* $out/lib
|
||||||
|
cp -a libfabric/lib/* $out/lib
|
||||||
|
cp -a libfabric/lib/prov/* $out/lib
|
||||||
|
cp -a libfabric/bin/* $out/bin
|
||||||
|
ln -s . $out/intel64
|
||||||
|
rm $out/lib/libmpi.dbg
|
||||||
|
|
||||||
|
# Fixup Intel PSM2 library missing (now located at PSMX2)
|
||||||
|
ln -s $out/lib/libpsmx2-fi.so $out/lib/libpsm2-fi.so
|
||||||
|
'';
|
||||||
|
|
||||||
|
dontAutoPatchelf = true;
|
||||||
|
|
||||||
|
# The rpath of libfabric.so bundled with Intel MPI is patched to include the
|
||||||
|
# rdma-core lib path, as is required for dlopen to find the rdma components.
|
||||||
|
# TODO: Try the upstream libfabric library with rdma support, so we can avoid
|
||||||
|
# this hack.
|
||||||
|
postFixup = ''
|
||||||
|
autoPatchelf -- $out
|
||||||
|
patchelf --set-rpath "$out/lib:${rdma-core}/lib:${libpsm2}/lib" $out/lib/libfabric.so
|
||||||
|
echo "Patched RPATH in libfabric.so to: $(patchelf --print-rpath $out/lib/libfabric.so)"
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
homepage = "https://www.intel.com/content/www/us/en/developer/tools/overview.html";
|
||||||
|
description = "Intel MPI";
|
||||||
|
maintainers = with lib.maintainers.bsc; [ rarias ];
|
||||||
|
platforms = lib.platforms.linux;
|
||||||
|
license = lib.licenses.unfree;
|
||||||
|
};
|
||||||
|
}
|
||||||
20
pkgs/intel-mpi/mpicc.patch
Normal file
20
pkgs/intel-mpi/mpicc.patch
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
--- a/bin/mpicc 2021-02-04 18:15:11.233632360 +0100
|
||||||
|
+++ b/bin/mpicc 2021-02-05 09:33:49.493598479 +0100
|
||||||
|
@@ -50,7 +50,7 @@
|
||||||
|
if [ x"$opt_args" == x"" ]; then
|
||||||
|
case "${compiler_short_name}" in
|
||||||
|
icc|icx) "$dir"/mpiicc -cc=$compiler_name "$@" ;;
|
||||||
|
- cc|*gcc*|clang*) "$dir"/mpigcc -cc=$compiler_name "$@" ;;
|
||||||
|
+ cc|*gcc*|clang*|mcc|echo) "$dir"/mpigcc -cc=$compiler_name "$@" ;;
|
||||||
|
mpicc) "$dir"/mpigcc "$@" ;;
|
||||||
|
*)
|
||||||
|
echo "Error: unsupported compiler name '$compiler_name'."
|
||||||
|
@@ -60,7 +60,7 @@
|
||||||
|
else
|
||||||
|
case "${compiler_short_name}" in
|
||||||
|
icc|icx) "$dir"/mpiicc -cc=$compiler_name "$@" $opt_args ;;
|
||||||
|
- cc|*gcc*|clang*) "$dir"/mpigcc -cc=$compiler_name "$@" $opt_args ;;
|
||||||
|
+ cc|*gcc*|clang*|mcc|echo) "$dir"/mpigcc -cc=$compiler_name "$@" $opt_args ;;
|
||||||
|
mpicc) "$dir"/mpigcc "$@" $opt_args ;;
|
||||||
|
*)
|
||||||
|
echo "Error: unsupported compiler name '$compiler_name'."
|
||||||
20
pkgs/intel-mpi/mpicxx.patch
Normal file
20
pkgs/intel-mpi/mpicxx.patch
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
--- a/bin/mpicxx 2021-02-04 18:15:11.233632360 +0100
|
||||||
|
+++ b/bin/mpicxx 2021-02-05 09:36:21.396922569 +0100
|
||||||
|
@@ -50,7 +50,7 @@
|
||||||
|
if [ x"$opt_args" == x"" ]; then
|
||||||
|
case "${compiler_short_name}" in
|
||||||
|
icc|icpc|dpcpp) "$dir"/mpiicpc -cxx=$compiler_name "$@" ;;
|
||||||
|
- *g++*) "$dir"/mpigxx -cxx=$compiler_name "$@" ;;
|
||||||
|
+ *g++*|clang*++|mcxx|echo) "$dir"/mpigxx -cxx=$compiler_name "$@" ;;
|
||||||
|
mpicxx) "$dir"/mpigxx "$@" ;;
|
||||||
|
*)
|
||||||
|
echo "Error: unsupported compiler name '$compiler_name'."
|
||||||
|
@@ -60,7 +60,7 @@
|
||||||
|
else
|
||||||
|
case "${compiler_short_name}" in
|
||||||
|
icc|icpc|dpcpp) "$dir"/mpiicpc -cxx=$compiler_name "$@" $opt_args ;;
|
||||||
|
- *g++*) "$dir"/mpigxx -cxx=$compiler_name "$@" $opt_args ;;
|
||||||
|
+ *g++*|clang*++|mcxx|echo) "$dir"/mpigxx -cxx=$compiler_name "$@" $opt_args ;;
|
||||||
|
mpicxx) "$dir"/mpigxx "$@" $opt_args ;;
|
||||||
|
*)
|
||||||
|
echo "Error: unsupported compiler name '$compiler_name'."
|
||||||
@@ -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";
|
||||||
|
|
||||||
@@ -130,6 +99,7 @@ let
|
|||||||
|
|
||||||
phases = [ "installPhase" "fixupPhase" ];
|
phases = [ "installPhase" "fixupPhase" ];
|
||||||
dontStrip = true;
|
dontStrip = true;
|
||||||
|
strictDeps = true;
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
mkdir -p $out/{bin,etc,lib,include}
|
mkdir -p $out/{bin,etc,lib,include}
|
||||||
mkdir -p $out/share/man
|
mkdir -p $out/share/man
|
||||||
@@ -181,6 +151,7 @@ let
|
|||||||
];
|
];
|
||||||
phases = [ "installPhase" "fixupPhase" ];
|
phases = [ "installPhase" "fixupPhase" ];
|
||||||
dontStrip = true;
|
dontStrip = true;
|
||||||
|
strictDeps = true;
|
||||||
|
|
||||||
autoPatchelfIgnoreMissingDeps = [ "libhwloc.so.5" ];
|
autoPatchelfIgnoreMissingDeps = [ "libhwloc.so.5" ];
|
||||||
|
|
||||||
@@ -224,6 +195,7 @@ let
|
|||||||
];
|
];
|
||||||
phases = [ "installPhase" "fixupPhase" ];
|
phases = [ "installPhase" "fixupPhase" ];
|
||||||
dontStrip = true;
|
dontStrip = true;
|
||||||
|
strictDeps = true;
|
||||||
|
|
||||||
autoPatchelfIgnoreMissingDeps = [ "libsycl.so.6" ];
|
autoPatchelfIgnoreMissingDeps = [ "libsycl.so.6" ];
|
||||||
|
|
||||||
@@ -291,6 +263,7 @@ let
|
|||||||
phases = [ "installPhase" "fixupPhase" ];
|
phases = [ "installPhase" "fixupPhase" ];
|
||||||
|
|
||||||
dontStrip = true;
|
dontStrip = true;
|
||||||
|
strictDeps = true;
|
||||||
|
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
mkdir -p $out/{bin,lib,include}
|
mkdir -p $out/{bin,lib,include}
|
||||||
@@ -379,6 +352,7 @@ let
|
|||||||
phases = [ "installPhase" "fixupPhase" ];
|
phases = [ "installPhase" "fixupPhase" ];
|
||||||
|
|
||||||
dontStrip = true;
|
dontStrip = true;
|
||||||
|
strictDeps = true;
|
||||||
|
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
mkdir -p $out/{bin,lib}
|
mkdir -p $out/{bin,lib}
|
||||||
@@ -472,7 +446,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;
|
||||||
|
}
|
||||||
199
pkgs/intel-oneapi/patch_intel.nix
Normal file
199
pkgs/intel-oneapi/patch_intel.nix
Normal file
@@ -0,0 +1,199 @@
|
|||||||
|
{
|
||||||
|
stdenv,
|
||||||
|
stdenvNoCC,
|
||||||
|
lib,
|
||||||
|
symlinkJoin,
|
||||||
|
autoPatchelfHook,
|
||||||
|
wrapCCWith,
|
||||||
|
overrideCC,
|
||||||
|
gcc,
|
||||||
|
hwloc,
|
||||||
|
libelf,
|
||||||
|
libffi_3_3,
|
||||||
|
libpsm2,
|
||||||
|
libuuid,
|
||||||
|
libxml2,
|
||||||
|
numactl,
|
||||||
|
ocl-icd,
|
||||||
|
openssl,
|
||||||
|
python3,
|
||||||
|
rdma-core,
|
||||||
|
ucx,
|
||||||
|
zlib,
|
||||||
|
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${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
|
||||||
|
|||||||
44
pkgs/libpsm2/default.nix
Normal file
44
pkgs/libpsm2/default.nix
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
{ stdenv, lib, fetchFromGitHub, numactl, pkg-config }:
|
||||||
|
|
||||||
|
let
|
||||||
|
version = "11.2.185";
|
||||||
|
in
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
pname = "libpsm2";
|
||||||
|
inherit version;
|
||||||
|
|
||||||
|
preConfigure= ''
|
||||||
|
export UDEVDIR=$out/etc/udev
|
||||||
|
substituteInPlace ./Makefile --replace "udevrulesdir}" "prefix}/etc/udev";
|
||||||
|
'';
|
||||||
|
|
||||||
|
enableParallelBuilding = true;
|
||||||
|
|
||||||
|
buildInputs = [ numactl pkg-config ];
|
||||||
|
|
||||||
|
installFlags = [
|
||||||
|
"DESTDIR=$(out)"
|
||||||
|
"UDEVDIR=/etc/udev"
|
||||||
|
"LIBPSM2_COMPAT_CONF_DIR=/etc"
|
||||||
|
];
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "intel";
|
||||||
|
repo = "opa-psm2";
|
||||||
|
rev = "PSM2_${version}";
|
||||||
|
sha256 = "062hg4r6gz7pla9df70nqs5i2a3mp1wszmp4l0g771fykhhrxsjg";
|
||||||
|
};
|
||||||
|
|
||||||
|
postInstall = ''
|
||||||
|
mv $out/usr/* $out
|
||||||
|
rmdir $out/usr
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
homepage = "https://github.com/intel/opa-psm2";
|
||||||
|
description = "The PSM2 library supports a number of fabric media and stacks";
|
||||||
|
license = with licenses; [ gpl2 bsd3 ];
|
||||||
|
platforms = [ "x86_64-linux" ];
|
||||||
|
maintainers = [ maintainers.bzizou ];
|
||||||
|
};
|
||||||
|
}
|
||||||
200
pkgs/llvm-intel/default.nix
Normal file
200
pkgs/llvm-intel/default.nix
Normal file
@@ -0,0 +1,200 @@
|
|||||||
|
{
|
||||||
|
stdenv,
|
||||||
|
lib,
|
||||||
|
ninja,
|
||||||
|
addDriverRunpath,
|
||||||
|
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
|
||||||
|
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
|
||||||
|
addDriverRunpath
|
||||||
|
]
|
||||||
|
++ 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"
|
||||||
|
]
|
||||||
|
++ 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)
|
||||||
|
];
|
||||||
|
|
||||||
|
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()
|
||||||
|
|
||||||
@@ -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=";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -48,6 +48,7 @@ in stdenv.mkDerivation {
|
|||||||
inherit (source) src version;
|
inherit (source) src version;
|
||||||
|
|
||||||
enableParallelBuilding = true;
|
enableParallelBuilding = true;
|
||||||
|
strictDeps = true;
|
||||||
|
|
||||||
passthru = {
|
passthru = {
|
||||||
CC = "clang";
|
CC = "clang";
|
||||||
|
|||||||
@@ -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;
|
||||||
|
};
|
||||||
|
})
|
||||||
|
|||||||
@@ -39,7 +39,9 @@ stdenv.mkDerivation rec {
|
|||||||
perl
|
perl
|
||||||
pkg-config
|
pkg-config
|
||||||
python3
|
python3
|
||||||
] ++ lib.optionals enableNosv [
|
];
|
||||||
|
|
||||||
|
buildInputs = lib.optionals enableNosv [
|
||||||
nosv
|
nosv
|
||||||
] ++ lib.optionals enableOvni [
|
] ++ lib.optionals enableOvni [
|
||||||
ovni
|
ovni
|
||||||
@@ -54,6 +56,7 @@ stdenv.mkDerivation rec {
|
|||||||
dontStrip = enableDebug;
|
dontStrip = enableDebug;
|
||||||
|
|
||||||
separateDebugInfo = true;
|
separateDebugInfo = true;
|
||||||
|
strictDeps = true;
|
||||||
|
|
||||||
cmakeFlags = [
|
cmakeFlags = [
|
||||||
"-DLIBOMP_OMPD_SUPPORT=OFF"
|
"-DLIBOMP_OMPD_SUPPORT=OFF"
|
||||||
@@ -71,6 +74,28 @@ stdenv.mkDerivation rec {
|
|||||||
rm -f $out/libllvmrt/libomp.*
|
rm -f $out/libllvmrt/libomp.*
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
doInstallCheck = true;
|
||||||
|
# There are not cmake flags to force nOS-V, it enables it when found through
|
||||||
|
# pkg-config. If enableNosv is set, but we fail to find it at build time,
|
||||||
|
# the build will succeed but won't use nOS-V (libompv won't be created).
|
||||||
|
# This is a sanity check to ensure that after install we have the proper
|
||||||
|
# files.
|
||||||
|
installCheckPhase =
|
||||||
|
if enableNosv then
|
||||||
|
''
|
||||||
|
test -f $out/lib/libompv.so
|
||||||
|
test -f $out/libllvmrt/libompv.so
|
||||||
|
test ! -f $out/lib/libomp.so
|
||||||
|
test ! -f $out/libllvmrt/libomp.so
|
||||||
|
''
|
||||||
|
else
|
||||||
|
''
|
||||||
|
test -f $out/lib/libomp.so
|
||||||
|
test -f $out/libllvmrt/libomp.so
|
||||||
|
test ! -f $out/lib/libompv.so
|
||||||
|
test ! -f $out/libllvmrt/libompv.so
|
||||||
|
'';
|
||||||
|
|
||||||
passthru = {
|
passthru = {
|
||||||
inherit nosv;
|
inherit nosv;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ stdenv.mkDerivation rec {
|
|||||||
hardeningDisable = [ "all" ];
|
hardeningDisable = [ "all" ];
|
||||||
|
|
||||||
enableParallelBuilding = false;
|
enableParallelBuilding = false;
|
||||||
|
strictDeps = true;
|
||||||
|
|
||||||
preBuild = ''
|
preBuild = ''
|
||||||
makeFlagsArray+=(
|
makeFlagsArray+=(
|
||||||
|
|||||||
@@ -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,12 +1,15 @@
|
|||||||
{ 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;
|
||||||
|
strictDeps = true;
|
||||||
|
|
||||||
build-system = with python3Packages; [
|
build-system = with python3Packages; [
|
||||||
setuptools
|
setuptools
|
||||||
|
|||||||
@@ -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,22 @@ 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" ];
|
||||||
|
strictDeps = true;
|
||||||
|
|
||||||
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;
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
, jemallocNanos6 ? null
|
, jemallocNanos6 ? null
|
||||||
, cachelineBytes ? 64
|
, cachelineBytes ? 64
|
||||||
, enableGlibcxxDebug ? false
|
, enableGlibcxxDebug ? false
|
||||||
, enablePapi ? stdenv.hostPlatform == stdenv.buildPlatform # Disabled when cross-compiling
|
, enablePapi ? true
|
||||||
, useGit ? false
|
, useGit ? false
|
||||||
, gitUrl ? "ssh://git@bscpm04.bsc.es/nanos6/nanos6"
|
, gitUrl ? "ssh://git@bscpm04.bsc.es/nanos6/nanos6"
|
||||||
, gitBranch ? "master"
|
, gitBranch ? "master"
|
||||||
@@ -80,7 +80,8 @@ in
|
|||||||
(optional enableGlibcxxDebug "CXXFLAGS=-D_GLIBCXX_DEBUG") ++
|
(optional enableGlibcxxDebug "CXXFLAGS=-D_GLIBCXX_DEBUG") ++
|
||||||
# Most nanos6 api symbols are resolved at runtime, so prefer
|
# Most nanos6 api symbols are resolved at runtime, so prefer
|
||||||
# ifunc by default
|
# ifunc by default
|
||||||
(optional isCross "--with-symbol-resolution=ifunc");
|
(optional isCross "--with-symbol-resolution=ifunc") ++
|
||||||
|
(optional enablePapi "--with-papi=${papi}");
|
||||||
|
|
||||||
postConfigure = lib.optionalString (!enableDebug) ''
|
postConfigure = lib.optionalString (!enableDebug) ''
|
||||||
# Disable debug
|
# Disable debug
|
||||||
@@ -95,16 +96,14 @@ in
|
|||||||
dontStrip = enableDebug;
|
dontStrip = enableDebug;
|
||||||
separateDebugInfo = true;
|
separateDebugInfo = true;
|
||||||
|
|
||||||
|
strictDeps = true;
|
||||||
|
|
||||||
nativeBuildInputs = [
|
nativeBuildInputs = [
|
||||||
autoconf
|
autoconf
|
||||||
automake
|
automake
|
||||||
libtool
|
libtool
|
||||||
pkg-config
|
pkg-config
|
||||||
|
];
|
||||||
# TODO: papi_version is needed for configure:
|
|
||||||
# ./configure: line 27378: papi_version: command not found
|
|
||||||
# This probably breaks cross-compilation
|
|
||||||
] ++ lib.optionals enablePapi [ papi ];
|
|
||||||
|
|
||||||
buildInputs = [
|
buildInputs = [
|
||||||
boost
|
boost
|
||||||
|
|||||||
219
pkgs/nix/default.nix
Normal file
219
pkgs/nix/default.nix
Normal file
@@ -0,0 +1,219 @@
|
|||||||
|
{ lib, fetchurl, fetchFromGitHub, callPackage
|
||||||
|
, storeDir ? "/nix/store"
|
||||||
|
, stateDir ? "/nix/var"
|
||||||
|
, confDir ? "/etc"
|
||||||
|
, boehmgc
|
||||||
|
, stdenv, llvmPackages_6
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
|
||||||
|
common =
|
||||||
|
{ lib, stdenv, fetchpatch, perl, curl, bzip2, sqlite, openssl ? null, xz
|
||||||
|
, bash, coreutils, gzip, gnutar
|
||||||
|
, pkg-config, boehmgc, perlPackages, libsodium, brotli, boost, editline, nlohmann_json
|
||||||
|
, autoreconfHook, autoconf-archive, bison, flex, libxml2, libxslt, docbook5, docbook_xsl_ns
|
||||||
|
, jq, libarchive, rustc, cargo
|
||||||
|
# Used by tests
|
||||||
|
, gmock
|
||||||
|
, busybox-sandbox-shell
|
||||||
|
, storeDir
|
||||||
|
, stateDir
|
||||||
|
, confDir
|
||||||
|
, withLibseccomp ? lib.any (lib.meta.platformMatch stdenv.hostPlatform) libseccomp.meta.platforms, libseccomp
|
||||||
|
, withAWS ? stdenv.isLinux || stdenv.isDarwin, aws-sdk-cpp
|
||||||
|
|
||||||
|
, name, suffix ? "", src, crates ? null
|
||||||
|
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
sh = busybox-sandbox-shell;
|
||||||
|
nix = stdenv.mkDerivation rec {
|
||||||
|
inherit name src;
|
||||||
|
version = lib.getVersion name;
|
||||||
|
|
||||||
|
is24 = lib.versionAtLeast version "2.4pre";
|
||||||
|
isExactly23 = lib.versionAtLeast version "2.3" && lib.versionOlder version "2.4";
|
||||||
|
|
||||||
|
VERSION_SUFFIX = suffix;
|
||||||
|
|
||||||
|
outputs = [ "out" "dev" "man" "doc" ];
|
||||||
|
|
||||||
|
nativeBuildInputs =
|
||||||
|
[ pkg-config ]
|
||||||
|
++ lib.optionals is24 [ autoreconfHook autoconf-archive bison flex libxml2 libxslt
|
||||||
|
docbook5 docbook_xsl_ns jq gmock ];
|
||||||
|
|
||||||
|
buildInputs =
|
||||||
|
[ curl openssl sqlite xz bzip2 nlohmann_json
|
||||||
|
brotli boost editline
|
||||||
|
]
|
||||||
|
++ lib.optional (stdenv.isLinux || stdenv.isDarwin) libsodium
|
||||||
|
++ lib.optionals is24 [ libarchive rustc cargo ]
|
||||||
|
++ lib.optional withLibseccomp libseccomp
|
||||||
|
++ lib.optional withAWS
|
||||||
|
((aws-sdk-cpp.override {
|
||||||
|
apis = ["s3" "transfer"];
|
||||||
|
customMemoryManagement = false;
|
||||||
|
}).overrideDerivation (args: {
|
||||||
|
patches = args.patches or [] ++ [(fetchpatch {
|
||||||
|
url = "https://github.com/edolstra/aws-sdk-cpp/commit/7d58e303159b2fb343af9a1ec4512238efa147c7.patch";
|
||||||
|
sha256 = "103phn6kyvs1yc7fibyin3lgxz699qakhw671kl207484im55id1";
|
||||||
|
})];
|
||||||
|
}));
|
||||||
|
|
||||||
|
propagatedBuildInputs = [ boehmgc ];
|
||||||
|
|
||||||
|
# Seems to be required when using std::atomic with 64-bit types
|
||||||
|
NIX_LDFLAGS = lib.optionalString (stdenv.hostPlatform.system == "armv5tel-linux" || stdenv.hostPlatform.system == "armv6l-linux") "-latomic";
|
||||||
|
|
||||||
|
preConfigure =
|
||||||
|
# Copy libboost_context so we don't get all of Boost in our closure.
|
||||||
|
# https://github.com/NixOS/nixpkgs/issues/45462
|
||||||
|
''
|
||||||
|
mkdir -p $out/lib
|
||||||
|
cp -pd ${boost}/lib/{libboost_context*,libboost_thread*,libboost_system*} $out/lib
|
||||||
|
rm -f $out/lib/*.a
|
||||||
|
${lib.optionalString stdenv.isLinux ''
|
||||||
|
chmod u+w $out/lib/*.so.*
|
||||||
|
patchelf --set-rpath $out/lib:${stdenv.cc.cc.lib}/lib $out/lib/libboost_thread.so.*
|
||||||
|
''}
|
||||||
|
'' +
|
||||||
|
# Unpack the Rust crates.
|
||||||
|
lib.optionalString is24 ''
|
||||||
|
tar xvf ${crates} -C nix-rust/
|
||||||
|
mv nix-rust/nix-vendored-crates* nix-rust/vendor
|
||||||
|
'' +
|
||||||
|
# For Nix-2.3, patch around an issue where the Nix configure step pulls in the
|
||||||
|
# build system's bash and other utilities when cross-compiling
|
||||||
|
lib.optionalString (stdenv.buildPlatform != stdenv.hostPlatform && isExactly23) ''
|
||||||
|
mkdir tmp/
|
||||||
|
substitute corepkgs/config.nix.in tmp/config.nix.in \
|
||||||
|
--subst-var-by bash ${bash}/bin/bash \
|
||||||
|
--subst-var-by coreutils ${coreutils}/bin \
|
||||||
|
--subst-var-by bzip2 ${bzip2}/bin/bzip2 \
|
||||||
|
--subst-var-by gzip ${gzip}/bin/gzip \
|
||||||
|
--subst-var-by xz ${xz}/bin/xz \
|
||||||
|
--subst-var-by tar ${gnutar}/bin/tar \
|
||||||
|
--subst-var-by tr ${coreutils}/bin/tr
|
||||||
|
mv tmp/config.nix.in corepkgs/config.nix.in
|
||||||
|
'';
|
||||||
|
|
||||||
|
configureFlags =
|
||||||
|
[ "--with-store-dir=${storeDir}"
|
||||||
|
"--localstatedir=${stateDir}"
|
||||||
|
"--sysconfdir=${confDir}"
|
||||||
|
"--disable-init-state"
|
||||||
|
"--enable-gc"
|
||||||
|
]
|
||||||
|
++ lib.optionals stdenv.isLinux [
|
||||||
|
"--with-sandbox-shell=${sh}/bin/busybox"
|
||||||
|
]
|
||||||
|
++ lib.optional (
|
||||||
|
stdenv.hostPlatform != stdenv.buildPlatform && stdenv.hostPlatform ? nix && stdenv.hostPlatform.nix ? system
|
||||||
|
) ''--with-system=${stdenv.hostPlatform.nix.system}''
|
||||||
|
# RISC-V support in progress https://github.com/seccomp/libseccomp/pull/50
|
||||||
|
++ lib.optional (!withLibseccomp) "--disable-seccomp-sandboxing";
|
||||||
|
|
||||||
|
makeFlags = [ "profiledir=$(out)/etc/profile.d" ];
|
||||||
|
|
||||||
|
installFlags = [ "sysconfdir=$(out)/etc" ];
|
||||||
|
|
||||||
|
doInstallCheck = false;
|
||||||
|
|
||||||
|
# socket path becomes too long otherwise
|
||||||
|
#preInstallCheck = lib.optional stdenv.isDarwin ''
|
||||||
|
# export TMPDIR=$NIX_BUILD_TOP
|
||||||
|
#'';
|
||||||
|
|
||||||
|
separateDebugInfo = stdenv.isLinux;
|
||||||
|
|
||||||
|
enableParallelBuilding = true;
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
description = "Powerful package manager that makes package management reliable and reproducible";
|
||||||
|
longDescription = ''
|
||||||
|
Nix is a powerful package manager for Linux and other Unix systems that
|
||||||
|
makes package management reliable and reproducible. It provides atomic
|
||||||
|
upgrades and rollbacks, side-by-side installation of multiple versions of
|
||||||
|
a package, multi-user package management and easy setup of build
|
||||||
|
environments.
|
||||||
|
'';
|
||||||
|
homepage = "https://nixos.org/";
|
||||||
|
license = lib.licenses.lgpl2Plus;
|
||||||
|
maintainers = [ lib.maintainers.eelco ];
|
||||||
|
platforms = lib.platforms.unix;
|
||||||
|
outputsToInstall = [ "out" "man" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
passthru = {
|
||||||
|
perl-bindings = stdenv.mkDerivation {
|
||||||
|
pname = "nix-perl";
|
||||||
|
inherit version;
|
||||||
|
|
||||||
|
inherit src;
|
||||||
|
|
||||||
|
postUnpack = "sourceRoot=$sourceRoot/perl";
|
||||||
|
|
||||||
|
# This is not cross-compile safe, don't have time to fix right now
|
||||||
|
# but noting for future travellers.
|
||||||
|
nativeBuildInputs =
|
||||||
|
[ perl pkg-config curl nix libsodium boost autoreconfHook autoconf-archive ];
|
||||||
|
|
||||||
|
configureFlags =
|
||||||
|
[ "--with-dbi=${perlPackages.DBI}/${perl.libPrefix}"
|
||||||
|
"--with-dbd-sqlite=${perlPackages.DBDSQLite}/${perl.libPrefix}"
|
||||||
|
];
|
||||||
|
|
||||||
|
preConfigure = "export NIX_STATE_DIR=$TMPDIR";
|
||||||
|
|
||||||
|
preBuild = "unset NIX_INDENT_MAKE";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in nix;
|
||||||
|
|
||||||
|
in rec {
|
||||||
|
|
||||||
|
nix = nixUnstable;
|
||||||
|
|
||||||
|
nixUnstable = lib.lowPrio (callPackage common rec {
|
||||||
|
name = "nix-2.4${suffix}";
|
||||||
|
suffix = "pre7534_b92f58f6";
|
||||||
|
|
||||||
|
#src = /home/Computational/rarias/nix/nix-rodarima;
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "rodarima";
|
||||||
|
repo = "nix";
|
||||||
|
rev = "3a642187c33ed46d952d3a50a83b2576b704fab7";
|
||||||
|
sha256 = "0s8is2czpkcj1x1kcjqgbnsbbl03w3fwjjiclsd44zh1ij3wb90s";
|
||||||
|
};
|
||||||
|
|
||||||
|
crates = fetchurl {
|
||||||
|
url = "https://hydra.nixos.org/build/118797694/download/1/nix-vendored-crates-2.4pre7534_b92f58f6.tar.xz";
|
||||||
|
sha256 = "a4c2612bbd81732bbb899bc0c230e07b16f6b6150ffbb19c4907dedbbc2bf9fc";
|
||||||
|
};
|
||||||
|
|
||||||
|
inherit storeDir stateDir confDir boehmgc;
|
||||||
|
});
|
||||||
|
|
||||||
|
nixFlakes = lib.lowPrio (callPackage common rec {
|
||||||
|
name = "nix-2.4${suffix}";
|
||||||
|
suffix = "pre20200521_00b562c";
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "NixOS";
|
||||||
|
repo = "nix";
|
||||||
|
rev = "00b562c87ec4c3bbe514f5dc1f4d1c41f66f66bf";
|
||||||
|
sha256 = "0s8is2czpkcj1x1kcjqgbnsbbl03w3fwjjiclsd44zh1ij3wb90s";
|
||||||
|
};
|
||||||
|
|
||||||
|
crates = fetchurl {
|
||||||
|
url = "https://hydra.nixos.org/build/118093786/download/1/nix-vendored-crates-2.4pre20200501_941f952.tar.xz";
|
||||||
|
sha256 = "060f4n5srdbb8vsj0m14aqch7im79a4h5g3nrs41p1xc602vhcdl";
|
||||||
|
};
|
||||||
|
|
||||||
|
inherit storeDir stateDir confDir boehmgc;
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
214
pkgs/nix/static.nix
Normal file
214
pkgs/nix/static.nix
Normal file
@@ -0,0 +1,214 @@
|
|||||||
|
{ lib, fetchurl, fetchFromGitHub, callPackage
|
||||||
|
, storeDir ? "/nix/store"
|
||||||
|
, stateDir ? "/nix/var"
|
||||||
|
, confDir ? "/etc"
|
||||||
|
, boehmgc
|
||||||
|
, stdenv, llvmPackages_6
|
||||||
|
, sandbox-shell ? "/bin/sh"
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
|
||||||
|
enableStatic = true;
|
||||||
|
|
||||||
|
common =
|
||||||
|
{ lib, stdenv, fetchpatch, perl, curl, bzip2, sqlite, openssl ? null, xz
|
||||||
|
, bash, coreutils, gzip, gnutar
|
||||||
|
, pkg-config, boehmgc, perlPackages, libsodium, brotli, boost, editline, nlohmann_json
|
||||||
|
, autoreconfHook, autoconf-archive, bison, flex, libxml2, libxslt, docbook5, docbook_xsl_ns
|
||||||
|
, jq, libarchive
|
||||||
|
# Used by tests
|
||||||
|
, gmock
|
||||||
|
, storeDir
|
||||||
|
, stateDir
|
||||||
|
, confDir
|
||||||
|
, withLibseccomp ? lib.any (lib.meta.platformMatch stdenv.hostPlatform) libseccomp.meta.platforms, libseccomp
|
||||||
|
, withAWS ? !enableStatic && (stdenv.isLinux || stdenv.isDarwin), aws-sdk-cpp
|
||||||
|
, enableStatic ? true
|
||||||
|
, name, suffix ? "", src
|
||||||
|
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
nix = stdenv.mkDerivation rec {
|
||||||
|
inherit name src;
|
||||||
|
version = lib.getVersion name;
|
||||||
|
|
||||||
|
is24 = lib.versionAtLeast version "2.4pre";
|
||||||
|
isExactly23 = lib.versionAtLeast version "2.3" && lib.versionOlder version "2.4";
|
||||||
|
|
||||||
|
VERSION_SUFFIX = suffix;
|
||||||
|
|
||||||
|
outputs = [ "out" "dev" "man" "doc" ];
|
||||||
|
|
||||||
|
nativeBuildInputs =
|
||||||
|
[ pkg-config ]
|
||||||
|
++ lib.optionals is24 [ autoreconfHook autoconf-archive bison flex libxml2 libxslt
|
||||||
|
docbook5 docbook_xsl_ns jq ];
|
||||||
|
|
||||||
|
buildInputs =
|
||||||
|
[ curl openssl sqlite xz bzip2 nlohmann_json
|
||||||
|
brotli boost editline boehmgc
|
||||||
|
]
|
||||||
|
++ lib.optional (stdenv.isLinux || stdenv.isDarwin) libsodium
|
||||||
|
++ lib.optionals is24 [ libarchive gmock ]
|
||||||
|
++ lib.optional withLibseccomp libseccomp
|
||||||
|
++ lib.optional withAWS
|
||||||
|
((aws-sdk-cpp.override {
|
||||||
|
apis = ["s3" "transfer"];
|
||||||
|
customMemoryManagement = false;
|
||||||
|
}).overrideDerivation (args: {
|
||||||
|
patches = args.patches or [] ++ [(fetchpatch {
|
||||||
|
url = "https://github.com/edolstra/aws-sdk-cpp/commit/7d58e303159b2fb343af9a1ec4512238efa147c7.patch";
|
||||||
|
sha256 = "103phn6kyvs1yc7fibyin3lgxz699qakhw671kl207484im55id1";
|
||||||
|
})];
|
||||||
|
}));
|
||||||
|
|
||||||
|
propagatedBuildInputs = [ boehmgc ];
|
||||||
|
|
||||||
|
# Seems to be required when using std::atomic with 64-bit types
|
||||||
|
NIX_LDFLAGS =
|
||||||
|
# need to list libraries individually until
|
||||||
|
# https://github.com/NixOS/nix/commit/3e85c57a6cbf46d5f0fe8a89b368a43abd26daba
|
||||||
|
# is in a release
|
||||||
|
lib.optionalString enableStatic "-lssl -lbrotlicommon -lssh2 -lz -lnghttp2 -lcrypto"
|
||||||
|
|
||||||
|
# need to detect it here until
|
||||||
|
# https://github.com/NixOS/nix/commits/74b4737d8f0e1922ef5314a158271acf81cd79f8
|
||||||
|
# is in a release
|
||||||
|
+ lib.optionalString (stdenv.hostPlatform.system == "armv5tel-linux" || stdenv.hostPlatform.system == "armv6l-linux") "-latomic";
|
||||||
|
|
||||||
|
preConfigure =
|
||||||
|
# Copy libboost_context so we don't get all of Boost in our closure.
|
||||||
|
# https://github.com/NixOS/nixpkgs/issues/45462
|
||||||
|
lib.optionalString (!enableStatic) ''
|
||||||
|
mkdir -p $out/lib
|
||||||
|
cp -pd ${boost}/lib/{libboost_context*,libboost_thread*,libboost_system*} $out/lib
|
||||||
|
rm -f $out/lib/*.a
|
||||||
|
${lib.optionalString stdenv.isLinux ''
|
||||||
|
chmod u+w $out/lib/*.so.*
|
||||||
|
patchelf --set-rpath $out/lib:${stdenv.cc.cc.lib}/lib $out/lib/libboost_thread.so.*
|
||||||
|
''}
|
||||||
|
'' +
|
||||||
|
# For Nix-2.3, patch around an issue where the Nix configure step pulls in the
|
||||||
|
# build system's bash and other utilities when cross-compiling
|
||||||
|
lib.optionalString (stdenv.buildPlatform != stdenv.hostPlatform && isExactly23) ''
|
||||||
|
mkdir tmp/
|
||||||
|
substitute corepkgs/config.nix.in tmp/config.nix.in \
|
||||||
|
--subst-var-by bash ${bash}/bin/bash \
|
||||||
|
--subst-var-by coreutils ${coreutils}/bin \
|
||||||
|
--subst-var-by bzip2 ${bzip2}/bin/bzip2 \
|
||||||
|
--subst-var-by gzip ${gzip}/bin/gzip \
|
||||||
|
--subst-var-by xz ${xz}/bin/xz \
|
||||||
|
--subst-var-by tar ${gnutar}/bin/tar \
|
||||||
|
--subst-var-by tr ${coreutils}/bin/tr
|
||||||
|
mv tmp/config.nix.in corepkgs/config.nix.in
|
||||||
|
'';
|
||||||
|
|
||||||
|
configureFlags =
|
||||||
|
[ "--with-store-dir=${storeDir}"
|
||||||
|
"--localstatedir=${stateDir}"
|
||||||
|
"--sysconfdir=${confDir}"
|
||||||
|
"--disable-init-state"
|
||||||
|
"--enable-gc"
|
||||||
|
]
|
||||||
|
++ lib.optionals stdenv.isLinux [
|
||||||
|
"--with-sandbox-shell=${sandbox-shell}"
|
||||||
|
]
|
||||||
|
++ lib.optional (
|
||||||
|
stdenv.hostPlatform != stdenv.buildPlatform && stdenv.hostPlatform ? nix && stdenv.hostPlatform.nix ? system
|
||||||
|
) ''--with-system=${stdenv.hostPlatform.nix.system}''
|
||||||
|
# RISC-V support in progress https://github.com/seccomp/libseccomp/pull/50
|
||||||
|
++ lib.optional (!withLibseccomp) "--disable-seccomp-sandboxing";
|
||||||
|
|
||||||
|
makeFlags = [ "profiledir=$(out)/etc/profile.d" ]
|
||||||
|
++ lib.optional (stdenv.hostPlatform != stdenv.buildPlatform) "PRECOMPILE_HEADERS=0";
|
||||||
|
|
||||||
|
installFlags = [ "sysconfdir=$(out)/etc" ];
|
||||||
|
|
||||||
|
doInstallCheck = true; # not cross
|
||||||
|
|
||||||
|
# socket path becomes too long otherwise
|
||||||
|
preInstallCheck = lib.optional stdenv.isDarwin ''
|
||||||
|
export TMPDIR=$NIX_BUILD_TOP
|
||||||
|
'';
|
||||||
|
|
||||||
|
separateDebugInfo = stdenv.isLinux;
|
||||||
|
|
||||||
|
enableParallelBuilding = true;
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
description = "Powerful package manager that makes package management reliable and reproducible";
|
||||||
|
longDescription = ''
|
||||||
|
Nix is a powerful package manager for Linux and other Unix systems that
|
||||||
|
makes package management reliable and reproducible. It provides atomic
|
||||||
|
upgrades and rollbacks, side-by-side installation of multiple versions of
|
||||||
|
a package, multi-user package management and easy setup of build
|
||||||
|
environments.
|
||||||
|
'';
|
||||||
|
homepage = "https://nixos.org/";
|
||||||
|
license = lib.licenses.lgpl2Plus;
|
||||||
|
maintainers = [ lib.maintainers.eelco ];
|
||||||
|
platforms = lib.platforms.unix;
|
||||||
|
outputsToInstall = [ "out" "man" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
passthru = {
|
||||||
|
perl-bindings = stdenv.mkDerivation {
|
||||||
|
pname = "nix-perl";
|
||||||
|
inherit version;
|
||||||
|
|
||||||
|
inherit src;
|
||||||
|
|
||||||
|
postUnpack = "sourceRoot=$sourceRoot/perl";
|
||||||
|
|
||||||
|
# This is not cross-compile safe, don't have time to fix right now
|
||||||
|
# but noting for future travellers.
|
||||||
|
nativeBuildInputs =
|
||||||
|
[ perl pkg-config curl nix libsodium boost autoreconfHook autoconf-archive ];
|
||||||
|
|
||||||
|
configureFlags =
|
||||||
|
[ "--with-dbi=${perlPackages.DBI}/${perl.libPrefix}"
|
||||||
|
"--with-dbd-sqlite=${perlPackages.DBDSQLite}/${perl.libPrefix}"
|
||||||
|
];
|
||||||
|
|
||||||
|
preConfigure = "export NIX_STATE_DIR=$TMPDIR";
|
||||||
|
|
||||||
|
preBuild = "unset NIX_INDENT_MAKE";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in nix;
|
||||||
|
|
||||||
|
in rec {
|
||||||
|
|
||||||
|
nix = nixStable;
|
||||||
|
|
||||||
|
nixStable = callPackage common (rec {
|
||||||
|
name = "nix-2.3.7";
|
||||||
|
src = fetchurl {
|
||||||
|
url = "https://nixos.org/releases/nix/${name}/${name}.tar.xz";
|
||||||
|
sha256 = "dd8f52849414e5a878afe7e797aa4e22bab77c875d9da5a38d5f1bada704e596";
|
||||||
|
};
|
||||||
|
|
||||||
|
inherit storeDir stateDir confDir boehmgc;
|
||||||
|
} // lib.optionalAttrs stdenv.cc.isClang {
|
||||||
|
stdenv = llvmPackages_6.stdenv;
|
||||||
|
});
|
||||||
|
|
||||||
|
nixUnstable = lib.lowPrio (callPackage common rec {
|
||||||
|
name = "nix-2.4${suffix}";
|
||||||
|
suffix = "pre20200721_ff314f1";
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "NixOS";
|
||||||
|
repo = "nix";
|
||||||
|
rev = "ff314f186e3f91d87af6ad96c0ae3b472494b940";
|
||||||
|
hash = "sha256-QibpLo4/gf2xYGoeQcgjZzH/qy5TBRVH+QCHgqOwur0=";
|
||||||
|
};
|
||||||
|
|
||||||
|
inherit storeDir stateDir confDir boehmgc;
|
||||||
|
});
|
||||||
|
|
||||||
|
nixFlakes = nixUnstable;
|
||||||
|
|
||||||
|
}
|
||||||
17
pkgs/nix/upload.sh
Executable file
17
pkgs/nix/upload.sh
Executable file
@@ -0,0 +1,17 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# This post build hook sends the closure of the just built derivation to the
|
||||||
|
# target machine. In our case this is the MareNostrum4 cluster.
|
||||||
|
|
||||||
|
# set -e fails as the profile runs some erroring programs
|
||||||
|
# We need the profile to load nix in the $PATH
|
||||||
|
. /etc/profile
|
||||||
|
|
||||||
|
set -eu
|
||||||
|
set -f # disable globbing
|
||||||
|
export IFS=' '
|
||||||
|
nixroot=/gpfs/projects/bsc15/nix
|
||||||
|
store=$nixroot/nix/store
|
||||||
|
target=ssh://mn
|
||||||
|
|
||||||
|
nix copy --to $target $OUT_PATHS
|
||||||
23
pkgs/nixgen/default.nix
Normal file
23
pkgs/nixgen/default.nix
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
stdenv
|
||||||
|
, lib
|
||||||
|
}:
|
||||||
|
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
pname = "nixgen";
|
||||||
|
version = "0.0.1";
|
||||||
|
src = ./nixgen;
|
||||||
|
dontUnpack = true;
|
||||||
|
strictDeps = 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
|
||||||
@@ -16,6 +16,7 @@ stdenv.mkDerivation rec {
|
|||||||
makeFlags = [ "DESTDIR=$(out)" ];
|
makeFlags = [ "DESTDIR=$(out)" ];
|
||||||
preBuild = "env";
|
preBuild = "env";
|
||||||
dontPatchShebangs = true;
|
dontPatchShebangs = true;
|
||||||
|
strictDeps = true;
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
homepage = "https://gitlab.pm.bsc.es/rarias/nixtools";
|
homepage = "https://gitlab.pm.bsc.es/rarias/nixtools";
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
, lib
|
, lib
|
||||||
, fetchFromGitHub
|
, fetchFromGitHub
|
||||||
, pkg-config
|
, pkg-config
|
||||||
, perl
|
|
||||||
, numactl
|
, numactl
|
||||||
, hwloc
|
, hwloc
|
||||||
, boost
|
, boost
|
||||||
@@ -11,22 +10,23 @@
|
|||||||
, ovni
|
, ovni
|
||||||
, nosv
|
, nosv
|
||||||
, clangOmpss2
|
, clangOmpss2
|
||||||
|
, which
|
||||||
, 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=";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -48,6 +48,7 @@ in
|
|||||||
enableParallelBuilding = true;
|
enableParallelBuilding = true;
|
||||||
dontStrip = true;
|
dontStrip = true;
|
||||||
separateDebugInfo = true;
|
separateDebugInfo = true;
|
||||||
|
strictDeps = true;
|
||||||
|
|
||||||
configureFlags = [
|
configureFlags = [
|
||||||
"--with-nosv=${nosv}"
|
"--with-nosv=${nosv}"
|
||||||
@@ -59,6 +60,7 @@ in
|
|||||||
doCheck = false;
|
doCheck = false;
|
||||||
nativeCheckInputs = [
|
nativeCheckInputs = [
|
||||||
clangOmpss2
|
clangOmpss2
|
||||||
|
which
|
||||||
];
|
];
|
||||||
|
|
||||||
# The "bindnow" flags are incompatible with ifunc resolution mechanism. We
|
# The "bindnow" flags are incompatible with ifunc resolution mechanism. We
|
||||||
|
|||||||
@@ -7,25 +7,25 @@
|
|||||||
, numactl
|
, numactl
|
||||||
, hwloc
|
, hwloc
|
||||||
, papi
|
, papi
|
||||||
, enablePapi ? stdenv.hostPlatform == stdenv.buildPlatform # Disabled when cross-compiling
|
, enablePapi ? true
|
||||||
, cacheline ? 64 # bits
|
, cacheline ? 64 # bits
|
||||||
, ovni ? null
|
, ovni ? null
|
||||||
, 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=";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -40,16 +40,17 @@ let
|
|||||||
|
|
||||||
source = if (useGit) then git else release;
|
source = if (useGit) then git else release;
|
||||||
in
|
in
|
||||||
stdenv.mkDerivation rec {
|
stdenv.mkDerivation {
|
||||||
pname = "nosv";
|
pname = "nosv";
|
||||||
inherit (source) src version;
|
inherit (source) src version;
|
||||||
hardeningDisable = [ "all" ];
|
hardeningDisable = [ "all" ];
|
||||||
dontStrip = true;
|
dontStrip = true;
|
||||||
separateDebugInfo = true;
|
separateDebugInfo = true;
|
||||||
|
strictDeps = true;
|
||||||
configureFlags = [
|
configureFlags = [
|
||||||
"--with-ovni=${ovni}"
|
"--with-ovni=${ovni}"
|
||||||
"CACHELINE_WIDTH=${toString cacheline}"
|
"CACHELINE_WIDTH=${toString cacheline}"
|
||||||
];
|
] ++ lib.optionals enablePapi [ "--with-papi=${papi}" ];
|
||||||
nativeBuildInputs = [
|
nativeBuildInputs = [
|
||||||
autoreconfHook
|
autoreconfHook
|
||||||
pkg-config
|
pkg-config
|
||||||
@@ -59,6 +60,7 @@ in
|
|||||||
hwloc
|
hwloc
|
||||||
ovni
|
ovni
|
||||||
] ++ lib.optionals enablePapi [ papi ];
|
] ++ lib.optionals enablePapi [ papi ];
|
||||||
|
patches = [ ./fix-papi.patch ];
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
homepage = "https://gitlab.bsc.es/nos-v/nos-v";
|
homepage = "https://gitlab.bsc.es/nos-v/nos-v";
|
||||||
|
|||||||
136
pkgs/nosv/fix-papi.patch
Normal file
136
pkgs/nosv/fix-papi.patch
Normal file
@@ -0,0 +1,136 @@
|
|||||||
|
Commit ID: c09633f172ce4075e0a05a33f6dcbe8e03e1202a
|
||||||
|
Change ID: onmwypnnrysktutwsvotqovzponvwrxs
|
||||||
|
Bookmarks: fix/papi fix/papi@git fix/papi@origin
|
||||||
|
Author : Aleix Boné <aleix.boneribo@bsc.es> (2025-12-10 11:14:14)
|
||||||
|
Committer: Aleix Boné <aleix.boneribo@bsc.es> (2025-12-12 12:56:48)
|
||||||
|
|
||||||
|
Improve PAPI m4 module for cross compilation
|
||||||
|
|
||||||
|
diff --git a/m4/papi.m4 b/m4/papi.m4
|
||||||
|
index de90584870..8398f856f5 100644
|
||||||
|
--- a/m4/papi.m4
|
||||||
|
+++ b/m4/papi.m4
|
||||||
|
@@ -1,6 +1,6 @@
|
||||||
|
# This file is part of Nanos6 and is licensed under the terms contained in the COPYING file.
|
||||||
|
#
|
||||||
|
-# Copyright (C) 2021-2022 Barcelona Supercomputing Center (BSC)
|
||||||
|
+# Copyright (C) 2021-2025 Barcelona Supercomputing Center (BSC)
|
||||||
|
|
||||||
|
AC_DEFUN([AC_CHECK_PAPI],
|
||||||
|
[
|
||||||
|
@@ -8,34 +8,38 @@
|
||||||
|
[papi],
|
||||||
|
[AS_HELP_STRING([--with-papi=prefix], [specify the installation prefix of PAPI])],
|
||||||
|
[ ac_cv_use_papi_prefix=$withval ],
|
||||||
|
- [ ac_cv_use_papi_prefix="" ]
|
||||||
|
+ [ ac_cv_use_papi_prefix="check" ]
|
||||||
|
)
|
||||||
|
|
||||||
|
if test x"${ac_cv_use_papi_prefix}" = x"no"; then
|
||||||
|
AC_MSG_CHECKING([the PAPI installation prefix])
|
||||||
|
AC_MSG_RESULT([${ac_cv_use_papi_prefix}])
|
||||||
|
ac_use_papi=no
|
||||||
|
- elif test x"${ac_cv_use_papi_prefix}" != x"" ; then
|
||||||
|
- AC_MSG_CHECKING([the PAPI installation prefix])
|
||||||
|
- AC_MSG_RESULT([${ac_cv_use_papi_prefix}])
|
||||||
|
- papi_LIBS="-L${ac_cv_use_papi_prefix}/lib -lpapi -Wl,-rpath,${ac_cv_use_papi_prefix}/lib"
|
||||||
|
- papi_CFLAGS="-I$ac_cv_use_papi_prefix/include"
|
||||||
|
- ac_use_papi=yes
|
||||||
|
- else
|
||||||
|
+ elif test x"${ac_cv_use_papi_prefix}" = x""; then
|
||||||
|
+ AC_MSG_RESULT([invalid prefix])
|
||||||
|
+ AC_MSG_ERROR([papi prefix specified but empty])
|
||||||
|
+ elif test x"${ac_cv_use_papi_prefix}" = x"yes" -o x"${ac_cv_use_papi_prefix}" = x"check"; then
|
||||||
|
PKG_CHECK_MODULES(
|
||||||
|
[papi],
|
||||||
|
- [papi],
|
||||||
|
+ [papi >= 5.6.0],
|
||||||
|
[
|
||||||
|
AC_MSG_CHECKING([the PAPI installation prefix])
|
||||||
|
AC_MSG_RESULT([retrieved from pkg-config])
|
||||||
|
papi_CFLAGS="${papi_CFLAGS}"
|
||||||
|
ac_use_papi=yes
|
||||||
|
+ ac_papi_version_correct=yes
|
||||||
|
], [
|
||||||
|
AC_MSG_CHECKING([the PAPI installation prefix])
|
||||||
|
AC_MSG_RESULT([not available])
|
||||||
|
ac_use_papi=no
|
||||||
|
]
|
||||||
|
)
|
||||||
|
+ else
|
||||||
|
+ AC_MSG_CHECKING([the PAPI installation prefix])
|
||||||
|
+ AC_MSG_RESULT([${ac_cv_use_papi_prefix}])
|
||||||
|
+ papi_LIBS="-L${ac_cv_use_papi_prefix}/lib -lpapi -Wl,-rpath,${ac_cv_use_papi_prefix}/lib"
|
||||||
|
+ papi_CFLAGS="-I$ac_cv_use_papi_prefix/include"
|
||||||
|
+ ac_use_papi=yes
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test x"${ac_use_papi}" = x"yes" ; then
|
||||||
|
@@ -53,10 +57,10 @@
|
||||||
|
ac_use_papi=yes
|
||||||
|
],
|
||||||
|
[
|
||||||
|
- if test x"${ac_cv_use_papi_prefix}" != x"" ; then
|
||||||
|
- AC_MSG_ERROR([PAPI cannot be found.])
|
||||||
|
+ if test x"${ac_cv_use_papi_prefix}" = x"yes" ; then
|
||||||
|
+ AC_MSG_ERROR([PAPI >= 5.6.0 cannot be found.])
|
||||||
|
else
|
||||||
|
- AC_MSG_WARN([PAPI cannot be found.])
|
||||||
|
+ AC_MSG_WARN([PAPI >= 5.6.0 not available.])
|
||||||
|
fi
|
||||||
|
ac_use_papi=no
|
||||||
|
]
|
||||||
|
@@ -64,30 +68,38 @@
|
||||||
|
|
||||||
|
CFLAGS="${ac_save_CFLAGS}"
|
||||||
|
LIBS="${ac_save_LIBS}"
|
||||||
|
+ elif test x"${ac_cv_use_papi_prefix}" = x"yes" ; then
|
||||||
|
+ AC_MSG_ERROR([PAPI >= 5.6.0 cannot be found.])
|
||||||
|
fi
|
||||||
|
|
||||||
|
- if test x"${ac_use_papi}" = x"yes" ; then
|
||||||
|
- if test x"${ac_cv_use_papi_prefix}" != x"" ; then
|
||||||
|
+ if test x"${ac_use_papi}" = x"yes" -a x"${ac_papi_version_correct}" != x"yes" ; then
|
||||||
|
+ if test x"${ac_cv_use_papi_prefix}" != x"yes" -a x"${ac_cv_use_papi_prefix}" != x"check" ; then
|
||||||
|
papiBinary=${ac_cv_use_papi_prefix}/bin/papi_version
|
||||||
|
else
|
||||||
|
papiBinary=papi_version
|
||||||
|
fi
|
||||||
|
- papiVersion=`$papiBinary | sed 's/[[^0-9.]]*\([[0-9.]]*\).*/\1/'`
|
||||||
|
|
||||||
|
- AX_COMPARE_VERSION(
|
||||||
|
- [[${papiVersion}]],
|
||||||
|
- [[ge]],
|
||||||
|
- [[5.6.0]],
|
||||||
|
- [[ac_papi_version_correct=yes]],
|
||||||
|
- [[ac_papi_version_correct=no]]
|
||||||
|
- )
|
||||||
|
|
||||||
|
- if test x"${ac_papi_version_correct}" != x"yes" ; then
|
||||||
|
- AC_MSG_ERROR([PAPI version must be >= 5.6.0.])
|
||||||
|
- ac_use_papi=no
|
||||||
|
+ if test x"$cross_compiling" = x"yes" ; then
|
||||||
|
+ AC_MSG_WARN([Cross-compiling detected, skipping PAPI version check])
|
||||||
|
else
|
||||||
|
- AC_MSG_CHECKING([if the PAPI version >= 5.6.0.])
|
||||||
|
- AC_MSG_RESULT([${ac_papi_version_correct}])
|
||||||
|
+ papiVersion=`$papiBinary | sed 's/[[^0-9.]]*\([[0-9.]]*\).*/\1/'`
|
||||||
|
+
|
||||||
|
+ AX_COMPARE_VERSION(
|
||||||
|
+ [[${papiVersion}]],
|
||||||
|
+ [[ge]],
|
||||||
|
+ [[5.6.0]],
|
||||||
|
+ [[ac_papi_version_correct=yes]],
|
||||||
|
+ [[ac_papi_version_correct=no]]
|
||||||
|
+ )
|
||||||
|
+
|
||||||
|
+ if test x"${ac_papi_version_correct}" != x"yes" ; then
|
||||||
|
+ AC_MSG_ERROR([PAPI version must be >= 5.6.0.])
|
||||||
|
+ ac_use_papi=no
|
||||||
|
+ else
|
||||||
|
+ AC_MSG_CHECKING([if the PAPI version >= 5.6.0.])
|
||||||
|
+ AC_MSG_RESULT([${ac_papi_version_correct}])
|
||||||
|
+ fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
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
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
||||||
120
pkgs/openmpi/default.nix
Normal file
120
pkgs/openmpi/default.nix
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
{ stdenv, lib, fetchurl, fetchpatch, gfortran, perl, libnl
|
||||||
|
, rdma-core, zlib, numactl, libevent, hwloc, targetPackages, symlinkJoin
|
||||||
|
, libpsm2, libfabric, pmix, pmi2, ucx
|
||||||
|
|
||||||
|
# Enable CUDA support
|
||||||
|
, cudaSupport ? false, cudatoolkit ? null
|
||||||
|
|
||||||
|
# Enable the Sun Grid Engine bindings
|
||||||
|
, enableSGE ? false
|
||||||
|
|
||||||
|
# Pass PATH/LD_LIBRARY_PATH to point to current mpirun by default
|
||||||
|
, enablePrefix ? false
|
||||||
|
|
||||||
|
# Enable libfabric support (necessary for Omnipath networks) on x86_64 linux
|
||||||
|
, fabricSupport ? stdenv.isLinux && stdenv.isx86_64
|
||||||
|
|
||||||
|
# Enable mpi_cxx.so
|
||||||
|
, enableCxx ? false
|
||||||
|
|
||||||
|
}:
|
||||||
|
|
||||||
|
assert !cudaSupport || cudatoolkit != null;
|
||||||
|
|
||||||
|
let
|
||||||
|
version = "4.0.4";
|
||||||
|
|
||||||
|
cudatoolkit_joined = symlinkJoin {
|
||||||
|
name = "${cudatoolkit.name}-unsplit";
|
||||||
|
paths = [ cudatoolkit.out cudatoolkit.lib ];
|
||||||
|
};
|
||||||
|
in stdenv.mkDerivation rec {
|
||||||
|
pname = "openmpi";
|
||||||
|
inherit version;
|
||||||
|
|
||||||
|
src = with lib.versions; fetchurl {
|
||||||
|
url = "https://www.open-mpi.org/software/ompi/v${major version}.${minor version}/downloads/${pname}-${version}.tar.bz2";
|
||||||
|
sha256 = "1i0slg2dxjdgw513aml1n9dsbdxn2fimi2b5712d5r9z4ar4xqj7";
|
||||||
|
};
|
||||||
|
|
||||||
|
postPatch = ''
|
||||||
|
patchShebangs ./
|
||||||
|
|
||||||
|
# Ensure build is reproducible
|
||||||
|
ts=`date -d @$SOURCE_DATE_EPOCH`
|
||||||
|
sed -i 's/OPAL_CONFIGURE_USER=.*/OPAL_CONFIGURE_USER="nixbld"/' configure
|
||||||
|
sed -i 's/OPAL_CONFIGURE_HOST=.*/OPAL_CONFIGURE_HOST="localhost"/' configure
|
||||||
|
sed -i "s/OPAL_CONFIGURE_DATE=.*/OPAL_CONFIGURE_DATE=\"$ts\"/" configure
|
||||||
|
find -name "Makefile.in" -exec sed -i "s/\`date\`/$ts/" \{} \;
|
||||||
|
'';
|
||||||
|
|
||||||
|
buildInputs = with stdenv; [ gfortran zlib ]
|
||||||
|
++ lib.optionals isLinux [ libnl numactl pmix ucx ]
|
||||||
|
++ lib.optionals cudaSupport [ cudatoolkit ]
|
||||||
|
++ [ libevent hwloc ]
|
||||||
|
++ lib.optional (isLinux || isFreeBSD) rdma-core
|
||||||
|
++ lib.optional fabricSupport [ libpsm2 libfabric ];
|
||||||
|
|
||||||
|
nativeBuildInputs = [ perl ];
|
||||||
|
|
||||||
|
configureFlags = with stdenv; lib.optional (!cudaSupport) "--disable-mca-dso"
|
||||||
|
++ lib.optionals isLinux [
|
||||||
|
"--with-libnl=${libnl.dev}"
|
||||||
|
"--with-pmix=${pmix}"
|
||||||
|
"--with-pmix-libdir=${pmix}/lib"
|
||||||
|
"--with-pmi=${pmi2}"
|
||||||
|
"--with-pmi-libdir=${pmi2}/lib"
|
||||||
|
] ++ lib.optional enableSGE "--with-sge"
|
||||||
|
++ lib.optional enablePrefix "--enable-mpirun-prefix-by-default"
|
||||||
|
# TODO: add UCX support, which is recommended to use with cuda for the most robust OpenMPI build
|
||||||
|
# https://github.com/openucx/ucx
|
||||||
|
# https://www.open-mpi.org/faq/?category=buildcuda
|
||||||
|
++ lib.optionals cudaSupport [ "--with-cuda=${cudatoolkit_joined}" "--enable-dlopen" ]
|
||||||
|
++ lib.optionals fabricSupport [ "--with-psm2=${libpsm2}" "--with-libfabric=${libfabric}" ]
|
||||||
|
++ lib.optional enableCxx "--enable-mpi-cxx"
|
||||||
|
;
|
||||||
|
|
||||||
|
enableParallelBuilding = true;
|
||||||
|
|
||||||
|
hardeningDisable = [ "all" ];
|
||||||
|
|
||||||
|
postInstall = ''
|
||||||
|
rm -f $out/lib/*.la
|
||||||
|
'';
|
||||||
|
|
||||||
|
postFixup = ''
|
||||||
|
# default compilers should be indentical to the
|
||||||
|
# compilers at build time
|
||||||
|
|
||||||
|
sed -i 's:compiler=.*:compiler=${targetPackages.stdenv.cc}/bin/${targetPackages.stdenv.cc.targetPrefix}cc:' \
|
||||||
|
$out/share/openmpi/mpicc-wrapper-data.txt
|
||||||
|
|
||||||
|
sed -i 's:compiler=.*:compiler=${targetPackages.stdenv.cc}/bin/${targetPackages.stdenv.cc.targetPrefix}cc:' \
|
||||||
|
$out/share/openmpi/ortecc-wrapper-data.txt
|
||||||
|
|
||||||
|
sed -i 's:compiler=.*:compiler=${targetPackages.stdenv.cc}/bin/${targetPackages.stdenv.cc.targetPrefix}c++:' \
|
||||||
|
$out/share/openmpi/mpic++-wrapper-data.txt
|
||||||
|
|
||||||
|
sed -i 's:compiler=.*:compiler=${gfortran}/bin/${gfortran.targetPrefix}gfortran:' \
|
||||||
|
$out/share/openmpi/mpifort-wrapper-data.txt
|
||||||
|
'';
|
||||||
|
|
||||||
|
doCheck = true;
|
||||||
|
|
||||||
|
passthru = {
|
||||||
|
inherit cudaSupport cudatoolkit;
|
||||||
|
};
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
homepage = "https://www.open-mpi.org/";
|
||||||
|
description = "Open source MPI-3 implementation";
|
||||||
|
longDescription = "The Open MPI Project is an open source MPI-3 implementation that is developed and maintained by a consortium of academic, research, and industry partners. Open MPI is therefore able to combine the expertise, technologies, and resources from all across the High Performance Computing community in order to build the best MPI library available. Open MPI offers advantages for system and software vendors, application developers and computer science researchers.";
|
||||||
|
maintainers = with maintainers; [ markuskowa ];
|
||||||
|
license = licenses.bsd3;
|
||||||
|
platforms = platforms.unix;
|
||||||
|
# In order to use OpenMPI with Extrae we need to keep the Extrae libraries
|
||||||
|
# rather than the ones from OpenMPI. This happens with libompitrace.so, so
|
||||||
|
# we set to a lower priority (higher value) the OpenMPI package.
|
||||||
|
priority = 10;
|
||||||
|
};
|
||||||
|
}
|
||||||
117
pkgs/openmpi/with-slurm.nix
Normal file
117
pkgs/openmpi/with-slurm.nix
Normal file
@@ -0,0 +1,117 @@
|
|||||||
|
{ stdenv, lib, fetchurl, fetchpatch, gfortran, perl, libnl
|
||||||
|
, rdma-core, zlib, numactl, libevent, hwloc, targetPackages, symlinkJoin
|
||||||
|
, libpsm2, libfabric
|
||||||
|
|
||||||
|
# Enable CUDA support
|
||||||
|
, cudaSupport ? false, cudatoolkit ? null
|
||||||
|
|
||||||
|
# Enable the Sun Grid Engine bindings
|
||||||
|
, enableSGE ? false
|
||||||
|
|
||||||
|
# Pass PATH/LD_LIBRARY_PATH to point to current mpirun by default
|
||||||
|
, enablePrefix ? false
|
||||||
|
|
||||||
|
# Enable libfabric support (necessary for Omnipath networks) on x86_64 linux
|
||||||
|
, fabricSupport ? stdenv.isLinux && stdenv.isx86_64
|
||||||
|
|
||||||
|
# Enable mpi_cxx.so
|
||||||
|
, enableCxx ? false
|
||||||
|
|
||||||
|
, slurm
|
||||||
|
|
||||||
|
}:
|
||||||
|
|
||||||
|
assert !cudaSupport || cudatoolkit != null;
|
||||||
|
|
||||||
|
let
|
||||||
|
version = "4.0.3";
|
||||||
|
|
||||||
|
cudatoolkit_joined = symlinkJoin {
|
||||||
|
name = "${cudatoolkit.name}-unsplit";
|
||||||
|
paths = [ cudatoolkit.out cudatoolkit.lib ];
|
||||||
|
};
|
||||||
|
in stdenv.mkDerivation rec {
|
||||||
|
pname = "openmpi";
|
||||||
|
inherit version;
|
||||||
|
|
||||||
|
src = with lib.versions; fetchurl {
|
||||||
|
url = "https://www.open-mpi.org/software/ompi/v${major version}.${minor version}/downloads/${pname}-${version}.tar.bz2";
|
||||||
|
sha256 = "00zxcw99gr5n693cmcmn4f6a47vx1ywna895p0x7p163v37gw0hl";
|
||||||
|
};
|
||||||
|
|
||||||
|
postPatch = ''
|
||||||
|
patchShebangs ./
|
||||||
|
|
||||||
|
# Ensure build is reproducible
|
||||||
|
ts=`date -d @$SOURCE_DATE_EPOCH`
|
||||||
|
sed -i 's/OPAL_CONFIGURE_USER=.*/OPAL_CONFIGURE_USER="nixbld"/' configure
|
||||||
|
sed -i 's/OPAL_CONFIGURE_HOST=.*/OPAL_CONFIGURE_HOST="localhost"/' configure
|
||||||
|
sed -i "s/OPAL_CONFIGURE_DATE=.*/OPAL_CONFIGURE_DATE=\"$ts\"/" configure
|
||||||
|
find -name "Makefile.in" -exec sed -i "s/\`date\`/$ts/" \{} \;
|
||||||
|
'';
|
||||||
|
|
||||||
|
buildInputs = with stdenv; [ gfortran zlib ]
|
||||||
|
++ lib.optionals isLinux [ libnl numactl ]
|
||||||
|
++ lib.optionals cudaSupport [ cudatoolkit ]
|
||||||
|
++ [ libevent hwloc ]
|
||||||
|
++ lib.optional (isLinux || isFreeBSD) rdma-core
|
||||||
|
++ lib.optional fabricSupport [ libpsm2 libfabric ]
|
||||||
|
++ [ slurm ];
|
||||||
|
|
||||||
|
nativeBuildInputs = [ perl ];
|
||||||
|
|
||||||
|
configureFlags = with stdenv; lib.optional (!cudaSupport) "--disable-mca-dso"
|
||||||
|
++ lib.optional isLinux "--with-libnl=${libnl.dev}"
|
||||||
|
++ lib.optional enableSGE "--with-sge"
|
||||||
|
++ lib.optional enablePrefix "--enable-mpirun-prefix-by-default"
|
||||||
|
# TODO: add UCX support, which is recommended to use with cuda for the most robust OpenMPI build
|
||||||
|
# https://github.com/openucx/ucx
|
||||||
|
# https://www.open-mpi.org/faq/?category=buildcuda
|
||||||
|
++ lib.optionals cudaSupport [ "--with-cuda=${cudatoolkit_joined}" "--enable-dlopen" ]
|
||||||
|
++ lib.optionals fabricSupport [ "--with-psm2=${libpsm2}" "--with-libfabric=${libfabric}" ]
|
||||||
|
++ lib.optional enableCxx "--enable-mpi-cxx"
|
||||||
|
++ [ "--with-slurm=${slurm}" "--with-pmi" "--enable-static" "--disable-dlopen" ]
|
||||||
|
;
|
||||||
|
|
||||||
|
enableParallelBuilding = true;
|
||||||
|
|
||||||
|
postInstall = ''
|
||||||
|
rm -f $out/lib/*.la
|
||||||
|
'';
|
||||||
|
|
||||||
|
postFixup = ''
|
||||||
|
# default compilers should be indentical to the
|
||||||
|
# compilers at build time
|
||||||
|
|
||||||
|
sed -i 's:compiler=.*:compiler=${targetPackages.stdenv.cc}/bin/${targetPackages.stdenv.cc.targetPrefix}cc:' \
|
||||||
|
$out/share/openmpi/mpicc-wrapper-data.txt
|
||||||
|
|
||||||
|
sed -i 's:compiler=.*:compiler=${targetPackages.stdenv.cc}/bin/${targetPackages.stdenv.cc.targetPrefix}cc:' \
|
||||||
|
$out/share/openmpi/ortecc-wrapper-data.txt
|
||||||
|
|
||||||
|
sed -i 's:compiler=.*:compiler=${targetPackages.stdenv.cc}/bin/${targetPackages.stdenv.cc.targetPrefix}c++:' \
|
||||||
|
$out/share/openmpi/mpic++-wrapper-data.txt
|
||||||
|
|
||||||
|
sed -i 's:compiler=.*:compiler=${gfortran}/bin/${gfortran.targetPrefix}gfortran:' \
|
||||||
|
$out/share/openmpi/mpifort-wrapper-data.txt
|
||||||
|
'';
|
||||||
|
|
||||||
|
doCheck = true;
|
||||||
|
|
||||||
|
passthru = {
|
||||||
|
inherit cudaSupport cudatoolkit;
|
||||||
|
};
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
homepage = "https://www.open-mpi.org/";
|
||||||
|
description = "Open source MPI-3 implementation";
|
||||||
|
longDescription = "The Open MPI Project is an open source MPI-3 implementation that is developed and maintained by a consortium of academic, research, and industry partners. Open MPI is therefore able to combine the expertise, technologies, and resources from all across the High Performance Computing community in order to build the best MPI library available. Open MPI offers advantages for system and software vendors, application developers and computer science researchers.";
|
||||||
|
maintainers = with maintainers; [ markuskowa ];
|
||||||
|
license = licenses.bsd3;
|
||||||
|
platforms = platforms.unix;
|
||||||
|
# In order to use OpenMPI with Extrae we need to keep the Extrae libraries
|
||||||
|
# rather than the ones from OpenMPI. This happens with libompitrace.so, so
|
||||||
|
# we set to a lower priority (higher value) the OpenMPI package.
|
||||||
|
priority = 10;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -24,6 +24,7 @@ stdenv.mkDerivation rec {
|
|||||||
|
|
||||||
doCheck = true;
|
doCheck = true;
|
||||||
enableParallelBuilding = true;
|
enableParallelBuilding = true;
|
||||||
|
strictDeps = true;
|
||||||
nativeBuildInputs = [ mpiAll ];
|
nativeBuildInputs = [ mpiAll ];
|
||||||
buildInputs = [ mpiAll ];
|
buildInputs = [ mpiAll ];
|
||||||
hardeningDisable = [ "all" ];
|
hardeningDisable = [ "all" ];
|
||||||
@@ -32,6 +33,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 +50,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;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user