Compare commits
20 Commits
cc63e6f3f3
...
9107cad699
| Author | SHA1 | Date | |
|---|---|---|---|
| 9107cad699 | |||
| 86edeba765 | |||
| a173af654f | |||
| 2fff7e4a7b | |||
| a761b73336 | |||
| 86eb796771 | |||
| 08633435cf | |||
| 39d64456a4 | |||
| 410040a4a0 | |||
| fc69ef3217 | |||
| 1d025f7a38 | |||
| 7989779c8f | |||
| 7d721084a7 | |||
| 796d34a549 | |||
| 5ff1b1343b | |||
| c5cc13fad8 | |||
| 2e09314a7e | |||
| 217d9c1fc0 | |||
| f47ab7757e | |||
| 4b265c071e |
@ -5,8 +5,8 @@
|
|||||||
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 config.boot.kernelPackages.perf ldns pv
|
||||||
# From bsckgs overlay
|
# From jungle overlay
|
||||||
osumb
|
osumb nixgen
|
||||||
];
|
];
|
||||||
|
|
||||||
programs.direnv.enable = true;
|
programs.direnv.enable = true;
|
||||||
|
|||||||
@ -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;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|||||||
32
overlay.nix
32
overlay.nix
@ -1,9 +1,8 @@
|
|||||||
final: /* Future last stage */
|
final: /* Future last stage */
|
||||||
prev: /* Previous stage */
|
prev: /* Previous stage */
|
||||||
|
|
||||||
with final.lib;
|
|
||||||
|
|
||||||
let
|
let
|
||||||
|
lib = prev.lib;
|
||||||
callPackage = final.callPackage;
|
callPackage = final.callPackage;
|
||||||
|
|
||||||
bscPkgs = {
|
bscPkgs = {
|
||||||
@ -36,7 +35,9 @@ let
|
|||||||
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; };
|
||||||
|
nix = callPackage ./pkgs/nix/default.nix { nix = prev.nix; };
|
||||||
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 { };
|
||||||
@ -96,18 +97,23 @@ let
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Load our custom lib functions with import, callPackage fails.
|
||||||
|
lib' = import ./pkgs/lib.nix { lib = prev.lib; };
|
||||||
|
|
||||||
# For now, only build toplevel packages in CI/Hydra
|
# For now, only build toplevel packages in CI/Hydra
|
||||||
pkgsTopLevel = filterAttrs (_: isDerivation) bscPkgs;
|
pkgsTopLevel = lib.filterAttrs (_: lib.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 { } ''
|
||||||
@ -122,21 +128,17 @@ let
|
|||||||
'';
|
'';
|
||||||
|
|
||||||
pkgsList = buildList "ci-pkgs" (builtins.attrValues pkgsTopLevel);
|
pkgsList = buildList "ci-pkgs" (builtins.attrValues pkgsTopLevel);
|
||||||
testsList = buildList "ci-tests" (collect isDerivation tests);
|
testsList = buildList "ci-tests" (lib.collect lib.isDerivation tests);
|
||||||
allList = buildList' "ci-all" [ pkgsList testsList ];
|
allList = buildList' "ci-all" [ pkgsList testsList ];
|
||||||
# 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 // {
|
||||||
|
|
||||||
lib = prev.lib // {
|
lib = lib';
|
||||||
maintainers = prev.lib.maintainers // {
|
|
||||||
bsc = import ./pkgs/maintainers.nix;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# Prevent accidental usage of bsc-ci attribute
|
# Prevent accidental usage of bsc-ci attribute
|
||||||
bsc-ci = throw "the bsc-ci attribute is deprecated, use bsc.ci";
|
bsc-ci = throw "the bsc-ci attribute is deprecated, use bsc.ci";
|
||||||
|
|||||||
@ -90,7 +90,7 @@ in
|
|||||||
meta = {
|
meta = {
|
||||||
description = "Performance analysis tool-suite for x86 based applications";
|
description = "Performance analysis tool-suite for x86 based applications";
|
||||||
homepage = "https://www.amd.com/es/developer/uprof.html";
|
homepage = "https://www.amd.com/es/developer/uprof.html";
|
||||||
platforms = lib.platforms.linux;
|
platforms = [ "x86_64-linux" ];
|
||||||
license = lib.licenses.unfree;
|
license = lib.licenses.unfree;
|
||||||
maintainers = with lib.maintainers.bsc; [ rarias varcila ];
|
maintainers = with lib.maintainers.bsc; [ rarias varcila ];
|
||||||
};
|
};
|
||||||
|
|||||||
@ -14,16 +14,19 @@
|
|||||||
, openblas
|
, openblas
|
||||||
, ovni
|
, ovni
|
||||||
, gitBranch ? "master"
|
, gitBranch ? "master"
|
||||||
, gitURL ? "ssh://git@bscpm04.bsc.es/rarias/bench6.git"
|
|
||||||
, gitCommit ? "bf29a53113737c3aa74d2fe3d55f59868faea7b4"
|
, gitCommit ? "bf29a53113737c3aa74d2fe3d55f59868faea7b4"
|
||||||
|
, gitUrls ? [
|
||||||
|
"ssh://git@bscpm04.bsc.es/rarias/bench6.git"
|
||||||
|
"https://github.com/rodarima/bench6.git"
|
||||||
|
]
|
||||||
}:
|
}:
|
||||||
|
|
||||||
stdenv.mkDerivation rec {
|
stdenv.mkDerivation rec {
|
||||||
pname = "bench6";
|
pname = "bench6";
|
||||||
version = "${src.shortRev}";
|
version = "${src.shortRev}";
|
||||||
|
|
||||||
src = builtins.fetchGit {
|
src = lib.fetchGitMirror {
|
||||||
url = gitURL;
|
urls = gitUrls;
|
||||||
ref = gitBranch;
|
ref = gitBranch;
|
||||||
rev = gitCommit;
|
rev = gitCommit;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
stdenv
|
stdenv
|
||||||
|
, lib
|
||||||
, cudatoolkit
|
, cudatoolkit
|
||||||
, cudaPackages
|
, cudaPackages
|
||||||
, autoAddDriverRunpath
|
, autoAddDriverRunpath
|
||||||
@ -40,4 +41,9 @@ stdenv.mkDerivation (finalAttrs: {
|
|||||||
'';
|
'';
|
||||||
installPhase = "touch $out";
|
installPhase = "touch $out";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
platforms = [ "x86_64-linux" ];
|
||||||
|
maintainers = with lib.maintainers.bsc; [ rarias ];
|
||||||
|
};
|
||||||
})
|
})
|
||||||
|
|||||||
@ -9,7 +9,6 @@
|
|||||||
, automake
|
, automake
|
||||||
, libtool
|
, libtool
|
||||||
, mpi
|
, mpi
|
||||||
, rsync
|
|
||||||
, gfortran
|
, gfortran
|
||||||
}:
|
}:
|
||||||
|
|
||||||
@ -44,13 +43,24 @@ stdenv.mkDerivation rec {
|
|||||||
|
|
||||||
configureFlags = [
|
configureFlags = [
|
||||||
"--with-infiniband=${rdma-core-all}"
|
"--with-infiniband=${rdma-core-all}"
|
||||||
"--with-mpi=${mpiAll}"
|
"--with-mpi=yes" # fixes mpi detection when cross-compiling
|
||||||
"--with-slurm"
|
"--with-slurm"
|
||||||
"CFLAGS=-fPIC"
|
"CFLAGS=-fPIC"
|
||||||
"CXXFLAGS=-fPIC"
|
"CXXFLAGS=-fPIC"
|
||||||
];
|
];
|
||||||
|
|
||||||
buildInputs = [ slurm mpiAll rdma-core-all autoconf automake libtool rsync gfortran ];
|
nativeBuildInputs = [
|
||||||
|
autoconf
|
||||||
|
automake
|
||||||
|
gfortran
|
||||||
|
libtool
|
||||||
|
];
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
slurm
|
||||||
|
mpiAll
|
||||||
|
rdma-core-all
|
||||||
|
];
|
||||||
|
|
||||||
hardeningDisable = [ "all" ];
|
hardeningDisable = [ "all" ];
|
||||||
|
|
||||||
@ -60,5 +70,6 @@ stdenv.mkDerivation rec {
|
|||||||
maintainers = with lib.maintainers.bsc; [ rarias ];
|
maintainers = with lib.maintainers.bsc; [ rarias ];
|
||||||
platforms = lib.platforms.linux;
|
platforms = lib.platforms.linux;
|
||||||
license = lib.licenses.gpl3Plus;
|
license = lib.licenses.gpl3Plus;
|
||||||
|
cross = false; # infiniband detection does not work
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
30
pkgs/lib.nix
Normal file
30
pkgs/lib.nix
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
{ lib }:
|
||||||
|
|
||||||
|
let
|
||||||
|
# If not supported, fall back to tryEval, which will fail in the first case.
|
||||||
|
safeCatchAll = if (builtins ? catchAll)
|
||||||
|
then builtins.catchAll
|
||||||
|
else e: (builtins.tryEval e) // { msg = ""; };
|
||||||
|
in lib.extend (_: lib: {
|
||||||
|
# Same as fetchGit but accepts a list of mirror urls
|
||||||
|
fetchGitMirror = { urls, ... } @ args:
|
||||||
|
let
|
||||||
|
cleanArgs = lib.removeAttrs args [ "urls" ];
|
||||||
|
fetchUrl = url: builtins.fetchGit (cleanArgs // { inherit url; });
|
||||||
|
safeFetch = url: safeCatchAll (fetchUrl url);
|
||||||
|
complain = url:
|
||||||
|
let
|
||||||
|
r = safeFetch url;
|
||||||
|
in
|
||||||
|
if (r.success) then r
|
||||||
|
else lib.warn "cannot fetch ${url}, trying next
|
||||||
|
mirror:${builtins.replaceStrings ["\n" ] ["\n> "] ("\n"+r.msg)}" r;
|
||||||
|
fetchList = lib.map (url: complain url) urls;
|
||||||
|
bad = throw "cannot fetch from any mirror";
|
||||||
|
good = lib.findFirst (e: e.success) bad fetchList;
|
||||||
|
in good.value;
|
||||||
|
|
||||||
|
maintainers = lib.maintainers // {
|
||||||
|
bsc = import ./maintainers.nix;
|
||||||
|
};
|
||||||
|
})
|
||||||
@ -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=";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -6,6 +6,13 @@
|
|||||||
, pmix
|
, pmix
|
||||||
, gfortran
|
, gfortran
|
||||||
, symlinkJoin
|
, symlinkJoin
|
||||||
|
# Disabled when cross-compiling
|
||||||
|
# To fix cross compilation, we should fill the values in:
|
||||||
|
# https://github.com/pmodels/mpich/blob/main/maint/fcrosscompile/cross_values.txt.in
|
||||||
|
# For each arch
|
||||||
|
, enableFortran ? stdenv.hostPlatform == stdenv.buildPlatform
|
||||||
|
, perl
|
||||||
|
, targetPackages
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
@ -15,10 +22,13 @@ let
|
|||||||
paths = [ pmix.dev pmix.out ];
|
paths = [ pmix.dev pmix.out ];
|
||||||
};
|
};
|
||||||
in mpich.overrideAttrs (old: {
|
in mpich.overrideAttrs (old: {
|
||||||
buildInput = old.buildInputs ++ [
|
buildInputs = old.buildInputs ++ [
|
||||||
libfabric
|
libfabric
|
||||||
pmixAll
|
pmixAll
|
||||||
];
|
];
|
||||||
|
nativeBuildInputs = old.nativeBuildInputs ++ [
|
||||||
|
perl
|
||||||
|
];
|
||||||
configureFlags = [
|
configureFlags = [
|
||||||
"--enable-shared"
|
"--enable-shared"
|
||||||
"--enable-sharedlib"
|
"--enable-sharedlib"
|
||||||
@ -31,10 +41,21 @@ in mpich.overrideAttrs (old: {
|
|||||||
] ++ lib.optionals (lib.versionAtLeast gfortran.version "10") [
|
] ++ lib.optionals (lib.versionAtLeast gfortran.version "10") [
|
||||||
"FFLAGS=-fallow-argument-mismatch" # https://github.com/pmodels/mpich/issues/4300
|
"FFLAGS=-fallow-argument-mismatch" # https://github.com/pmodels/mpich/issues/4300
|
||||||
"FCFLAGS=-fallow-argument-mismatch"
|
"FCFLAGS=-fallow-argument-mismatch"
|
||||||
|
] ++ lib.optionals (!enableFortran) [
|
||||||
|
"--disable-fortran"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
preFixup = ''
|
||||||
|
sed -i 's:^CC=.*:CC=${targetPackages.stdenv.cc}/bin/${targetPackages.stdenv.cc.targetPrefix}cc:' $out/bin/mpicc
|
||||||
|
sed -i 's:^CXX=.*:CXX=${targetPackages.stdenv.cc}/bin/${targetPackages.stdenv.cc.targetPrefix}c++:' $out/bin/mpicxx
|
||||||
|
'' + lib.optionalString enableFortran ''
|
||||||
|
sed -i 's:^FC=.*:FC=${targetPackages.gfortran or gfortran}/bin/${targetPackages.gfortran.targetPrefix or gfortran.targetPrefix}gfortran:' $out/bin/mpifort
|
||||||
|
'';
|
||||||
|
|
||||||
hardeningDisable = [ "all" ];
|
hardeningDisable = [ "all" ];
|
||||||
|
|
||||||
meta = old.meta // {
|
meta = old.meta // {
|
||||||
maintainers = old.meta.maintainers ++ (with lib.maintainers.bsc; [ rarias ]);
|
maintainers = old.meta.maintainers ++ (with lib.maintainers.bsc; [ rarias ]);
|
||||||
|
cross = true;
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
|
|||||||
64
pkgs/nix/add-catchAll.patch
Normal file
64
pkgs/nix/add-catchAll.patch
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
From 3aa73c21e3afc91522a6121b0d591af6925b4ba6 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Rodrigo Arias Mallo <rodarima@gmail.com>
|
||||||
|
Date: Mon, 13 Oct 2025 16:05:30 +0200
|
||||||
|
Subject: [PATCH] Add builtins.catchAll to catch all types of errors
|
||||||
|
|
||||||
|
Allows fetching multiple Git repositories with builtin.fetchGit and
|
||||||
|
catching any errors thrown by the builtin, in opposition to the builtin
|
||||||
|
tryEval.
|
||||||
|
---
|
||||||
|
src/libexpr/primops.cc | 38 ++++++++++++++++++++++++++++++++++++++
|
||||||
|
1 file changed, 38 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc
|
||||||
|
index 36a67a39d..3b26f9f43 100644
|
||||||
|
--- a/src/libexpr/primops.cc
|
||||||
|
+++ b/src/libexpr/primops.cc
|
||||||
|
@@ -849,6 +849,44 @@ static RegisterPrimOp primop_tryEval({
|
||||||
|
.fun = prim_tryEval,
|
||||||
|
});
|
||||||
|
|
||||||
|
+/* Like tryEval but catch all errors. Success => {success=true; value=something;},
|
||||||
|
+ * else => {success=false; value=false;} */
|
||||||
|
+static void prim_catchAll(EvalState & state, const PosIdx pos, Value * * args, Value & v)
|
||||||
|
+{
|
||||||
|
+ auto attrs = state.buildBindings(3);
|
||||||
|
+ try {
|
||||||
|
+ state.forceValue(*args[0], pos);
|
||||||
|
+ attrs.insert(state.sValue, args[0]);
|
||||||
|
+ attrs.alloc("success").mkBool(true);
|
||||||
|
+ attrs.alloc("msg").mkNull();
|
||||||
|
+ } catch (Error & e) {
|
||||||
|
+ attrs.alloc(state.sValue).mkBool(false);
|
||||||
|
+ attrs.alloc("success").mkBool(false);
|
||||||
|
+ attrs.alloc("msg").mkString(e.msg());
|
||||||
|
+ }
|
||||||
|
+ v.mkAttrs(attrs);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static RegisterPrimOp primop_catchAll({
|
||||||
|
+ .name = "__catchAll",
|
||||||
|
+ .args = {"e"},
|
||||||
|
+ .doc = R"(
|
||||||
|
+ Try to shallowly evaluate *e*. Return a set containing the
|
||||||
|
+ attributes `success` (`true` if *e* evaluated successfully,
|
||||||
|
+ `false` if an error was thrown) and `value`, equalling *e* if
|
||||||
|
+ successful and `false` otherwise. In contrast with `tryEval`,
|
||||||
|
+ `catchAll` will prevent all errors from being thrown, including
|
||||||
|
+ for those created by `abort` and type errors generated by
|
||||||
|
+ builtins. Also note that this doesn't evaluate *e* deeply, so
|
||||||
|
+ `let e = { x = throw ""; }; in (builtins.catchAll e).success`
|
||||||
|
+ will be `true`. Using `builtins.deepSeq` one can get the expected
|
||||||
|
+ result: `let e = { x = throw ""; }; in
|
||||||
|
+ (builtins.catchAll (builtins.deepSeq e e)).success` will be
|
||||||
|
+ `false`.
|
||||||
|
+ )",
|
||||||
|
+ .fun = prim_catchAll,
|
||||||
|
+});
|
||||||
|
+
|
||||||
|
/* Return an environment variable. Use with care. */
|
||||||
|
static void prim_getEnv(EvalState & state, const PosIdx pos, Value * * args, Value & v)
|
||||||
|
{
|
||||||
|
--
|
||||||
|
2.51.0
|
||||||
|
|
||||||
@ -1,219 +1,7 @@
|
|||||||
{ lib, fetchurl, fetchFromGitHub, callPackage
|
{ nix }:
|
||||||
, storeDir ? "/nix/store"
|
|
||||||
, stateDir ? "/nix/var"
|
|
||||||
, confDir ? "/etc"
|
|
||||||
, boehmgc
|
|
||||||
, stdenv, llvmPackages_6
|
|
||||||
}:
|
|
||||||
|
|
||||||
let
|
nix.overrideAttrs (old: {
|
||||||
|
patches = (old.patches or []) ++ [
|
||||||
common =
|
./add-catchAll.patch
|
||||||
{ 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;
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|||||||
22
pkgs/nixgen/default.nix
Normal file
22
pkgs/nixgen/default.nix
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
stdenv
|
||||||
|
, lib
|
||||||
|
}:
|
||||||
|
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
pname = "nixgen";
|
||||||
|
version = "0.0.1";
|
||||||
|
src = ./nixgen;
|
||||||
|
dontUnpack = true;
|
||||||
|
phases = [ "installPhase" ];
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out/bin
|
||||||
|
cp -a $src $out/bin/nixgen
|
||||||
|
'';
|
||||||
|
meta = {
|
||||||
|
description = "Quickly generate flake.nix from command line";
|
||||||
|
maintainers = with lib.maintainers.bsc; [ rarias ];
|
||||||
|
platforms = lib.platforms.linux;
|
||||||
|
license = lib.licenses.gpl3Plus;
|
||||||
|
};
|
||||||
|
}
|
||||||
97
pkgs/nixgen/nixgen
Executable file
97
pkgs/nixgen/nixgen
Executable file
@ -0,0 +1,97 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Copyright (c) 2025, Barcelona Supercomputing Center (BSC)
|
||||||
|
# SPDX-License-Identifier: GPL-3.0+
|
||||||
|
# Author: Rodrigo Arias Mallo <rodrigo.arias@bsc.es>
|
||||||
|
|
||||||
|
function usage() {
|
||||||
|
echo "USAGE: nixgen [-f] [package [...]] [-b package [...]]" >&2
|
||||||
|
echo " Generates a flake.nix file with the given packages." >&2
|
||||||
|
echo " After flake.nix is created, use 'nix develop' to enter the shell." >&2
|
||||||
|
echo "OPTIONS" >&2
|
||||||
|
echo " -f Overwrite existing flake.nix (default: no)." >&2
|
||||||
|
echo " packages... Add these packages to the shell." >&2
|
||||||
|
echo " -b packages... Add the dependencies needed to build these packages." >&2
|
||||||
|
echo "EXAMPLE" >&2
|
||||||
|
echo " $ nixgen ovni bigotes -b nosv tampi" >&2
|
||||||
|
echo " Adds the packages ovni and bigotes as well as all required dependencies" >&2
|
||||||
|
echo " to build nosv and tampi." >&2
|
||||||
|
echo "AUTHOR" >&2
|
||||||
|
echo " Rodrigo Arias Mallo <rodrigo.arias@bsc.es>" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
mode=package
|
||||||
|
packages=
|
||||||
|
inputsFrom=
|
||||||
|
force=
|
||||||
|
|
||||||
|
if [[ $# -eq 0 ]]; then
|
||||||
|
usage
|
||||||
|
fi
|
||||||
|
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case $1 in -b)
|
||||||
|
mode=build
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-f)
|
||||||
|
force=1
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-h)
|
||||||
|
usage
|
||||||
|
;;
|
||||||
|
-*|--*)
|
||||||
|
echo "error: unknown option $1" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
if [ "$mode" == "package" ]; then
|
||||||
|
packages+="${packages:+ }$1"
|
||||||
|
else
|
||||||
|
inputsFrom+="${inputsFrom:+ }$1"
|
||||||
|
fi
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ ! "$force" -a -e flake.nix ]; then
|
||||||
|
echo "error: flake.nix exists, force overwrite with -f" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat > flake.nix <<EOF
|
||||||
|
{
|
||||||
|
inputs.jungle.url = "git+https://jungle.bsc.es/git/rarias/jungle";
|
||||||
|
outputs = { self, jungle }:
|
||||||
|
let
|
||||||
|
nixpkgs = jungle.inputs.nixpkgs;
|
||||||
|
customOverlay = (final: prev: {
|
||||||
|
# Example overlay, for now empty
|
||||||
|
});
|
||||||
|
pkgs = import nixpkgs {
|
||||||
|
system = "x86_64-linux";
|
||||||
|
overlays = [
|
||||||
|
# Apply jungle overlay to get our BSC custom packages
|
||||||
|
jungle.outputs.bscOverlay
|
||||||
|
# And on top apply our local changes to customize for cluster
|
||||||
|
customOverlay
|
||||||
|
];
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
devShells.x86_64-linux.default = pkgs.mkShell {
|
||||||
|
pname = "devshell";
|
||||||
|
# Include these packages in the shell
|
||||||
|
packages = with pkgs; [
|
||||||
|
$packages
|
||||||
|
];
|
||||||
|
# The dependencies needed to build these packages will be also included
|
||||||
|
inputsFrom = with pkgs; [
|
||||||
|
$inputsFrom
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
EOF
|
||||||
@ -14,19 +14,19 @@
|
|||||||
, useGit ? false
|
, useGit ? false
|
||||||
, gitUrl ? "ssh://git@gitlab-internal.bsc.es/nos-v/nodes.git"
|
, gitUrl ? "ssh://git@gitlab-internal.bsc.es/nos-v/nodes.git"
|
||||||
, gitBranch ? "master"
|
, gitBranch ? "master"
|
||||||
, gitCommit ? "6002ec9ae6eb876d962cc34366952a3b26599ba6"
|
, gitCommit ? "511489e71504a44381e0930562e7ac80ac69a848" # version-1.4
|
||||||
}:
|
}:
|
||||||
|
|
||||||
with lib;
|
with lib;
|
||||||
|
|
||||||
let
|
let
|
||||||
release = rec {
|
release = rec {
|
||||||
version = "1.3";
|
version = "1.4";
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "bsc-pm";
|
owner = "bsc-pm";
|
||||||
repo = "nodes";
|
repo = "nodes";
|
||||||
rev = "version-${version}";
|
rev = "version-${version}";
|
||||||
hash = "sha256-cFb9pxcjtkMmH0CsGgUO9LTdXDNh7MCqicgGWawLrsU=";
|
hash = "sha256-+lR/R0l3fGZO3XG7whMorFW2y2YZ0ZFnLeOHyQYrAsQ=";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -13,19 +13,19 @@
|
|||||||
, useGit ? false
|
, useGit ? false
|
||||||
, gitUrl ? "git@gitlab-internal.bsc.es:nos-v/nos-v.git"
|
, gitUrl ? "git@gitlab-internal.bsc.es:nos-v/nos-v.git"
|
||||||
, gitBranch ? "master"
|
, gitBranch ? "master"
|
||||||
, gitCommit ? "9f47063873c3aa9d6a47482a82c5000a8c813dd8"
|
, gitCommit ? "1108e4786b58e0feb9a16fa093010b763eb2f8e8" # version 4.0.0
|
||||||
}:
|
}:
|
||||||
|
|
||||||
with lib;
|
with lib;
|
||||||
|
|
||||||
let
|
let
|
||||||
release = rec {
|
release = rec {
|
||||||
version = "3.2.0";
|
version = "4.0.0";
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "bsc-pm";
|
owner = "bsc-pm";
|
||||||
repo = "nos-v";
|
repo = "nos-v";
|
||||||
rev = "${version}";
|
rev = "${version}";
|
||||||
hash = "sha256-yaz92426EM8trdkBJlISmAoG9KJCDTvoAW/HKrasvOw=";
|
hash = "sha256-llaq73bd/YxLVKNlMebnUHKa4z3sdcsuDUoVwUxNuw8=";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -32,6 +32,11 @@ stdenv.mkDerivation rec {
|
|||||||
"CXX=mpicxx"
|
"CXX=mpicxx"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
env = {
|
||||||
|
MPICH_CC="${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc";
|
||||||
|
MPICH_CXX="${stdenv.cc}/bin/${stdenv.cc.targetPrefix}c++";
|
||||||
|
};
|
||||||
|
|
||||||
postInstall = ''
|
postInstall = ''
|
||||||
mkdir -p $out/bin
|
mkdir -p $out/bin
|
||||||
for f in $(find $out -executable -type f); do
|
for f in $(find $out -executable -type f); do
|
||||||
@ -44,5 +49,6 @@ stdenv.mkDerivation rec {
|
|||||||
homepage = "http://mvapich.cse.ohio-state.edu/benchmarks/";
|
homepage = "http://mvapich.cse.ohio-state.edu/benchmarks/";
|
||||||
maintainers = [ ];
|
maintainers = [ ];
|
||||||
platforms = lib.platforms.all;
|
platforms = lib.platforms.all;
|
||||||
|
cross = true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,7 +7,7 @@
|
|||||||
, useGit ? false
|
, useGit ? false
|
||||||
, gitBranch ? "master"
|
, gitBranch ? "master"
|
||||||
, gitUrl ? "ssh://git@bscpm04.bsc.es/rarias/ovni.git"
|
, gitUrl ? "ssh://git@bscpm04.bsc.es/rarias/ovni.git"
|
||||||
, gitCommit ? "e4f62382076f0cf0b1d08175cf57cc0bc51abc61"
|
, gitCommit ? "06432668f346c8bdc1006fabc23e94ccb81b0d8b" # version 1.13.0
|
||||||
, enableDebug ? false
|
, enableDebug ? false
|
||||||
# Only enable MPI if the build is native (fails on cross-compilation)
|
# Only enable MPI if the build is native (fails on cross-compilation)
|
||||||
, useMpi ? (stdenv.buildPlatform.canExecute stdenv.hostPlatform)
|
, useMpi ? (stdenv.buildPlatform.canExecute stdenv.hostPlatform)
|
||||||
@ -15,13 +15,13 @@
|
|||||||
|
|
||||||
let
|
let
|
||||||
release = rec {
|
release = rec {
|
||||||
version = "1.12.0";
|
version = "1.13.0";
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "bsc-pm";
|
owner = "bsc-pm";
|
||||||
repo = "ovni";
|
repo = "ovni";
|
||||||
rev = "${version}";
|
rev = "${version}";
|
||||||
hash = "sha256-H04JvsVKrdqr3ON7JhU0g17jjlg/jzQ7eTfx9vUNd3E=";
|
hash = "sha256-0l2ryIyWNiZqeYdVlnj/WnQGS3xFCY4ICG8JedX424w=";
|
||||||
} // { shortRev = "a73afcf"; };
|
} // { shortRev = "0643266"; };
|
||||||
};
|
};
|
||||||
|
|
||||||
git = rec {
|
git = rec {
|
||||||
|
|||||||
@ -35,5 +35,6 @@ stdenv.mkDerivation rec {
|
|||||||
maintainers = with lib.maintainers.bsc; [ rarias ];
|
maintainers = with lib.maintainers.bsc; [ rarias ];
|
||||||
platforms = lib.platforms.linux;
|
platforms = lib.platforms.linux;
|
||||||
license = lib.licenses.mit;
|
license = lib.licenses.mit;
|
||||||
|
cross = true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,23 +5,14 @@
|
|||||||
, automake
|
, automake
|
||||||
, autoconf
|
, autoconf
|
||||||
, libtool
|
, libtool
|
||||||
, mpi
|
|
||||||
, autoreconfHook
|
, autoreconfHook
|
||||||
, gpi-2
|
, gpi-2
|
||||||
, boost
|
, boost
|
||||||
, numactl
|
, numactl
|
||||||
, rdma-core
|
, rdma-core
|
||||||
, gfortran
|
, gfortran
|
||||||
, symlinkJoin
|
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
|
||||||
mpiAll = symlinkJoin {
|
|
||||||
name = "mpi-all";
|
|
||||||
paths = [ mpi.all ];
|
|
||||||
};
|
|
||||||
in
|
|
||||||
|
|
||||||
stdenv.mkDerivation rec {
|
stdenv.mkDerivation rec {
|
||||||
pname = "tagaspi";
|
pname = "tagaspi";
|
||||||
enableParallelBuilding = true;
|
enableParallelBuilding = true;
|
||||||
@ -35,16 +26,18 @@ stdenv.mkDerivation rec {
|
|||||||
hash = "sha256-RGG/Re2uM293HduZfGzKUWioDtwnSYYdfeG9pVrX9EM=";
|
hash = "sha256-RGG/Re2uM293HduZfGzKUWioDtwnSYYdfeG9pVrX9EM=";
|
||||||
};
|
};
|
||||||
|
|
||||||
buildInputs = [
|
nativeBuildInputs = [
|
||||||
autoreconfHook
|
autoreconfHook
|
||||||
automake
|
automake
|
||||||
autoconf
|
autoconf
|
||||||
libtool
|
libtool
|
||||||
|
gfortran
|
||||||
|
];
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
boost
|
boost
|
||||||
numactl
|
numactl
|
||||||
rdma-core
|
rdma-core
|
||||||
gfortran
|
|
||||||
mpiAll
|
|
||||||
];
|
];
|
||||||
|
|
||||||
dontDisableStatic = true;
|
dontDisableStatic = true;
|
||||||
@ -63,5 +56,6 @@ stdenv.mkDerivation rec {
|
|||||||
maintainers = with lib.maintainers.bsc; [ rarias ];
|
maintainers = with lib.maintainers.bsc; [ rarias ];
|
||||||
platforms = lib.platforms.linux;
|
platforms = lib.platforms.linux;
|
||||||
license = lib.licenses.gpl3Plus;
|
license = lib.licenses.gpl3Plus;
|
||||||
|
cross = false; # gpi-2 cannot cross
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@ -68,5 +68,6 @@ in stdenv.mkDerivation {
|
|||||||
maintainers = with lib.maintainers.bsc; [ rarias ];
|
maintainers = with lib.maintainers.bsc; [ rarias ];
|
||||||
platforms = lib.platforms.linux;
|
platforms = lib.platforms.linux;
|
||||||
license = lib.licenses.gpl3Plus;
|
license = lib.licenses.gpl3Plus;
|
||||||
|
cross = true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user