forked from rarias/jungle
Compare commits
1 Commits
mega-merge
...
quick-shel
| Author | SHA1 | Date | |
|---|---|---|---|
|
9deef256a2
|
8
flake.lock
generated
8
flake.lock
generated
@@ -2,16 +2,16 @@
|
|||||||
"nodes": {
|
"nodes": {
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1764522689,
|
"lastModified": 1752436162,
|
||||||
"narHash": "sha256-SqUuBFjhl/kpDiVaKLQBoD8TLD+/cTUzzgVFoaHrkqY=",
|
"narHash": "sha256-Kt1UIPi7kZqkSc5HVj6UY5YLHHEzPBkgpNUByuyxtlw=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "8bb5646e0bed5dbd3ab08c7a7cc15b75ab4e1d0f",
|
"rev": "dfcd5b901dbab46c9c6e80b265648481aafb01f8",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"ref": "nixos-25.11",
|
"ref": "nixos-25.05",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05";
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = { self, nixpkgs, ... }:
|
outputs = { self, nixpkgs, ... }:
|
||||||
|
|||||||
@@ -7,7 +7,6 @@
|
|||||||
./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,14 +1,12 @@
|
|||||||
{ pkgs, ... }:
|
{ pkgs, config, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
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 perf ldns pv
|
ncdu config.boot.kernelPackages.perf ldns pv
|
||||||
nix-output-monitor
|
# From bsckgs overlay
|
||||||
nixfmt-tree
|
osumb
|
||||||
# From jungle overlay
|
|
||||||
osumb nixgen
|
|
||||||
];
|
];
|
||||||
|
|
||||||
programs.direnv.enable = true;
|
programs.direnv.enable = true;
|
||||||
@@ -30,22 +28,9 @@
|
|||||||
VISUAL = "vim";
|
VISUAL = "vim";
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.bash.promptInit = # bash
|
programs.bash.promptInit = ''
|
||||||
''
|
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";
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
{
|
|
||||||
programs.fish.enable = true;
|
|
||||||
}
|
|
||||||
@@ -87,13 +87,6 @@
|
|||||||
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 = {
|
||||||
|
|||||||
@@ -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.settings.Manager.RuntimeWatchdogSec = 30;
|
systemd.watchdog.runtimeTime = "30s";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -93,4 +93,20 @@
|
|||||||
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,10 +1,3 @@
|
|||||||
{
|
{
|
||||||
services.nixseparatedebuginfod2 = {
|
services.nixseparatedebuginfod.enable = true;
|
||||||
enable = true;
|
|
||||||
substituters = [
|
|
||||||
"local:"
|
|
||||||
"https://cache.nixos.org"
|
|
||||||
"http://hut/cache"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
{ lib, pkgs, ... }:
|
{ lib, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
@@ -21,20 +21,4 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
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,6 +1,31 @@
|
|||||||
{ 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";
|
||||||
@@ -34,6 +59,16 @@
|
|||||||
# 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
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
{ lib, pkgs, ... }:
|
{ lib, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
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
|
||||||
@@ -31,22 +30,4 @@
|
|||||||
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=
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,57 +0,0 @@
|
|||||||
{
|
|
||||||
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"
|
|
||||||
];
|
|
||||||
}
|
|
||||||
74
overlay.nix
74
overlay.nix
@@ -9,9 +9,6 @@ let
|
|||||||
bscPkgs = {
|
bscPkgs = {
|
||||||
agenix = prev.callPackage ./pkgs/agenix/default.nix { };
|
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 { };
|
||||||
@@ -22,12 +19,8 @@ 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; };
|
quickShell = import ./pkgs/quick-shell/default.nix { pkgs = final; };
|
||||||
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
|
||||||
@@ -37,44 +30,28 @@ 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 { };
|
||||||
# Broken and unmantained
|
mcxx = callPackage ./pkgs/mcxx/default.nix { };
|
||||||
# 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; };
|
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; };
|
||||||
@@ -83,18 +60,8 @@ 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 {
|
||||||
@@ -102,13 +69,6 @@ let
|
|||||||
#sigsegv = callPackage ./test/reproducers/sigsegv.nix { };
|
#sigsegv = callPackage ./test/reproducers/sigsegv.nix { };
|
||||||
hello-c = callPackage ./test/compilers/hello-c.nix { };
|
hello-c = callPackage ./test/compilers/hello-c.nix { };
|
||||||
hello-cpp = callPackage ./test/compilers/hello-cpp.nix { };
|
hello-cpp = callPackage ./test/compilers/hello-cpp.nix { };
|
||||||
hello-sycl = callPackage ./test/compilers/hello-sycl.nix { };
|
|
||||||
hello-syclompss = callPackage ./test/compilers/icpx-ompss2.nix { };
|
|
||||||
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; };
|
||||||
@@ -118,13 +78,6 @@ let
|
|||||||
intel2023-ifort = callPackage ./test/compilers/hello-f.nix {
|
intel2023-ifort = callPackage ./test/compilers/hello-f.nix {
|
||||||
stdenv = final.intelPackages_2023.stdenv-ifort;
|
stdenv = final.intelPackages_2023.stdenv-ifort;
|
||||||
};
|
};
|
||||||
intel2024-icx-c = hello-c.override { stdenv = final.intelPackages_2024.stdenv; };
|
|
||||||
intel2025-icx-c = hello-c.override { stdenv = final.intelPackages_2025.stdenv; };
|
|
||||||
intel2024-icx-cpp = hello-cpp.override { stdenv = final.intelPackages_2024.stdenv; };
|
|
||||||
intel2025-icx-cpp = hello-cpp.override { stdenv = final.intelPackages_2025.stdenv; };
|
|
||||||
# intel2023-sycl = hello-sycl.override { intelPackages = final.intelPackages_2023; }; # broken
|
|
||||||
intel2024-sycl = hello-sycl.override { intelPackages = final.intelPackages_2024; };
|
|
||||||
intel2025-sycl = hello-sycl.override { intelPackages = final.intelPackages_2025; };
|
|
||||||
clangOmpss2-lto = lto.override { stdenv = final.stdenvClangOmpss2Nanos6; };
|
clangOmpss2-lto = lto.override { stdenv = final.stdenvClangOmpss2Nanos6; };
|
||||||
clangOmpss2-asan = asan.override { stdenv = final.stdenvClangOmpss2Nanos6; };
|
clangOmpss2-asan = asan.override { stdenv = final.stdenvClangOmpss2Nanos6; };
|
||||||
clangOmpss2-task = callPackage ./test/compilers/ompss2.nix {
|
clangOmpss2-task = callPackage ./test/compilers/ompss2.nix {
|
||||||
@@ -142,31 +95,20 @@ 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: default: pkg:
|
canCrossCompile = platform: pkg:
|
||||||
(isDerivation pkg) &&
|
(isDerivation pkg) &&
|
||||||
# If meta.cross is undefined, use default
|
# Must be defined explicitly
|
||||||
(pkg.meta.cross or default) &&
|
(pkg.meta.cross or false) &&
|
||||||
(meta.availableOn final.pkgsCross.${platform}.stdenv.hostPlatform pkg);
|
(meta.availableOn platform pkg);
|
||||||
|
|
||||||
# For now only RISC-V
|
# For now only RISC-V
|
||||||
crossSet = genAttrs [ "riscv64" ] (platform:
|
crossSet = { riscv64 = final.pkgsCross.riscv64.bsc.pkgsTopLevel; };
|
||||||
filterAttrs (_: canCrossCompile platform true)
|
|
||||||
final.pkgsCross.${platform}.bsc.pkgsTopLevel);
|
|
||||||
|
|
||||||
buildList = name: paths:
|
buildList = name: paths:
|
||||||
final.runCommandLocal name { } ''
|
final.runCommandLocal name { } ''
|
||||||
@@ -186,7 +128,7 @@ let
|
|||||||
# For now only RISC-V
|
# For now only RISC-V
|
||||||
crossList = buildList "ci-cross"
|
crossList = buildList "ci-cross"
|
||||||
(filter
|
(filter
|
||||||
(canCrossCompile "riscv64" false) # opt-in (pkgs with: meta.cross = true)
|
(canCrossCompile final.pkgsCross.riscv64.stdenv.hostPlatform)
|
||||||
(builtins.attrValues crossSet.riscv64));
|
(builtins.attrValues crossSet.riscv64));
|
||||||
|
|
||||||
in bscPkgs // {
|
in bscPkgs // {
|
||||||
|
|||||||
@@ -47,7 +47,6 @@ 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 = [
|
||||||
@@ -91,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 = [ "x86_64-linux" ];
|
platforms = lib.platforms.linux;
|
||||||
license = lib.licenses.unfree;
|
license = lib.licenses.unfree;
|
||||||
maintainers = with lib.maintainers.bsc; [ rarias varcila ];
|
maintainers = with lib.maintainers.bsc; [ rarias varcila ];
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -18,9 +18,8 @@ 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 ./remove-wr-rdmsrq.patch ];
|
patches = [ ./makefile.patch ./hrtimer.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"
|
||||||
|
|||||||
@@ -1,20 +0,0 @@
|
|||||||
diff --git a/inc/PwrProfAsm.h b/inc/PwrProfAsm.h
|
|
||||||
index d77770a..c93a0e9 100644
|
|
||||||
--- a/inc/PwrProfAsm.h
|
|
||||||
+++ b/inc/PwrProfAsm.h
|
|
||||||
@@ -347,6 +347,7 @@
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+/*
|
|
||||||
#define rdmsrq(msr,val1,val2,val3,val4) ({ \
|
|
||||||
__asm__ __volatile__( \
|
|
||||||
"rdmsr\n" \
|
|
||||||
@@ -362,6 +363,7 @@
|
|
||||||
:"c"(msr), "a"(val1), "d"(val2), "S"(val3), "D"(val4) \
|
|
||||||
); \
|
|
||||||
})
|
|
||||||
+*/
|
|
||||||
|
|
||||||
#define rdmsrpw(msr,val1,val2,val3,val4) ({ \
|
|
||||||
__asm__ __volatile__( \
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
{
|
|
||||||
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++
|
|
||||||
'';
|
|
||||||
}
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
{
|
|
||||||
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";
|
|
||||||
}
|
|
||||||
@@ -59,7 +59,6 @@ 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,8 +16,6 @@ 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";
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
{
|
{
|
||||||
stdenv
|
stdenv
|
||||||
, lib
|
|
||||||
, cudatoolkit
|
, cudatoolkit
|
||||||
, cudaPackages
|
, cudaPackages
|
||||||
, autoAddDriverRunpath
|
, autoAddDriverRunpath
|
||||||
@@ -10,13 +9,10 @@
|
|||||||
stdenv.mkDerivation (finalAttrs: {
|
stdenv.mkDerivation (finalAttrs: {
|
||||||
name = "cudainfo";
|
name = "cudainfo";
|
||||||
src = ./.;
|
src = ./.;
|
||||||
strictDeps = true;
|
|
||||||
nativeBuildInputs = [
|
|
||||||
cudatoolkit # Required for nvcc
|
|
||||||
autoAddDriverRunpath
|
|
||||||
];
|
|
||||||
buildInputs = [
|
buildInputs = [
|
||||||
(lib.getOutput "static" cudaPackages.cuda_cudart) # Required for -lcudart_static
|
cudatoolkit # Required for nvcc
|
||||||
|
cudaPackages.cuda_cudart.static # Required for -lcudart_static
|
||||||
|
autoAddDriverRunpath
|
||||||
];
|
];
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
mkdir -p $out/bin
|
mkdir -p $out/bin
|
||||||
@@ -26,7 +22,6 @@ 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
|
||||||
@@ -45,9 +40,4 @@ stdenv.mkDerivation (finalAttrs: {
|
|||||||
'';
|
'';
|
||||||
installPhase = "touch $out";
|
installPhase = "touch $out";
|
||||||
};
|
};
|
||||||
|
|
||||||
meta = {
|
|
||||||
platforms = [ "x86_64-linux" ];
|
|
||||||
maintainers = with lib.maintainers.bsc; [ rarias ];
|
|
||||||
};
|
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
#, python3Packages
|
#, python3Packages
|
||||||
, installShellFiles
|
, installShellFiles
|
||||||
, symlinkJoin
|
, symlinkJoin
|
||||||
, enablePapi ? true
|
, enablePapi ? stdenv.hostPlatform == stdenv.buildPlatform # Disabled when cross-compiling
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
, automake
|
, automake
|
||||||
, libtool
|
, libtool
|
||||||
, mpi
|
, mpi
|
||||||
|
, rsync
|
||||||
, gfortran
|
, gfortran
|
||||||
}:
|
}:
|
||||||
|
|
||||||
@@ -33,7 +34,6 @@ stdenv.mkDerivation rec {
|
|||||||
};
|
};
|
||||||
|
|
||||||
enableParallelBuilding = true;
|
enableParallelBuilding = true;
|
||||||
strictDeps = true;
|
|
||||||
|
|
||||||
patches = [ ./rdma-core.patch ./max-mem.patch ];
|
patches = [ ./rdma-core.patch ./max-mem.patch ];
|
||||||
|
|
||||||
@@ -44,24 +44,13 @@ stdenv.mkDerivation rec {
|
|||||||
|
|
||||||
configureFlags = [
|
configureFlags = [
|
||||||
"--with-infiniband=${rdma-core-all}"
|
"--with-infiniband=${rdma-core-all}"
|
||||||
"--with-mpi=yes" # fixes mpi detection when cross-compiling
|
"--with-mpi=${mpiAll}"
|
||||||
"--with-slurm"
|
"--with-slurm"
|
||||||
"CFLAGS=-fPIC"
|
"CFLAGS=-fPIC"
|
||||||
"CXXFLAGS=-fPIC"
|
"CXXFLAGS=-fPIC"
|
||||||
];
|
];
|
||||||
|
|
||||||
nativeBuildInputs = [
|
buildInputs = [ slurm mpiAll rdma-core-all autoconf automake libtool rsync gfortran ];
|
||||||
autoconf
|
|
||||||
automake
|
|
||||||
gfortran
|
|
||||||
libtool
|
|
||||||
];
|
|
||||||
|
|
||||||
buildInputs = [
|
|
||||||
slurm
|
|
||||||
mpiAll
|
|
||||||
rdma-core-all
|
|
||||||
];
|
|
||||||
|
|
||||||
hardeningDisable = [ "all" ];
|
hardeningDisable = [ "all" ];
|
||||||
|
|
||||||
@@ -71,6 +60,5 @@ 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
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,190 +0,0 @@
|
|||||||
{
|
|
||||||
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
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
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
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
diff --git a/src/external/muparser/muparser.pc.in b/src/external/muparser/muparser.pc.in
|
|
||||||
index 646787cb53..d26e84de8f 100644
|
|
||||||
--- a/src/external/muparser/muparser.pc.in
|
|
||||||
+++ b/src/external/muparser/muparser.pc.in
|
|
||||||
@@ -1,11 +1,9 @@
|
|
||||||
-prefix=@CMAKE_INSTALL_PREFIX@
|
|
||||||
-exec_prefix=${prefix}
|
|
||||||
-libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
|
|
||||||
-includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
|
|
||||||
-
|
|
||||||
-Name: @PACKAGE_NAME@
|
|
||||||
-Description: Mathematical expressions parser library
|
|
||||||
-Version: @MUPARSER_VERSION@
|
|
||||||
-Requires:
|
|
||||||
-Libs: -L${libdir} -lmuparser
|
|
||||||
-Cflags: -I${includedir} @PKG_CONFIG_FLAGS@
|
|
||||||
+libdir=@CMAKE_INSTALL_FULL_LIBDIR@
|
|
||||||
+includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
|
|
||||||
+
|
|
||||||
+Name: @PACKAGE_NAME@
|
|
||||||
+Description: Mathematical expressions parser library
|
|
||||||
+Version: @MUPARSER_VERSION@
|
|
||||||
+Requires:
|
|
||||||
+Libs: -L${libdir} -lmuparser
|
|
||||||
+Cflags: -I${includedir} @PKG_CONFIG_FLAGS@
|
|
||||||
diff --git a/src/gromacs/libgromacs.pc.cmakein b/src/gromacs/libgromacs.pc.cmakein
|
|
||||||
index af9b5a6dc0..5f58d549bf 100644
|
|
||||||
--- a/src/gromacs/libgromacs.pc.cmakein
|
|
||||||
+++ b/src/gromacs/libgromacs.pc.cmakein
|
|
||||||
@@ -1,5 +1,4 @@
|
|
||||||
-prefix=@CMAKE_INSTALL_PREFIX@
|
|
||||||
-libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
|
|
||||||
+libdir=@CMAKE_INSTALL_FULL_LIBDIR@
|
|
||||||
|
|
||||||
Name: libgromacs@GMX_LIBS_SUFFIX@
|
|
||||||
Description: Gromacs library
|
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
, zlib
|
, zlib
|
||||||
, autoPatchelfHook
|
, autoPatchelfHook
|
||||||
, libfabric
|
, libfabric
|
||||||
, gcc
|
, gcc13
|
||||||
, wrapCCWith
|
, wrapCCWith
|
||||||
}:
|
}:
|
||||||
|
|
||||||
@@ -33,6 +33,8 @@ 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";
|
||||||
@@ -40,19 +42,45 @@ let
|
|||||||
mpi = "2021.9.0";
|
mpi = "2021.9.0";
|
||||||
};
|
};
|
||||||
|
|
||||||
findMatch = name:
|
aptPackageIndex = stdenv.mkDerivation {
|
||||||
let
|
name = "intel-oneapi-packages";
|
||||||
aptPackages = builtins.fromJSON (builtins.readFile ./packages.json);
|
srcs = [
|
||||||
matches = lib.filter (x: name == x.pname) aptPackages;
|
# Run update.sh to update the package lists
|
||||||
n = lib.length matches;
|
./amd64-packages ./all-packages
|
||||||
match = builtins.traceVerbose (name + " -- ${builtins.toString n}") (builtins.head matches);
|
];
|
||||||
|
phases = [ "installPhase" ];
|
||||||
|
installPhase = ''
|
||||||
|
awk -F': ' '\
|
||||||
|
BEGIN { print "[ {" } \
|
||||||
|
NR>1 && /^Package: / { print "} {"; } \
|
||||||
|
/: / { printf "%s = \"%s\";\n", $1, $2 } \
|
||||||
|
END { print "} ]" }' $srcs > $out
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
apthost = "https://apt.repos.intel.com/oneapi/";
|
aptPackages = import aptPackageIndex;
|
||||||
|
|
||||||
|
apthost = "https://apt.repos.intel.com/oneapi/";
|
||||||
|
|
||||||
|
getSum = pkgList: name:
|
||||||
|
let
|
||||||
|
matches = lib.filter (x: name == x.Package) pkgList;
|
||||||
|
#n = lib.length matches;
|
||||||
|
#match = builtins.trace (name + " -- ${builtins.toString n}") (lib.elemAt matches 0);
|
||||||
|
match = lib.elemAt matches 0;
|
||||||
in
|
in
|
||||||
{
|
match.SHA256;
|
||||||
url = apthost + match.filename;
|
|
||||||
sha256 = match.sha256;
|
getUrl = pkgList: name:
|
||||||
};
|
let
|
||||||
|
matches = lib.filter (x: name == x.Package) pkgList;
|
||||||
|
#match = assert lib.length matches == 1; lib.elemAt matches 0;
|
||||||
|
n = lib.length matches;
|
||||||
|
match =
|
||||||
|
#builtins.trace (name + " -- n=${builtins.toString n}")
|
||||||
|
(lib.elemAt matches 0);
|
||||||
|
in
|
||||||
|
apthost + match.Filename;
|
||||||
|
|
||||||
uncompressDebs = debs: name: stdenv.mkDerivation {
|
uncompressDebs = debs: name: stdenv.mkDerivation {
|
||||||
name = name;
|
name = name;
|
||||||
@@ -72,7 +100,10 @@ let
|
|||||||
|
|
||||||
joinDebs = name: names:
|
joinDebs = name: names:
|
||||||
let
|
let
|
||||||
debs = builtins.map (x: builtins.fetchurl (findMatch x)) names;
|
urls = builtins.map (x: getUrl aptPackages x) names;
|
||||||
|
sums = builtins.map (x: getSum aptPackages x) names;
|
||||||
|
getsrc = url: sha256: builtins.fetchurl { inherit url sha256; };
|
||||||
|
debs = lib.zipListsWith getsrc urls sums;
|
||||||
in
|
in
|
||||||
uncompressDebs debs "${name}-source";
|
uncompressDebs debs "${name}-source";
|
||||||
|
|
||||||
@@ -99,7 +130,6 @@ 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
|
||||||
@@ -151,7 +181,6 @@ let
|
|||||||
];
|
];
|
||||||
phases = [ "installPhase" "fixupPhase" ];
|
phases = [ "installPhase" "fixupPhase" ];
|
||||||
dontStrip = true;
|
dontStrip = true;
|
||||||
strictDeps = true;
|
|
||||||
|
|
||||||
autoPatchelfIgnoreMissingDeps = [ "libhwloc.so.5" ];
|
autoPatchelfIgnoreMissingDeps = [ "libhwloc.so.5" ];
|
||||||
|
|
||||||
@@ -195,7 +224,6 @@ let
|
|||||||
];
|
];
|
||||||
phases = [ "installPhase" "fixupPhase" ];
|
phases = [ "installPhase" "fixupPhase" ];
|
||||||
dontStrip = true;
|
dontStrip = true;
|
||||||
strictDeps = true;
|
|
||||||
|
|
||||||
autoPatchelfIgnoreMissingDeps = [ "libsycl.so.6" ];
|
autoPatchelfIgnoreMissingDeps = [ "libsycl.so.6" ];
|
||||||
|
|
||||||
@@ -263,7 +291,6 @@ 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}
|
||||||
@@ -352,7 +379,6 @@ 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}
|
||||||
@@ -446,7 +472,7 @@ let
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
ifort-wrapper = wrapIntel {
|
ifort-wrapper = wrapIntel rec {
|
||||||
cc = intel-compiler-fortran;
|
cc = intel-compiler-fortran;
|
||||||
mygcc = gcc;
|
mygcc = gcc;
|
||||||
extraBuild = ''
|
extraBuild = ''
|
||||||
|
|||||||
8769
pkgs/intel-oneapi/all-packages
Normal file
8769
pkgs/intel-oneapi/all-packages
Normal file
File diff suppressed because it is too large
Load Diff
34075
pkgs/intel-oneapi/amd64-packages
Normal file
34075
pkgs/intel-oneapi/amd64-packages
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -1,297 +0,0 @@
|
|||||||
{
|
|
||||||
lib,
|
|
||||||
stdenv,
|
|
||||||
callPackage,
|
|
||||||
dpkg,
|
|
||||||
fetchurl,
|
|
||||||
|
|
||||||
sqlite,
|
|
||||||
elfutils,
|
|
||||||
}:
|
|
||||||
|
|
||||||
let
|
|
||||||
inherit (builtins)
|
|
||||||
attrNames
|
|
||||||
attrValues
|
|
||||||
concatMap
|
|
||||||
elem
|
|
||||||
filter
|
|
||||||
fromJSON
|
|
||||||
getAttr
|
|
||||||
groupBy
|
|
||||||
head
|
|
||||||
isNull
|
|
||||||
listToAttrs
|
|
||||||
map
|
|
||||||
mapAttrs
|
|
||||||
readFile
|
|
||||||
replaceStrings
|
|
||||||
splitVersion
|
|
||||||
;
|
|
||||||
inherit (lib)
|
|
||||||
converge
|
|
||||||
findFirst
|
|
||||||
groupBy'
|
|
||||||
hasPrefix
|
|
||||||
optional
|
|
||||||
pipe
|
|
||||||
take
|
|
||||||
toInt
|
|
||||||
toList
|
|
||||||
versionAtLeast
|
|
||||||
versionOlder
|
|
||||||
;
|
|
||||||
|
|
||||||
aptData = fromJSON (readFile ./packages.json);
|
|
||||||
|
|
||||||
# Compare versions in debian control file syntax
|
|
||||||
# See: https://www.debian.org/doc/debian-policy/ch-relationships.html#syntax-of-relationship-fields
|
|
||||||
#
|
|
||||||
# NOTE: this is not a proper version comparison
|
|
||||||
#
|
|
||||||
# A proper version solver, should aggregate dependencies with the same name
|
|
||||||
# and compute the constraint (e.g. a (>= 2) a (<< 5) -> 2 <= a << 5)
|
|
||||||
#
|
|
||||||
# But in the intel repo, there are no such "duplicated" dependencies to specify
|
|
||||||
# upper limits, which leads to issues when intel-hpckit-2021 depends on things
|
|
||||||
# like intel-basekit >= 2021.1.0-2403 and we end up installing the newest
|
|
||||||
# basekit instead of the one from 2021.
|
|
||||||
#
|
|
||||||
# To mitigate this, >= is set to take the latest version with matching major
|
|
||||||
# and minor (only revision and patch are allowed to change)
|
|
||||||
compareVersions =
|
|
||||||
got: kind: want:
|
|
||||||
let
|
|
||||||
g0 = take 2 (splitVersion got);
|
|
||||||
w0 = take 2 (splitVersion want);
|
|
||||||
in
|
|
||||||
if isNull want then
|
|
||||||
true
|
|
||||||
else if kind == "=" then
|
|
||||||
got == want
|
|
||||||
else if kind == "<<" then
|
|
||||||
versionOlder got want
|
|
||||||
else if kind == "<=" then
|
|
||||||
versionAtLeast want got
|
|
||||||
else if kind == ">>" then
|
|
||||||
versionOlder want got
|
|
||||||
else if kind == ">=" then
|
|
||||||
(g0 == w0) && versionAtLeast got want # always match major version
|
|
||||||
else
|
|
||||||
throw "unknown operation: ${kind}";
|
|
||||||
|
|
||||||
findMatching =
|
|
||||||
{
|
|
||||||
pname,
|
|
||||||
kind,
|
|
||||||
version,
|
|
||||||
}:
|
|
||||||
findFirst (x: pname == x.pname && compareVersions x.version kind version) null aptData;
|
|
||||||
|
|
||||||
isIntel = pkg: (hasPrefix "intel-" pkg.pname);
|
|
||||||
|
|
||||||
expandDeps =
|
|
||||||
pkg: (map findMatching (filter isIntel pkg.dependencies)) ++ (optional (pkg.size != 0) pkg);
|
|
||||||
|
|
||||||
# get the oldest by major version. If they have the same major version, take
|
|
||||||
# the newest. This prevents most issues with resolutions
|
|
||||||
# versionOlder b a -> true if b is older than a (b `older` a)
|
|
||||||
getNewerInMajor =
|
|
||||||
a: b:
|
|
||||||
let
|
|
||||||
va = a.version;
|
|
||||||
vb = b.version;
|
|
||||||
va0 = head (splitVersion va);
|
|
||||||
vb0 = head (splitVersion vb);
|
|
||||||
in
|
|
||||||
if isNull a then
|
|
||||||
b
|
|
||||||
else if va0 != vb0 then
|
|
||||||
if va0 > vb0 then b else a
|
|
||||||
else if versionOlder vb va then
|
|
||||||
a
|
|
||||||
else
|
|
||||||
b;
|
|
||||||
removeDups = l: attrValues (groupBy' getNewerInMajor null (getAttr "provides") l);
|
|
||||||
|
|
||||||
_resolveDeps = converge (l: removeDups (concatMap expandDeps l));
|
|
||||||
resolveDeps =
|
|
||||||
pkg:
|
|
||||||
let
|
|
||||||
deps = _resolveDeps (toList pkg);
|
|
||||||
namedDeps = (map (x: "${x.pname}-${x.version}") deps);
|
|
||||||
in
|
|
||||||
builtins.traceVerbose (builtins.deepSeq namedDeps namedDeps) deps;
|
|
||||||
|
|
||||||
blacklist = [
|
|
||||||
"intel-basekit-env"
|
|
||||||
"intel-basekit-getting-started"
|
|
||||||
"intel-hpckit-env"
|
|
||||||
"intel-hpckit-getting-started"
|
|
||||||
"intel-oneapi-advisor"
|
|
||||||
"intel-oneapi-common-licensing"
|
|
||||||
"intel-oneapi-common-oneapi-vars"
|
|
||||||
"intel-oneapi-common-vars"
|
|
||||||
"intel-oneapi-compiler-cpp-eclipse-cfg"
|
|
||||||
"intel-oneapi-compiler-dpcpp-eclipse-cfg"
|
|
||||||
"intel-oneapi-condaindex"
|
|
||||||
"intel-oneapi-dev-utilities-eclipse-cfg"
|
|
||||||
"intel-oneapi-dpcpp-ct-eclipse-cfg"
|
|
||||||
"intel-oneapi-eclipse-ide"
|
|
||||||
"intel-oneapi-hpc-toolkit-getting-started"
|
|
||||||
"intel-oneapi-icc-eclipse-plugin-cpp"
|
|
||||||
"intel-oneapi-vtune"
|
|
||||||
"intel-oneapi-vtune-eclipse-plugin-vtune"
|
|
||||||
];
|
|
||||||
|
|
||||||
isInBlacklist = pkg: elem pkg.provides blacklist;
|
|
||||||
removeBlacklist = filter (e: !(isInBlacklist e));
|
|
||||||
|
|
||||||
dpkgExtractAll =
|
|
||||||
pname: version:
|
|
||||||
{ srcs, deps }:
|
|
||||||
stdenv.mkDerivation {
|
|
||||||
inherit pname version srcs;
|
|
||||||
|
|
||||||
nativeBuildInputs = [ dpkg ];
|
|
||||||
phases = [ "installPhase" ];
|
|
||||||
|
|
||||||
passthru = { inherit deps; };
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
mkdir -p $out
|
|
||||||
for src in $srcs; do
|
|
||||||
echo "Unpacking $src"
|
|
||||||
dpkg -x $src $out
|
|
||||||
done
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
apthost = "https://apt.repos.intel.com/oneapi/";
|
|
||||||
fetchDeb =
|
|
||||||
p:
|
|
||||||
fetchurl {
|
|
||||||
url = apthost + p.filename;
|
|
||||||
inherit (p) sha256;
|
|
||||||
};
|
|
||||||
|
|
||||||
buildIntel =
|
|
||||||
pkg:
|
|
||||||
pipe pkg [
|
|
||||||
resolveDeps
|
|
||||||
removeBlacklist
|
|
||||||
(l: {
|
|
||||||
srcs = map fetchDeb l;
|
|
||||||
deps = l;
|
|
||||||
})
|
|
||||||
(dpkgExtractAll "${pkg.provides}-extracted" pkg.version)
|
|
||||||
];
|
|
||||||
|
|
||||||
findHpcKit =
|
|
||||||
year:
|
|
||||||
findMatching {
|
|
||||||
pname = "intel-hpckit";
|
|
||||||
kind = "<<";
|
|
||||||
version = toString (year + 1);
|
|
||||||
};
|
|
||||||
years = map toInt (attrNames components);
|
|
||||||
|
|
||||||
patchIntel = callPackage ./patch_intel.nix { };
|
|
||||||
|
|
||||||
# Version information for each hpckit. This is used to normalize the paths
|
|
||||||
# so that files are in $out/{bin,lib,include...} instead of all over the place
|
|
||||||
# in $out/opt/intel/oneapi/*/*/{...}.
|
|
||||||
#
|
|
||||||
# The most important is the compiler component, which is used to build the
|
|
||||||
# stdenv for the hpckit.
|
|
||||||
#
|
|
||||||
# NOTE: this have to be manually specified, so we can avoid IFD. To add a
|
|
||||||
# new version, add a new field with an empty attrset, (e.g. "2026" = {}; ),
|
|
||||||
# build hpckit_2026.unpatched and use the values from
|
|
||||||
# result/opt/intel/oneapi/* to populate the attrset.
|
|
||||||
#
|
|
||||||
# WARN: if there are more than one version in the folders of the unpatched
|
|
||||||
# components, our dependency resolution hacks have probably failed and the
|
|
||||||
# package set may be broken.
|
|
||||||
components = {
|
|
||||||
"2025" = {
|
|
||||||
ishmem = "1.4";
|
|
||||||
pti = "0.13";
|
|
||||||
tcm = "1.4";
|
|
||||||
umf = "0.11";
|
|
||||||
|
|
||||||
ccl = "2021.16";
|
|
||||||
compiler = "2025.2";
|
|
||||||
dal = "2025.8";
|
|
||||||
debugger = "2025.2";
|
|
||||||
dev-utilities = "2025.2";
|
|
||||||
dnnl = "2025.2";
|
|
||||||
dpcpp-ct = "2025.2";
|
|
||||||
dpl = "2022.9";
|
|
||||||
ipp = "2022.2";
|
|
||||||
ippcp = "2025.2";
|
|
||||||
mkl = "2025.2";
|
|
||||||
mpi = "2021.16";
|
|
||||||
tbb = "2022.2";
|
|
||||||
};
|
|
||||||
"2024" = {
|
|
||||||
tcm = "1.1";
|
|
||||||
|
|
||||||
ccl = "2021.13";
|
|
||||||
compiler = "2024.2";
|
|
||||||
dal = "2024.6";
|
|
||||||
debugger = "2024.2";
|
|
||||||
dev-utilities = "2024.2";
|
|
||||||
diagnostics = "2024.2";
|
|
||||||
dnnl = "2024.2";
|
|
||||||
dpcpp-ct = "2024.2";
|
|
||||||
dpl = "2022.6";
|
|
||||||
ipp = "2021.12";
|
|
||||||
ippcp = "2021.12";
|
|
||||||
mkl = "2024.2";
|
|
||||||
mpi = "2021.13";
|
|
||||||
tbb = "2021.13";
|
|
||||||
|
|
||||||
extraPackages = [
|
|
||||||
sqlite
|
|
||||||
elfutils
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
replaceDots = replaceStrings [ "." ] [ "_" ];
|
|
||||||
|
|
||||||
in
|
|
||||||
lib.recurseIntoAttrs (
|
|
||||||
listToAttrs (
|
|
||||||
map (
|
|
||||||
year:
|
|
||||||
let
|
|
||||||
year_str = toString year;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
name = "hpckit_${year_str}";
|
|
||||||
value = patchIntel {
|
|
||||||
unpatched = buildIntel (findHpcKit year);
|
|
||||||
components = components.${year_str};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
) years
|
|
||||||
)
|
|
||||||
)
|
|
||||||
// {
|
|
||||||
apt = pipe aptData [
|
|
||||||
(groupBy (p: replaceDots p.provides))
|
|
||||||
(mapAttrs (
|
|
||||||
_: l:
|
|
||||||
listToAttrs (
|
|
||||||
map (pkg: {
|
|
||||||
name = replaceDots ("v" + pkg.version);
|
|
||||||
value = pkg;
|
|
||||||
}) l
|
|
||||||
)
|
|
||||||
))
|
|
||||||
];
|
|
||||||
|
|
||||||
inherit resolveDeps patchIntel buildIntel;
|
|
||||||
}
|
|
||||||
@@ -1,199 +0,0 @@
|
|||||||
{
|
|
||||||
stdenv,
|
|
||||||
stdenvNoCC,
|
|
||||||
lib,
|
|
||||||
symlinkJoin,
|
|
||||||
autoPatchelfHook,
|
|
||||||
wrapCCWith,
|
|
||||||
overrideCC,
|
|
||||||
gcc,
|
|
||||||
hwloc,
|
|
||||||
libelf,
|
|
||||||
libffi_3_3,
|
|
||||||
libpsm2,
|
|
||||||
libuuid,
|
|
||||||
libxml2,
|
|
||||||
numactl,
|
|
||||||
ocl-icd,
|
|
||||||
openssl,
|
|
||||||
python3,
|
|
||||||
rdma-core,
|
|
||||||
ucx,
|
|
||||||
zlib,
|
|
||||||
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;
|
|
||||||
};
|
|
||||||
|
|
||||||
})
|
|
||||||
)
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
#!/usr/bin/env -S jq -f
|
|
||||||
|
|
||||||
def extract_fields: {
|
|
||||||
pname : .Package,
|
|
||||||
version : .Version,
|
|
||||||
provides : .Package | sub("[0-9.-]*$"; ""),
|
|
||||||
filename : .Filename,
|
|
||||||
size : ."Installed-Size" | tonumber,
|
|
||||||
sha256 : .SHA256,
|
|
||||||
dependencies : .Depends,
|
|
||||||
} ;
|
|
||||||
|
|
||||||
# parses dependencies into a list of [{.pname, .kind, .version}]
|
|
||||||
# some dependencies do not have a version specified, in which case, kind = version = null
|
|
||||||
#
|
|
||||||
# example dependencies:
|
|
||||||
# intel-oneapi-common-vars (>= 2023.0.0-25325), intel-oneapi-common-licensing-2023.0.0
|
|
||||||
|
|
||||||
def split_dependencies : map(try(.dependencies |= split(",\\s?"; "")) // .dependencies |= []) ;
|
|
||||||
|
|
||||||
def match_version : capture("(?<pname>[a-zA-Z0-9_\\-.]*) *(\\((?<kind>[<>=]*) *(?<version>.*)\\))?"; "") ;
|
|
||||||
|
|
||||||
def parse_dependencies : map_values(.dependencies.[] |= match_version) ;
|
|
||||||
|
|
||||||
def sort_version_decreasing : sort_by(.version | split("[-.]"; "") | map(tonumber)) | reverse ;
|
|
||||||
|
|
||||||
map(extract_fields) | split_dependencies | parse_dependencies | sort_version_decreasing
|
|
||||||
|
|
||||||
# [.[] | select(.pname == "intel-hpckit") | .version]
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
#!/usr/bin/env -S awk -f
|
|
||||||
|
|
||||||
BEGIN {
|
|
||||||
FS=": "
|
|
||||||
|
|
||||||
prev_empty=1
|
|
||||||
t=" "
|
|
||||||
|
|
||||||
print "[ {"
|
|
||||||
}
|
|
||||||
|
|
||||||
!NF { # empty line, update separator so next non empty line closes the dict
|
|
||||||
prev_empty=1
|
|
||||||
t="},\n{ "
|
|
||||||
next # skip line (we won't match anything else)
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
printf t "\"%s\" : \"%s\"\n", $1, $2
|
|
||||||
|
|
||||||
if (prev_empty) {
|
|
||||||
# we were the first after a group of empty lines, following ones have to
|
|
||||||
# have a comma
|
|
||||||
prev_empty=0
|
|
||||||
t=", "
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
END { print "} ]" }
|
|
||||||
@@ -1,11 +1,4 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
out_64=$(mktemp intel-api.64.XXXXXX)
|
curl https://apt.repos.intel.com/oneapi/dists/all/main/binary-amd64/Packages -o amd64-packages
|
||||||
out_all=$(mktemp intel-api.all.XXXXXX)
|
curl https://apt.repos.intel.com/oneapi/dists/all/main/binary-all/Packages -o all-packages
|
||||||
trap 'rm -f "$out_64" "$out_all"' EXIT INT HUP
|
|
||||||
|
|
||||||
curl https://apt.repos.intel.com/oneapi/dists/all/main/binary-amd64/Packages -o "$out_64"
|
|
||||||
curl https://apt.repos.intel.com/oneapi/dists/all/main/binary-all/Packages -o "$out_all"
|
|
||||||
|
|
||||||
# NOTE: we use `jq -r tostring` to minify the json (3.2Mb -> 2.3Mb)
|
|
||||||
cat "$out_64" "$out_all" | ./toJson.awk | ./process.jq | jq -r tostring >packages.json
|
|
||||||
|
|||||||
@@ -1,200 +0,0 @@
|
|||||||
{
|
|
||||||
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
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
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 ? "872ba63f86edaefc9787984ef3fae9f2f94e0124" # github-release-2025.11
|
, gitCommit ? "880e2341c56bad1dc14e8c369fb3356bec19018e"
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
stdenv = llvmPackages_latest.stdenv;
|
stdenv = llvmPackages_latest.stdenv;
|
||||||
|
|
||||||
release = rec {
|
release = rec {
|
||||||
version = "2025.11";
|
version = "2025.06";
|
||||||
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-UgwMTUkM9Z87dDH205swZFBeFhrcbLAxginViG40pBM=";
|
hash = "sha256-ww9PpRmtz/M9IyLiZ8rAehx2UW4VpQt+svf4XfKBzKo=";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -48,7 +48,6 @@ in stdenv.mkDerivation {
|
|||||||
inherit (source) src version;
|
inherit (source) src version;
|
||||||
|
|
||||||
enableParallelBuilding = true;
|
enableParallelBuilding = true;
|
||||||
strictDeps = true;
|
|
||||||
|
|
||||||
passthru = {
|
passthru = {
|
||||||
CC = "clang";
|
CC = "clang";
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
, lib
|
, lib
|
||||||
, gcc
|
, gcc
|
||||||
, clangOmpss2Unwrapped
|
, clangOmpss2Unwrapped
|
||||||
, writeShellScript
|
|
||||||
, openmp ? null
|
, openmp ? null
|
||||||
, wrapCCWith
|
, wrapCCWith
|
||||||
, llvmPackages_latest
|
, llvmPackages_latest
|
||||||
@@ -28,17 +27,20 @@ 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.bintools-unwrapped.override {
|
bintools-unwrapped = llvmPackages_latest.tools.bintools-unwrapped.override {
|
||||||
lld = clangOmpss2Unwrapped;
|
lld = clangOmpss2Unwrapped;
|
||||||
};
|
};
|
||||||
bintools = llvmPackages_latest.bintools.override {
|
bintools = llvmPackages_latest.tools.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
|
||||||
@@ -55,50 +57,14 @@ let
|
|||||||
echo "--gcc-toolchain=${gcc}" >> $out/nix-support/cc-cflags
|
echo "--gcc-toolchain=${gcc}" >> $out/nix-support/cc-cflags
|
||||||
|
|
||||||
wrap clang++ $wrapper $ccPath/clang++
|
wrap clang++ $wrapper $ccPath/clang++
|
||||||
|
|
||||||
|
'' + optionalString (openmp != null) ''
|
||||||
|
echo "export OPENMP_RUNTIME=${ompname}" >> $out/nix-support/cc-wrapper-hook
|
||||||
|
'' + optionalString (ompss2rt != null) ''
|
||||||
|
echo "export OMPSS2_RUNTIME=${rtname}" >> $out/nix-support/cc-wrapper-hook
|
||||||
|
echo "export ${homevar}=${ompss2rt}" >> $out/nix-support/cc-wrapper-hook
|
||||||
|
'' + optionalString (ompss2rt != null && ompss2rt.pname == "nodes") ''
|
||||||
|
echo "export NOSV_HOME=${ompss2rt.nosv}" >> $out/nix-support/cc-wrapper-hook
|
||||||
'';
|
'';
|
||||||
|
}
|
||||||
|
|
||||||
envExports = lib.optionalString (openmp != null) ''
|
|
||||||
echo "export OPENMP_RUNTIME=${ompname}" >> $out/nix-support/cc-wrapper-hook
|
|
||||||
'' + optionalString (ompss2rt != null) ''
|
|
||||||
echo "export OMPSS2_RUNTIME=${rtname}" >> $out/nix-support/cc-wrapper-hook
|
|
||||||
echo "export ${homevar}=${ompss2rt}" >> $out/nix-support/cc-wrapper-hook
|
|
||||||
'' + optionalString (ompss2rt != null && ompss2rt.pname == "nodes") ''
|
|
||||||
echo "export NOSV_HOME=${ompss2rt.nosv}" >> $out/nix-support/cc-wrapper-hook
|
|
||||||
'';
|
|
||||||
|
|
||||||
extraPackages = optional (openmp != null) openmp;
|
|
||||||
|
|
||||||
wrappedCC = wrapCCWith {
|
|
||||||
# extraPackages adds packages to depsTargetTargetPropagated
|
|
||||||
inherit cc bintools extraPackages;
|
|
||||||
extraBuildCommands = extraBuildCommands + envExports;
|
|
||||||
};
|
|
||||||
|
|
||||||
resetIntelCCFlags = let tconf = builtins.replaceStrings ["-"] ["_"] targetConfig;
|
|
||||||
in writeShellScript "remove-intel.sh" ''
|
|
||||||
if [ "''${NIX_CC_WRAPPER_INTEL:-0}" = 1 ]; then
|
|
||||||
unset NIX_CFLAGS_COMPILE_${tconf}
|
|
||||||
unset NIX_CC_WRAPPER_FLAGS_SET_${tconf}
|
|
||||||
|
|
||||||
if (( "''${NIX_DEBUG:-0}" >= 1 )); then
|
|
||||||
echo "ompss2: cleaned NIX_CFLAGS_COMPILE_${tconf} (invokation from intel compiler detected)"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
'';
|
|
||||||
|
|
||||||
intelExtraBuildCommands = ''
|
|
||||||
sed -i 's|# Flirting.*|source ${resetIntelCCFlags}\n\n&|' $out/bin/clang
|
|
||||||
sed -i 's|# Flirting.*|source ${resetIntelCCFlags}\n\n&|' $out/bin/clang++
|
|
||||||
'';
|
|
||||||
|
|
||||||
wrappedCCIntel = wrapCCWith {
|
|
||||||
inherit cc bintools extraPackages;
|
|
||||||
# extraPackages adds packages to depsTargetTargetPropagated
|
|
||||||
extraBuildCommands = intelExtraBuildCommands + envExports;
|
|
||||||
};
|
|
||||||
|
|
||||||
in wrappedCC.overrideAttrs (oldAttrs: {
|
|
||||||
passthru = oldAttrs.passthru // {
|
|
||||||
forIcpx = wrappedCCIntel;
|
|
||||||
};
|
|
||||||
})
|
|
||||||
|
|||||||
@@ -39,9 +39,7 @@ 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
|
||||||
@@ -56,7 +54,6 @@ stdenv.mkDerivation rec {
|
|||||||
dontStrip = enableDebug;
|
dontStrip = enableDebug;
|
||||||
|
|
||||||
separateDebugInfo = true;
|
separateDebugInfo = true;
|
||||||
strictDeps = true;
|
|
||||||
|
|
||||||
cmakeFlags = [
|
cmakeFlags = [
|
||||||
"-DLIBOMP_OMPD_SUPPORT=OFF"
|
"-DLIBOMP_OMPD_SUPPORT=OFF"
|
||||||
@@ -74,28 +71,6 @@ 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,7 +27,6 @@ stdenv.mkDerivation rec {
|
|||||||
hardeningDisable = [ "all" ];
|
hardeningDisable = [ "all" ];
|
||||||
|
|
||||||
enableParallelBuilding = false;
|
enableParallelBuilding = false;
|
||||||
strictDeps = true;
|
|
||||||
|
|
||||||
preBuild = ''
|
preBuild = ''
|
||||||
makeFlagsArray+=(
|
makeFlagsArray+=(
|
||||||
|
|||||||
@@ -65,7 +65,6 @@ 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,15 +1,12 @@
|
|||||||
{ python3Packages, lib }:
|
{ python3Packages, lib }:
|
||||||
|
|
||||||
python3Packages.buildPythonApplication {
|
python3Packages.buildPythonApplication rec {
|
||||||
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,13 +6,6 @@
|
|||||||
, 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
|
||||||
@@ -22,13 +15,10 @@ let
|
|||||||
paths = [ pmix.dev pmix.out ];
|
paths = [ pmix.dev pmix.out ];
|
||||||
};
|
};
|
||||||
in mpich.overrideAttrs (old: {
|
in mpich.overrideAttrs (old: {
|
||||||
buildInputs = old.buildInputs ++ [
|
buildInput = old.buildInputs ++ [
|
||||||
libfabric
|
libfabric
|
||||||
pmixAll
|
pmixAll
|
||||||
];
|
];
|
||||||
nativeBuildInputs = old.nativeBuildInputs ++ [
|
|
||||||
perl
|
|
||||||
];
|
|
||||||
configureFlags = [
|
configureFlags = [
|
||||||
"--enable-shared"
|
"--enable-shared"
|
||||||
"--enable-sharedlib"
|
"--enable-sharedlib"
|
||||||
@@ -41,22 +31,10 @@ 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 ? true
|
, enablePapi ? stdenv.hostPlatform == stdenv.buildPlatform # Disabled when cross-compiling
|
||||||
, 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,8 +80,7 @@ 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
|
||||||
@@ -96,14 +95,16 @@ 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
|
||||||
|
|||||||
@@ -1,23 +0,0 @@
|
|||||||
{
|
|
||||||
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;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,97 +0,0 @@
|
|||||||
#!/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,7 +16,6 @@ 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";
|
||||||
|
|||||||
@@ -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 ? "511489e71504a44381e0930562e7ac80ac69a848" # version-1.4
|
, gitCommit ? "6002ec9ae6eb876d962cc34366952a3b26599ba6"
|
||||||
}:
|
}:
|
||||||
|
|
||||||
with lib;
|
with lib;
|
||||||
|
|
||||||
let
|
let
|
||||||
release = rec {
|
release = rec {
|
||||||
version = "1.4";
|
version = "1.3";
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "bsc-pm";
|
owner = "bsc-pm";
|
||||||
repo = "nodes";
|
repo = "nodes";
|
||||||
rev = "version-${version}";
|
rev = "version-${version}";
|
||||||
hash = "sha256-+lR/R0l3fGZO3XG7whMorFW2y2YZ0ZFnLeOHyQYrAsQ=";
|
hash = "sha256-cFb9pxcjtkMmH0CsGgUO9LTdXDNh7MCqicgGWawLrsU=";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -48,7 +48,6 @@ in
|
|||||||
enableParallelBuilding = true;
|
enableParallelBuilding = true;
|
||||||
dontStrip = true;
|
dontStrip = true;
|
||||||
separateDebugInfo = true;
|
separateDebugInfo = true;
|
||||||
strictDeps = true;
|
|
||||||
|
|
||||||
configureFlags = [
|
configureFlags = [
|
||||||
"--with-nosv=${nosv}"
|
"--with-nosv=${nosv}"
|
||||||
|
|||||||
@@ -7,25 +7,25 @@
|
|||||||
, numactl
|
, numactl
|
||||||
, hwloc
|
, hwloc
|
||||||
, papi
|
, papi
|
||||||
, enablePapi ? true
|
, enablePapi ? stdenv.hostPlatform == stdenv.buildPlatform # Disabled when cross-compiling
|
||||||
, 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 ? "1108e4786b58e0feb9a16fa093010b763eb2f8e8" # version 4.0.0
|
, gitCommit ? "9f47063873c3aa9d6a47482a82c5000a8c813dd8"
|
||||||
}:
|
}:
|
||||||
|
|
||||||
with lib;
|
with lib;
|
||||||
|
|
||||||
let
|
let
|
||||||
release = rec {
|
release = rec {
|
||||||
version = "4.0.0";
|
version = "3.2.0";
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "bsc-pm";
|
owner = "bsc-pm";
|
||||||
repo = "nos-v";
|
repo = "nos-v";
|
||||||
rev = "${version}";
|
rev = "${version}";
|
||||||
hash = "sha256-llaq73bd/YxLVKNlMebnUHKa4z3sdcsuDUoVwUxNuw8=";
|
hash = "sha256-yaz92426EM8trdkBJlISmAoG9KJCDTvoAW/HKrasvOw=";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -40,17 +40,16 @@ let
|
|||||||
|
|
||||||
source = if (useGit) then git else release;
|
source = if (useGit) then git else release;
|
||||||
in
|
in
|
||||||
stdenv.mkDerivation {
|
stdenv.mkDerivation rec {
|
||||||
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
|
||||||
@@ -60,7 +59,6 @@ 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";
|
||||||
|
|||||||
@@ -1,136 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
||||||
@@ -1,91 +0,0 @@
|
|||||||
{
|
|
||||||
lib,
|
|
||||||
fetchFromGitHub,
|
|
||||||
cmake,
|
|
||||||
withCFlags,
|
|
||||||
intelPackages,
|
|
||||||
|
|
||||||
mklSupport ? true,
|
|
||||||
|
|
||||||
config,
|
|
||||||
|
|
||||||
cudaSupport ? config.cudaSupport,
|
|
||||||
cudaPackages ? { },
|
|
||||||
|
|
||||||
rocmSupport ? config.rocmSupport,
|
|
||||||
hipTargets ? null, # only one target at a time supported
|
|
||||||
rocmPackages ? { },
|
|
||||||
}:
|
|
||||||
|
|
||||||
let
|
|
||||||
# rocmSupport is not enough, we need a specific target
|
|
||||||
enableHip = rocmSupport && hipTargets != null;
|
|
||||||
|
|
||||||
stdenv = withCFlags (lib.optionals cudaSupport [
|
|
||||||
"--cuda-path=${cudaPackages.cudatoolkit}"
|
|
||||||
]) intelPackages.stdenv;
|
|
||||||
in
|
|
||||||
|
|
||||||
# at least one backend has to be enabled
|
|
||||||
assert mklSupport || cudaSupport || enableHip;
|
|
||||||
|
|
||||||
stdenv.mkDerivation rec {
|
|
||||||
pname = "oneMath";
|
|
||||||
version = "0.8";
|
|
||||||
|
|
||||||
src = fetchFromGitHub {
|
|
||||||
owner = "uxlfoundation";
|
|
||||||
repo = "oneMath";
|
|
||||||
rev = "v${version}";
|
|
||||||
sha256 = "sha256-xK8lKI3oqKlx3xtvdScpMq+HXAuoYCP0BZdkEqnJP5o=";
|
|
||||||
};
|
|
||||||
|
|
||||||
cmakeFlags = [
|
|
||||||
(lib.cmakeBool "ENABLE_MKLCPU_BACKEND" mklSupport)
|
|
||||||
(lib.cmakeBool "ENABLE_MKLGPU_BACKEND" mklSupport)
|
|
||||||
|
|
||||||
(lib.cmakeBool "ENABLE_CUBLAS_BACKEND" cudaSupport)
|
|
||||||
(lib.cmakeBool "ENABLE_CUFFT_BACKEND" cudaSupport)
|
|
||||||
(lib.cmakeBool "ENABLE_CURAND_BACKEND" cudaSupport)
|
|
||||||
(lib.cmakeBool "ENABLE_CUSOLVER_BACKEND" cudaSupport)
|
|
||||||
(lib.cmakeBool "ENABLE_CUSPARSE_BACKEND" cudaSupport)
|
|
||||||
|
|
||||||
(lib.cmakeBool "ENABLE_ROCBLAS_BACKEND" enableHip)
|
|
||||||
(lib.cmakeBool "ENABLE_ROCFFT_BACKEND" enableHip)
|
|
||||||
(lib.cmakeBool "ENABLE_ROCSOLVER_BACKEND" enableHip)
|
|
||||||
(lib.cmakeBool "ENABLE_ROCRAND_BACKEND" enableHip)
|
|
||||||
(lib.cmakeBool "ENABLE_ROCSPARSE_BACKEND" enableHip)
|
|
||||||
|
|
||||||
(lib.cmakeBool "BUILD_FUNCTIONAL_TESTS" false)
|
|
||||||
(lib.cmakeBool "BUILD_EXAMPLES" false)
|
|
||||||
]
|
|
||||||
++ lib.optionals enableHip [
|
|
||||||
(lib.cmakeFeature "HIP_TARGETS" hipTargets)
|
|
||||||
];
|
|
||||||
|
|
||||||
nativeBuildInputs = [ cmake ];
|
|
||||||
buildInputs =
|
|
||||||
lib.optionals (mklSupport) [
|
|
||||||
intelPackages.mkl
|
|
||||||
intelPackages.tbb
|
|
||||||
]
|
|
||||||
++ lib.optionals (enableHip) [
|
|
||||||
rocmPackages.rocmPath
|
|
||||||
rocmPackages.rocblas
|
|
||||||
rocmPackages.rocfft
|
|
||||||
rocmPackages.rocsolver
|
|
||||||
rocmPackages.rocrand
|
|
||||||
rocmPackages.rocsparse
|
|
||||||
]
|
|
||||||
++ lib.optionals (cudaSupport) [
|
|
||||||
(lib.getDev cudaPackages.cuda_cudart)
|
|
||||||
cudaPackages.cudatoolkit
|
|
||||||
|
|
||||||
cudaPackages.libcublas
|
|
||||||
cudaPackages.libcurand
|
|
||||||
cudaPackages.libcufft
|
|
||||||
cudaPackages.libcusparse
|
|
||||||
cudaPackages.libcusolver
|
|
||||||
];
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -24,7 +24,6 @@ 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" ];
|
||||||
@@ -33,11 +32,6 @@ 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
|
||||||
@@ -50,6 +44,5 @@ 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 ? "06432668f346c8bdc1006fabc23e94ccb81b0d8b" # version 1.13.0
|
, gitCommit ? "e4f62382076f0cf0b1d08175cf57cc0bc51abc61"
|
||||||
, 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.13.0";
|
version = "1.12.0";
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "bsc-pm";
|
owner = "bsc-pm";
|
||||||
repo = "ovni";
|
repo = "ovni";
|
||||||
rev = "${version}";
|
rev = "${version}";
|
||||||
hash = "sha256-0l2ryIyWNiZqeYdVlnj/WnQGS3xFCY4ICG8JedX424w=";
|
hash = "sha256-H04JvsVKrdqr3ON7JhU0g17jjlg/jzQ7eTfx9vUNd3E=";
|
||||||
} // { shortRev = "0643266"; };
|
} // { shortRev = "a73afcf"; };
|
||||||
};
|
};
|
||||||
|
|
||||||
git = rec {
|
git = rec {
|
||||||
@@ -40,7 +40,6 @@ in
|
|||||||
inherit (source) src version;
|
inherit (source) src version;
|
||||||
dontStrip = true;
|
dontStrip = true;
|
||||||
separateDebugInfo = true;
|
separateDebugInfo = true;
|
||||||
strictDeps = true;
|
|
||||||
postPatch = ''
|
postPatch = ''
|
||||||
patchShebangs --build test/
|
patchShebangs --build test/
|
||||||
'';
|
'';
|
||||||
|
|||||||
@@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
stdenv,
|
|
||||||
papi,
|
|
||||||
}:
|
|
||||||
|
|
||||||
if stdenv.hostPlatform == stdenv.buildPlatform then
|
|
||||||
papi
|
|
||||||
else
|
|
||||||
papi.overrideAttrs (old: {
|
|
||||||
configureFlags = (old.configureFlags or [ ]) ++ [
|
|
||||||
"--enable-perf_event_uncore=no"
|
|
||||||
"--with-sysdetect=no"
|
|
||||||
"--with-ffsll"
|
|
||||||
"--with-tls=__thread"
|
|
||||||
"--with-virtualtimer=clock_thread_cputime_id"
|
|
||||||
"--with-walltimer=clock_realtime"
|
|
||||||
"--with-perf-events"
|
|
||||||
"--with-CPU=${stdenv.hostPlatform.uname.processor}"
|
|
||||||
"--with-arch=${stdenv.hostPlatform.uname.processor}"
|
|
||||||
];
|
|
||||||
patches = (old.patches or [ ]) ++ [ ./fix-ar-cross.patch ];
|
|
||||||
})
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
diff --git a/sde_lib/Makefile b/sde_lib/Makefile
|
|
||||||
index 8518f92..90a9953 100644
|
|
||||||
--- a/sde_lib/Makefile
|
|
||||||
+++ b/sde_lib/Makefile
|
|
||||||
@@ -1,4 +1,5 @@
|
|
||||||
CC ?= gcc
|
|
||||||
+AR ?= ar
|
|
||||||
SDE_INC = -I. -I..
|
|
||||||
SDE_LD = -ldl -pthread
|
|
||||||
CFLAGS += -Wextra -Wall -O2
|
|
||||||
@@ -18,7 +19,7 @@ dynamic: $(DOBJS)
|
|
||||||
rm -f *_d.o
|
|
||||||
|
|
||||||
static: $(SOBJS)
|
|
||||||
- ar rs libsde.a $(SOBJS)
|
|
||||||
+ $(AR) rs libsde.a $(SOBJS)
|
|
||||||
rm -f *_s.o
|
|
||||||
|
|
||||||
clean:
|
|
||||||
@@ -12,7 +12,7 @@
|
|||||||
, paraverKernel
|
, paraverKernel
|
||||||
, openssl
|
, openssl
|
||||||
, glibcLocales
|
, glibcLocales
|
||||||
, wrapGAppsHook3
|
, wrapGAppsHook
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
@@ -47,7 +47,6 @@ stdenv.mkDerivation rec {
|
|||||||
|
|
||||||
dontStrip = true;
|
dontStrip = true;
|
||||||
enableParallelBuilding = true;
|
enableParallelBuilding = true;
|
||||||
strictDeps = true;
|
|
||||||
|
|
||||||
preConfigure = ''
|
preConfigure = ''
|
||||||
export CFLAGS="-O3"
|
export CFLAGS="-O3"
|
||||||
@@ -65,7 +64,7 @@ stdenv.mkDerivation rec {
|
|||||||
autoconf
|
autoconf
|
||||||
automake
|
automake
|
||||||
autoreconfHook
|
autoreconfHook
|
||||||
wrapGAppsHook3
|
wrapGAppsHook
|
||||||
];
|
];
|
||||||
|
|
||||||
buildInputs = [
|
buildInputs = [
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ stdenv.mkDerivation rec {
|
|||||||
enableParallelBuilding = true;
|
enableParallelBuilding = true;
|
||||||
|
|
||||||
dontStrip = true;
|
dontStrip = true;
|
||||||
strictDeps = true;
|
|
||||||
|
|
||||||
preConfigure = ''
|
preConfigure = ''
|
||||||
export CFLAGS="-O3 -DPARALLEL_ENABLED"
|
export CFLAGS="-O3 -DPARALLEL_ENABLED"
|
||||||
|
|||||||
@@ -1,47 +0,0 @@
|
|||||||
{
|
|
||||||
lib,
|
|
||||||
python3,
|
|
||||||
fetchPypi,
|
|
||||||
cargo,
|
|
||||||
rustPlatform,
|
|
||||||
rustc,
|
|
||||||
}:
|
|
||||||
|
|
||||||
let
|
|
||||||
pname = "pertalde";
|
|
||||||
version = "0.1.4";
|
|
||||||
|
|
||||||
src = fetchPypi {
|
|
||||||
inherit pname version;
|
|
||||||
hash = "sha256-KdS5yNYR+8z81hMBTl9oNiLi17cVLyoZBNNR88T/gOY=";
|
|
||||||
};
|
|
||||||
in
|
|
||||||
python3.pkgs.buildPythonApplication {
|
|
||||||
inherit pname version src;
|
|
||||||
pyproject = true;
|
|
||||||
strictDeps = true;
|
|
||||||
|
|
||||||
cargoDeps = rustPlatform.fetchCargoVendor {
|
|
||||||
inherit src;
|
|
||||||
name = "${pname}-${version}";
|
|
||||||
hash = "sha256-dQ8EKlYZq+Urtb+0zxRi/Vh/ormIGCNKHy/9entyb7g=";
|
|
||||||
};
|
|
||||||
|
|
||||||
# error[E0554]: `#![feature]` may not be used on the stable release channel
|
|
||||||
env.RUSTC_BOOTSTRAP = true;
|
|
||||||
|
|
||||||
build-system = [
|
|
||||||
cargo
|
|
||||||
rustPlatform.cargoSetupHook
|
|
||||||
rustPlatform.maturinBuildHook
|
|
||||||
rustc
|
|
||||||
];
|
|
||||||
|
|
||||||
meta = {
|
|
||||||
description = "Some command-line utilities on paraver traces";
|
|
||||||
homepage = "https://pypi.org/project/pertalde/";
|
|
||||||
license = lib.licenses.gpl3Only;
|
|
||||||
maintainers = with lib.maintainers.bsc; [ abonerib ];
|
|
||||||
mainProgram = "ptd";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
From ccf301659caac9b5e973ba1f2d32352acf617a98 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Aleix=20Bon=C3=A9?= <aleix.boneribo@bsc.es>
|
|
||||||
Date: Tue, 2 Jul 2024 16:45:05 +0200
|
|
||||||
Subject: [PATCH] cmake: do not use suffix
|
|
||||||
|
|
||||||
---
|
|
||||||
cmake/LLVM.cmake | 3 ++
|
|
||||||
1 files changed, 3 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/cmake/LLVM.cmake b/cmake/LLVM.cmake
|
|
||||||
index f4dbda065..e29144dce 100644
|
|
||||||
--- a/cmake/LLVM.cmake
|
|
||||||
+++ b/cmake/LLVM.cmake
|
|
||||||
@@ -65,6 +65,9 @@ else()
|
|
||||||
message(WARNING "Cannot determine llvm binary suffix from ${LLVM_CONFIG}")
|
|
||||||
endif()
|
|
||||||
message(STATUS "LLVM binaries suffix : ${LLVM_BINARY_SUFFIX}")
|
|
||||||
+
|
|
||||||
+ # We don't want suffixes in nix
|
|
||||||
+ set(LLVM_BINARY_SUFFIX "")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
get_filename_component(LLVM_CONFIG_LOCATION "${LLVM_CONFIG}" DIRECTORY)
|
|
||||||
--
|
|
||||||
2.45.1
|
|
||||||
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
From f24b456c50f587b05cc8f2699c94d8cdefc5b13e Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Aleix=20Bon=C3=A9?= <aleix.boneribo@bsc.es>
|
|
||||||
Date: Tue, 2 Jul 2024 17:11:11 +0200
|
|
||||||
Subject: [PATCH] cmake: native build tools
|
|
||||||
|
|
||||||
---
|
|
||||||
cmake/LLVM.cmake | 7 +-
|
|
||||||
1 files changed, 6 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/cmake/LLVM.cmake b/cmake/LLVM.cmake
|
|
||||||
index e29144dce..b9f14ce6a 100644
|
|
||||||
--- a/cmake/LLVM.cmake
|
|
||||||
+++ b/cmake/LLVM.cmake
|
|
||||||
@@ -269,10 +269,15 @@ endforeach()
|
|
||||||
|
|
||||||
####################################################################
|
|
||||||
|
|
||||||
+if(DEFINED LLVM_NATIVE_TOOL_DIR)
|
|
||||||
+ set(TOOL_DIR "${LLVM_NATIVE_TOOL_DIR}")
|
|
||||||
+ message(STATUS "TOOL_DIR=${TOOL_DIR}")
|
|
||||||
+endif()
|
|
||||||
+
|
|
||||||
macro(find_program_or_die OUTPUT_VAR PROG_NAME DOCSTRING)
|
|
||||||
find_program(${OUTPUT_VAR}
|
|
||||||
NAMES "${PROG_NAME}${LLVM_BINARY_SUFFIX}${CMAKE_EXECUTABLE_SUFFIX}"
|
|
||||||
- HINTS "${LLVM_BINDIR}" "${LLVM_CONFIG_LOCATION}"
|
|
||||||
+ HINTS "${TOOL_DIR}" "${LLVM_BINDIR}" "${LLVM_CONFIG_LOCATION}"
|
|
||||||
DOC "${DOCSTRING}"
|
|
||||||
NO_CMAKE_PATH
|
|
||||||
NO_CMAKE_ENVIRONMENT_PATH
|
|
||||||
--
|
|
||||||
2.45.1
|
|
||||||
|
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
From 4688b5ce895761c884ae15fc0234ed8d623b988b Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Aleix=20Bon=C3=A9?= <aleix.boneribo@bsc.es>
|
|
||||||
Date: Tue, 2 Jul 2024 15:41:47 +0200
|
|
||||||
Subject: [PATCH] cmake: use clang from cmake variable
|
|
||||||
|
|
||||||
---
|
|
||||||
cmake/LLVM.cmake | 22 ++++++++++++++++++++--
|
|
||||||
1 file changed, 20 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/cmake/LLVM.cmake b/cmake/LLVM.cmake
|
|
||||||
index 71b786dc7..f4dbda065 100644
|
|
||||||
--- a/cmake/LLVM.cmake
|
|
||||||
+++ b/cmake/LLVM.cmake
|
|
||||||
@@ -281,11 +281,29 @@ macro(find_program_or_die OUTPUT_VAR PROG_NAME DOCSTRING)
|
|
||||||
endif()
|
|
||||||
endmacro()
|
|
||||||
|
|
||||||
-find_program_or_die( CLANG "clang" "clang binary")
|
|
||||||
+# -DCMAKE_C_COMPILER=riscv64-unknown-linux-gnu-clang -DCMAKE_CXX_COMPILER=riscv64-unknown-linux-gnu-clang++
|
|
||||||
+
|
|
||||||
+# if(DEFINED CLANG_EXECUTABLE)
|
|
||||||
+if(DEFINED CMAKE_C_COMPILER)
|
|
||||||
+ # set(CLANG "${CLANG_EXECUTABLE}")
|
|
||||||
+ set(CLANG "${CMAKE_C_COMPILER}")
|
|
||||||
+ message(STATUS "Using CLANG_EXECUTABLE: ${CLANG}")
|
|
||||||
+else()
|
|
||||||
+ find_program_or_die( CLANG "clang" "clang binary")
|
|
||||||
+endif()
|
|
||||||
execute_process(COMMAND "${CLANG}" "--version" OUTPUT_VARIABLE LLVM_CLANG_VERSION RESULT_VARIABLE CLANG_RES)
|
|
||||||
+
|
|
||||||
# TODO this should be optional
|
|
||||||
-find_program_or_die( CLANGXX "clang++" "clang++ binary")
|
|
||||||
+# if(DEFINED CLANGXX_EXECUTABLE)
|
|
||||||
+if(DEFINED CMAKE_CXX_COMPILER)
|
|
||||||
+ # set(CLANGXX "${CLANGXX_EXECUTABLE}")
|
|
||||||
+ set(CLANGXX "${CMAKE_CXX_COMPILER}")
|
|
||||||
+ message(STATUS "Using CLANGXX_EXECUTABLE: ${CLANGXX}")
|
|
||||||
+else()
|
|
||||||
+ find_program_or_die( CLANGXX "clang++" "clang++ binary")
|
|
||||||
+endif()
|
|
||||||
execute_process(COMMAND "${CLANGXX}" "--version" OUTPUT_VARIABLE LLVM_CLANGXX_VERSION RESULT_VARIABLE CLANGXX_RES)
|
|
||||||
+
|
|
||||||
if(CLANGXX_RES OR CLANG_RES)
|
|
||||||
message(FATAL_ERROR "Failed running clang/clang++ --version")
|
|
||||||
endif()
|
|
||||||
--
|
|
||||||
2.45.1
|
|
||||||
|
|
||||||
@@ -1,255 +0,0 @@
|
|||||||
{
|
|
||||||
lib,
|
|
||||||
llvmPackages,
|
|
||||||
ninja,
|
|
||||||
cmake,
|
|
||||||
hwloc,
|
|
||||||
ocl-icd,
|
|
||||||
opencl-headers,
|
|
||||||
getconf,
|
|
||||||
pkg-config,
|
|
||||||
spirv-llvm-translator,
|
|
||||||
spirv-tools,
|
|
||||||
libxml2, # required for statically linked llvm
|
|
||||||
python3,
|
|
||||||
writableTmpDirAsHomeHook,
|
|
||||||
writeText,
|
|
||||||
runCommand,
|
|
||||||
opencl-cts,
|
|
||||||
|
|
||||||
fetchFromGitHub,
|
|
||||||
|
|
||||||
useGit ? false,
|
|
||||||
gitUrl ? "git@gitlab-internal.bsc.es:task-awareness/pocl/pocl.git",
|
|
||||||
gitBranch ? "new-device",
|
|
||||||
gitCommit ? "dd10c2221b31223cbb796182df6a07f11c7541f5",
|
|
||||||
|
|
||||||
staticLLVM ? true,
|
|
||||||
enableICD ? true,
|
|
||||||
enableSPIRV ? true,
|
|
||||||
enableHWLOC ? true,
|
|
||||||
enableRemoteServer ? false,
|
|
||||||
enableRemoteClient ? false,
|
|
||||||
enableDistroVariants ? false,
|
|
||||||
|
|
||||||
lttng-ust,
|
|
||||||
enableLTTNG ? false,
|
|
||||||
|
|
||||||
onetbb,
|
|
||||||
enableTBB ? false,
|
|
||||||
|
|
||||||
nosv ? null,
|
|
||||||
ovni ? null,
|
|
||||||
enableNOSV ? useGit,
|
|
||||||
enableOVNI ? useGit,
|
|
||||||
|
|
||||||
buildPackages,
|
|
||||||
targetPackages,
|
|
||||||
nix-update-script,
|
|
||||||
}:
|
|
||||||
|
|
||||||
assert (enableNOSV || enableOVNI) -> useGit;
|
|
||||||
|
|
||||||
let
|
|
||||||
|
|
||||||
release = rec {
|
|
||||||
version = "7.1";
|
|
||||||
src = fetchFromGitHub {
|
|
||||||
owner = "pocl";
|
|
||||||
repo = "pocl";
|
|
||||||
tag = "v${version}";
|
|
||||||
hash = "sha256-bS6vTIjLO7YLs7qYLKW0cYYbEJ/hRS/+IjjAKbkj8ac=";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
git = rec {
|
|
||||||
version = src.shortRev;
|
|
||||||
src = builtins.fetchGit {
|
|
||||||
url = gitUrl;
|
|
||||||
ref = gitBranch;
|
|
||||||
rev = gitCommit;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
source = if (useGit) then git else release;
|
|
||||||
|
|
||||||
stdenv = llvmPackages.stdenv;
|
|
||||||
|
|
||||||
buildLlvmPackages = buildPackages.llvmPackages;
|
|
||||||
|
|
||||||
isCross = stdenv.hostPlatform != stdenv.buildPlatform;
|
|
||||||
|
|
||||||
featureList = lib.concatStringsSep "+" (
|
|
||||||
(lib.optionals enableICD [ "icd" ])
|
|
||||||
++ (lib.optionals enableNOSV [ "nosv" ])
|
|
||||||
++ (lib.optionals enableOVNI [ "ovni" ])
|
|
||||||
++ (lib.optionals enableSPIRV [ "spirv" ])
|
|
||||||
++ (lib.optionals enableTBB [ "tbb" ])
|
|
||||||
++ (lib.optionals enableRemoteClient [ "server" ])
|
|
||||||
++ (lib.optionals enableRemoteServer [ "client" ])
|
|
||||||
);
|
|
||||||
in
|
|
||||||
|
|
||||||
stdenv.mkDerivation (finalAttrs: {
|
|
||||||
pname = "pocl";
|
|
||||||
version = featureList + "-" + source.version;
|
|
||||||
inherit (source) src;
|
|
||||||
|
|
||||||
patches = lib.optionals useGit [
|
|
||||||
./0001-cmake-use-clang-from-cmake-variable.patch
|
|
||||||
./0001-cmake-do-not-use-suffix.patch
|
|
||||||
./0001-cmake-native-build-tools.patch
|
|
||||||
];
|
|
||||||
|
|
||||||
cmakeFlags = [
|
|
||||||
# TODO: all these are broken when cross compiling. Upstream has refactored
|
|
||||||
# all the cmake infra for cross compilation, but it's not in a release yet
|
|
||||||
(lib.cmakeOptionType "filepath" "WITH_LLVM_CONFIG" (
|
|
||||||
lib.getExe' buildLlvmPackages.llvm.dev "llvm-config"
|
|
||||||
))
|
|
||||||
(lib.cmakeOptionType "filepath" "CLANG" (lib.getExe' buildLlvmPackages.clangUseLLVM "clang"))
|
|
||||||
(lib.cmakeOptionType "filepath" "CLANGXX" (lib.getExe' buildLlvmPackages.clangUseLLVM "clang++"))
|
|
||||||
(lib.cmakeOptionType "path" "CLANG_RESOURCE_DIR" "${llvmPackages.stdenv.cc}/resource-root")
|
|
||||||
|
|
||||||
(lib.cmakeBool "ENABLE_TESTS" finalAttrs.finalPackage.doCheck)
|
|
||||||
|
|
||||||
(lib.cmakeBool "ENABLE_RELOCATION" true)
|
|
||||||
(lib.cmakeBool "ENABLE_POCL_BUILDING" true)
|
|
||||||
(lib.cmakeBool "POCL_ICD_ABSOLUTE_PATH" true)
|
|
||||||
|
|
||||||
(lib.cmakeBool "ENABLE_TBB_DEVICE" enableTBB)
|
|
||||||
(lib.cmakeBool "ENABLE_ICD" enableICD)
|
|
||||||
(lib.cmakeBool "ENABLE_HWLOC" enableHWLOC)
|
|
||||||
(lib.cmakeBool "ENABLE_LTTNG" enableLTTNG)
|
|
||||||
|
|
||||||
(lib.cmakeBool "ENABLE_REMOTE_CLIENT" enableRemoteClient)
|
|
||||||
(lib.cmakeBool "ENABLE_REMOTE_SERVER" enableRemoteServer)
|
|
||||||
|
|
||||||
# avoid the runtime linker pulling in a different llvm e.g. from graphics drivers
|
|
||||||
(lib.cmakeBool "STATIC_LLVM" staticLLVM)
|
|
||||||
]
|
|
||||||
++ lib.optionals (enableNOSV || enableOVNI) [
|
|
||||||
(lib.cmakeBool "ENABLE_NOSV" enableNOSV)
|
|
||||||
(lib.cmakeBool "ENABLE_OVNI" enableOVNI)
|
|
||||||
]
|
|
||||||
++ lib.optionals (!isCross && enableDistroVariants) [
|
|
||||||
(lib.cmakeFeature "KERNELLIB_HOST_CPU_VARIANTS" "distro") # TODO: check if we can do it when cross compiling
|
|
||||||
]
|
|
||||||
++ lib.optionals isCross [
|
|
||||||
(lib.cmakeFeature "CMAKE_SYSTEM_NAME" "Linux")
|
|
||||||
(lib.cmakeFeature "CMAKE_FIND_ROOT_PATH_MODE_PROGRAM" "NEVER")
|
|
||||||
(lib.cmakeFeature "CMAKE_FIND_ROOT_PATH_MODE_LIBRARY" "ONLY")
|
|
||||||
(lib.cmakeFeature "CMAKE_FIND_ROOT_PATH_MODE_INCLUDE" "ONLY")
|
|
||||||
(lib.cmakeFeature "CMAKE_FIND_ROOT_PATH_MODE_PACKAGE" "ONLY")
|
|
||||||
]
|
|
||||||
++ lib.optionals stdenv.hostPlatform.isRiscV [
|
|
||||||
(lib.cmakeFeature "LLC_TRIPLE" "riscv64-unknown-linux-gnu")
|
|
||||||
(lib.cmakeFeature "LLC_HOST_CPU" "rv64g")
|
|
||||||
(lib.cmakeFeature "CLANG_MARCH_FLAG" "-march=")
|
|
||||||
];
|
|
||||||
|
|
||||||
# Fixes error: ld: cannot find -lgcc / -lgcc_s when linking from libpocl on
|
|
||||||
# host
|
|
||||||
preConfigure = ''
|
|
||||||
cmakeFlagsArray+=(
|
|
||||||
-DEXTRA_HOST_LD_FLAGS="${lib.escapeShellArg (builtins.readFile "${targetPackages.stdenv.cc}/nix-support/cc-ldflags")}"
|
|
||||||
-DEXTRA_KERNEL_FLAGS="${lib.escapeShellArg (builtins.readFile "${targetPackages.stdenv.cc}/nix-support/cc-ldflags")}"
|
|
||||||
)
|
|
||||||
'';
|
|
||||||
|
|
||||||
nativeBuildInputs = [
|
|
||||||
cmake
|
|
||||||
getconf
|
|
||||||
ninja
|
|
||||||
pkg-config
|
|
||||||
python3
|
|
||||||
];
|
|
||||||
|
|
||||||
buildInputs = [
|
|
||||||
opencl-headers
|
|
||||||
llvmPackages.libclang
|
|
||||||
llvmPackages.llvm
|
|
||||||
]
|
|
||||||
++ lib.optionals staticLLVM [ libxml2 ]
|
|
||||||
++ lib.optionals enableNOSV [ nosv ]
|
|
||||||
++ lib.optionals enableOVNI [ ovni ]
|
|
||||||
++ lib.optionals enableHWLOC [ hwloc ]
|
|
||||||
++ lib.optionals enableTBB [ onetbb ]
|
|
||||||
++ lib.optionals enableICD [ ocl-icd ]
|
|
||||||
++ lib.optionals enableLTTNG [ lttng-ust ]
|
|
||||||
++ lib.optionals enableSPIRV [
|
|
||||||
(spirv-llvm-translator.override { inherit (llvmPackages) llvm; })
|
|
||||||
spirv-tools
|
|
||||||
];
|
|
||||||
|
|
||||||
nativeInstallCheckInputs = [
|
|
||||||
writableTmpDirAsHomeHook # needed for POCL_CACHE_DIR
|
|
||||||
];
|
|
||||||
|
|
||||||
doInstallCheck = true;
|
|
||||||
|
|
||||||
installCheckPhase = lib.optionalString enableICD ''
|
|
||||||
runHook preInstallCheck
|
|
||||||
|
|
||||||
export OCL_ICD_VENDORS=$out/etc/OpenCL/vendors
|
|
||||||
$out/bin/poclcc -o poclcc.cl.pocl $src/examples/poclcc/poclcc.cl
|
|
||||||
|
|
||||||
runHook postInstallCheck
|
|
||||||
'';
|
|
||||||
|
|
||||||
setupHook = lib.optionalDrvAttr enableICD (
|
|
||||||
writeText "setup-hook" ''
|
|
||||||
addToSearchPath OCL_ICD_VENDORS @out@/etc/OpenCL/vendors
|
|
||||||
''
|
|
||||||
);
|
|
||||||
|
|
||||||
passthru =
|
|
||||||
let
|
|
||||||
self = finalAttrs.finalPackage;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
updateScript = nix-update-script { };
|
|
||||||
git = self.override { useGit = true; };
|
|
||||||
|
|
||||||
withICD = enableICD;
|
|
||||||
|
|
||||||
test = {
|
|
||||||
# Run builtin tests (causes a rebuild)
|
|
||||||
self = self.overrideAttrs { doCheck = true; };
|
|
||||||
|
|
||||||
# Run basic test from Khronos OpenCL Conformance Test Suite
|
|
||||||
# WARN: despite its name, test_basic is very exhaustive, and can take more
|
|
||||||
# than 1 hour in a marenostrum5 node.
|
|
||||||
cts =
|
|
||||||
assert enableICD;
|
|
||||||
lib.genAttrs [ "api" "basic" "c11_atomics" "printf" "svm" ] (
|
|
||||||
name:
|
|
||||||
runCommand "pocl-cts-test_${name}" {
|
|
||||||
nativeBuildInputs = [ self ];
|
|
||||||
requiredSystemFeatures = [ "sys-devices" ];
|
|
||||||
env = {
|
|
||||||
POCL_DEBUG = "error,warn";
|
|
||||||
POCL_CACHE_DIR = "/build/pocl_cache";
|
|
||||||
};
|
|
||||||
} "${opencl-cts}/bin/Release/test_${name} | tee $out"
|
|
||||||
);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
env.HWLOC_SYNTHETIC = lib.optionalDrvAttr enableHWLOC "node:1 core:1 pu:1";
|
|
||||||
|
|
||||||
propagatedBuildInputs = [ stdenv.cc.cc ];
|
|
||||||
|
|
||||||
meta = with lib; {
|
|
||||||
description = "A portable open source (MIT-licensed) implementation of the OpenCL standard";
|
|
||||||
homepage = "http://portablecl.org";
|
|
||||||
license = licenses.mit;
|
|
||||||
maintainers = with maintainers; [
|
|
||||||
leixb
|
|
||||||
jansol
|
|
||||||
xddxdd
|
|
||||||
bsc.maintainers.leixb
|
|
||||||
];
|
|
||||||
platforms = platforms.linux ++ platforms.darwin;
|
|
||||||
};
|
|
||||||
})
|
|
||||||
76
pkgs/quick-shell/default.nix
Normal file
76
pkgs/quick-shell/default.nix
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
{ pkgs }:
|
||||||
|
|
||||||
|
# This builds devshells using passthru to populate packages and inputsFrom
|
||||||
|
# lazily.
|
||||||
|
#
|
||||||
|
# Packages prefixed with @ are added to inputsFrom and the rest are
|
||||||
|
# added to packages. This makes it possible to obtain a devshell with combining
|
||||||
|
# inputsFrom and packages from the comand line:
|
||||||
|
#
|
||||||
|
# $ nix develop .#quickShell.@nosv.clang-tools.ovni.@tampi
|
||||||
|
#
|
||||||
|
# is equivalent to:
|
||||||
|
#
|
||||||
|
# with pkgs; mkShell {
|
||||||
|
# packages = [ clang-tools ovni ];
|
||||||
|
# inputsFrom = [ nosv tampi ];
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
|
||||||
|
let
|
||||||
|
inherit (builtins) attrNames getAttr listToAttrs;
|
||||||
|
inherit (pkgs) lib;
|
||||||
|
|
||||||
|
# list of all packages' names
|
||||||
|
names = attrNames pkgs;
|
||||||
|
|
||||||
|
# generate a attributes containing the selected packages + all the available
|
||||||
|
# packages in names ("" -> packages and "@" -> inputsFrom)
|
||||||
|
go =
|
||||||
|
selected:
|
||||||
|
let
|
||||||
|
mkAttrs =
|
||||||
|
isInputs:
|
||||||
|
(map (
|
||||||
|
name:
|
||||||
|
let
|
||||||
|
pkg = getAttr name pkgs;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
name = (if isInputs then "@" else "") + name;
|
||||||
|
value = go (
|
||||||
|
if isInputs then
|
||||||
|
{
|
||||||
|
inherit (selected) packages;
|
||||||
|
inputsFrom = selected.inputsFrom ++ [ pkg ];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
inherit (selected) inputsFrom;
|
||||||
|
packages = selected.packages ++ [ pkg ];
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
) names);
|
||||||
|
|
||||||
|
attrs = listToAttrs ((mkAttrs true) ++ (mkAttrs false));
|
||||||
|
|
||||||
|
drv = pkgs.mkShell {
|
||||||
|
inherit (selected) inputsFrom packages;
|
||||||
|
name = # build a label from inputsFrom
|
||||||
|
if (selected.inputsFrom == [ ]) then
|
||||||
|
"nix-quick-shell"
|
||||||
|
else
|
||||||
|
lib.concatStringsSep "-" (map (v: v.pname or v.name or "unknown") selected.inputsFrom);
|
||||||
|
};
|
||||||
|
in
|
||||||
|
drv.overrideAttrs {
|
||||||
|
passthru = attrs // {
|
||||||
|
_passthru = drv.passthru;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
go {
|
||||||
|
inputsFrom = [ ];
|
||||||
|
packages = [ ];
|
||||||
|
}
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
{
|
|
||||||
stdenv,
|
|
||||||
lib,
|
|
||||||
fetchurl,
|
|
||||||
ocl-icd,
|
|
||||||
opencl-headers,
|
|
||||||
}:
|
|
||||||
|
|
||||||
stdenv.mkDerivation {
|
|
||||||
pname = "rodinia-opencl";
|
|
||||||
version = "3.1";
|
|
||||||
src = fetchurl {
|
|
||||||
url = "http://www.cs.virginia.edu/~skadron/lava/Rodinia/Packages/rodinia_3.1.tar.bz2";
|
|
||||||
hash = "sha256-+uusfBHtj4/Pa/LX6FwwhvwtEfciBNbfwo3FsujyrP0=";
|
|
||||||
};
|
|
||||||
|
|
||||||
patches = [
|
|
||||||
./rodinia-fixes.patch
|
|
||||||
./rodinia-rm.patch
|
|
||||||
];
|
|
||||||
buildInputs = [
|
|
||||||
opencl-headers
|
|
||||||
ocl-icd
|
|
||||||
];
|
|
||||||
buildFlags = [
|
|
||||||
"OPENCL"
|
|
||||||
"--always-make"
|
|
||||||
];
|
|
||||||
|
|
||||||
preBuild = ''
|
|
||||||
mkdir -p bin/linux/{cuda,omp,opencl}
|
|
||||||
'';
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
runHook preInstall
|
|
||||||
|
|
||||||
mkdir -p $out/share
|
|
||||||
cp -r bin data opencl $out
|
|
||||||
cp LICENSE README $out/share
|
|
||||||
|
|
||||||
runHook postInstall
|
|
||||||
'';
|
|
||||||
|
|
||||||
meta = {
|
|
||||||
homepage = "https://rodinia.cs.virginia.edu/";
|
|
||||||
description = "Test Suite of Compute-Intensive Applications with Accelerators";
|
|
||||||
maintainers = with lib.maintainers.bsc; [ abonerib ];
|
|
||||||
platforms = lib.platforms.linux;
|
|
||||||
license = {
|
|
||||||
deprecated = false;
|
|
||||||
free = false;
|
|
||||||
fullName = "Rodinia License";
|
|
||||||
redistributable = true;
|
|
||||||
shortName = "rodinia";
|
|
||||||
url = "https://www.cs.virginia.edu/~skadron/lava/rodinia/license.htm";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -13,7 +13,6 @@ buildGoModule rec {
|
|||||||
|
|
||||||
vendorHash = "sha256-A1dd9T9SIEHDCiVT2UwV6T02BSLh9ej6LC/2l54hgwI=";
|
vendorHash = "sha256-A1dd9T9SIEHDCiVT2UwV6T02BSLh9ej6LC/2l54hgwI=";
|
||||||
doCheck = false;
|
doCheck = false;
|
||||||
strictDeps = true;
|
|
||||||
|
|
||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
description = "Prometheus SLURM Exporter";
|
description = "Prometheus SLURM Exporter";
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ stdenv.mkDerivation rec {
|
|||||||
};
|
};
|
||||||
hardeningDisable = [ "all" ];
|
hardeningDisable = [ "all" ];
|
||||||
dontStrip = true;
|
dontStrip = true;
|
||||||
strictDeps = true;
|
|
||||||
configureFlags = [ "--with-ovni=${ovni}" ];
|
configureFlags = [ "--with-ovni=${ovni}" ];
|
||||||
|
|
||||||
nativeBuildInputs = [
|
nativeBuildInputs = [
|
||||||
@@ -36,6 +35,5 @@ 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;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,72 +0,0 @@
|
|||||||
{
|
|
||||||
backendStdenv,
|
|
||||||
fetchFromGitHub,
|
|
||||||
automake,
|
|
||||||
autoconf,
|
|
||||||
libtool,
|
|
||||||
gnumake,
|
|
||||||
autoreconfHook,
|
|
||||||
boost,
|
|
||||||
cudatoolkit,
|
|
||||||
libcublas,
|
|
||||||
cuda_cudart,
|
|
||||||
|
|
||||||
useGit ? false,
|
|
||||||
gitUrl ? "git@gitlab-internal.bsc.es:task-awareness/tacuda/tacuda.git",
|
|
||||||
gitBranch ? "main",
|
|
||||||
gitCommit ? "35234f9445e6149a2bd38d119841e2485d6ee05e",
|
|
||||||
}:
|
|
||||||
|
|
||||||
let
|
|
||||||
|
|
||||||
release_ver = "2.1.0";
|
|
||||||
release = {
|
|
||||||
version = release_ver;
|
|
||||||
src = fetchFromGitHub {
|
|
||||||
owner = "bsc-pm";
|
|
||||||
repo = "tacuda";
|
|
||||||
rev = release_ver;
|
|
||||||
hash = "sha256-Cj3EiLVJSLvRv0ydeg7Vp4SpkniEqHkcWF+YOJQ8EcM=";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
git = rec {
|
|
||||||
version = src.shortRev;
|
|
||||||
src = builtins.fetchGit {
|
|
||||||
url = gitUrl;
|
|
||||||
ref = gitBranch;
|
|
||||||
rev = gitCommit;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
source = if (useGit) then git else release;
|
|
||||||
|
|
||||||
in
|
|
||||||
|
|
||||||
backendStdenv.mkDerivation {
|
|
||||||
pname = "tacuda";
|
|
||||||
inherit (source) src version;
|
|
||||||
|
|
||||||
enableParallelBuilding = true;
|
|
||||||
separateDebugInfo = true;
|
|
||||||
strictDeps = true;
|
|
||||||
|
|
||||||
nativeBuildInputs = [
|
|
||||||
autoreconfHook
|
|
||||||
automake
|
|
||||||
autoconf
|
|
||||||
libtool
|
|
||||||
gnumake
|
|
||||||
];
|
|
||||||
|
|
||||||
patches = [ ./fix_config.patch ];
|
|
||||||
|
|
||||||
configureFlags = [ "--with-cuda-include=${cudatoolkit}/include" ];
|
|
||||||
|
|
||||||
buildInputs = [
|
|
||||||
boost
|
|
||||||
libcublas
|
|
||||||
cuda_cudart
|
|
||||||
];
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
diff --git a/m4/cuda.m4 b/m4/cuda.m4
|
|
||||||
index 23f5c94..8f9b534 100644
|
|
||||||
--- a/m4/cuda.m4
|
|
||||||
+++ b/m4/cuda.m4
|
|
||||||
@@ -40,7 +40,7 @@ search_libs="cuda cublas cudart"
|
|
||||||
required_libs=""
|
|
||||||
|
|
||||||
m4_foreach([function],
|
|
||||||
- [cuInit,
|
|
||||||
+ [
|
|
||||||
cublasSgemm,
|
|
||||||
cudaStreamCreate,
|
|
||||||
cudaLaunchKernel,
|
|
||||||
@@ -5,19 +5,27 @@
|
|||||||
, 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;
|
||||||
separateDebugInfo = true;
|
separateDebugInfo = true;
|
||||||
strictDeps = true;
|
|
||||||
|
|
||||||
version = "2.0";
|
version = "2.0";
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
@@ -27,18 +35,16 @@ stdenv.mkDerivation rec {
|
|||||||
hash = "sha256-RGG/Re2uM293HduZfGzKUWioDtwnSYYdfeG9pVrX9EM=";
|
hash = "sha256-RGG/Re2uM293HduZfGzKUWioDtwnSYYdfeG9pVrX9EM=";
|
||||||
};
|
};
|
||||||
|
|
||||||
nativeBuildInputs = [
|
buildInputs = [
|
||||||
autoreconfHook
|
autoreconfHook
|
||||||
automake
|
automake
|
||||||
autoconf
|
autoconf
|
||||||
libtool
|
libtool
|
||||||
gfortran
|
|
||||||
];
|
|
||||||
|
|
||||||
buildInputs = [
|
|
||||||
boost
|
boost
|
||||||
numactl
|
numactl
|
||||||
rdma-core
|
rdma-core
|
||||||
|
gfortran
|
||||||
|
mpiAll
|
||||||
];
|
];
|
||||||
|
|
||||||
dontDisableStatic = true;
|
dontDisableStatic = true;
|
||||||
@@ -57,6 +63,5 @@ 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
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,7 +45,6 @@ in stdenv.mkDerivation {
|
|||||||
inherit (source) src version;
|
inherit (source) src version;
|
||||||
enableParallelBuilding = true;
|
enableParallelBuilding = true;
|
||||||
separateDebugInfo = true;
|
separateDebugInfo = true;
|
||||||
strictDeps = true;
|
|
||||||
|
|
||||||
nativeBuildInputs = [
|
nativeBuildInputs = [
|
||||||
autoconf
|
autoconf
|
||||||
@@ -69,6 +68,5 @@ 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;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,48 +0,0 @@
|
|||||||
{
|
|
||||||
stdenv,
|
|
||||||
automake,
|
|
||||||
autoconf,
|
|
||||||
libtool,
|
|
||||||
gnumake,
|
|
||||||
boost,
|
|
||||||
mpi,
|
|
||||||
autoreconfHook,
|
|
||||||
ocl-icd,
|
|
||||||
opencl-headers,
|
|
||||||
}:
|
|
||||||
|
|
||||||
stdenv.mkDerivation (finalAttrs: {
|
|
||||||
pname = "taopencl";
|
|
||||||
version = finalAttrs.src.shortRev;
|
|
||||||
|
|
||||||
src = builtins.fetchGit {
|
|
||||||
url = "git@gitlab-internal.bsc.es:task-awareness/taopencl/taopencl.git";
|
|
||||||
ref = "master";
|
|
||||||
rev = "c3b7b32ae8fa4af7ceff598532a881f8f1490aaf";
|
|
||||||
};
|
|
||||||
|
|
||||||
enableParallelBuilding = true;
|
|
||||||
separateDebugInfo = true;
|
|
||||||
strictDeps = true;
|
|
||||||
|
|
||||||
configureFlags = [
|
|
||||||
"--with-opencl-lib=${ocl-icd}/lib"
|
|
||||||
"--with-opencl-include=${opencl-headers}/include"
|
|
||||||
];
|
|
||||||
|
|
||||||
nativeBuildInputs = [
|
|
||||||
autoreconfHook
|
|
||||||
automake
|
|
||||||
autoconf
|
|
||||||
libtool
|
|
||||||
gnumake
|
|
||||||
];
|
|
||||||
|
|
||||||
buildInputs = [
|
|
||||||
boost
|
|
||||||
mpi
|
|
||||||
];
|
|
||||||
|
|
||||||
dontDisableStatic = true;
|
|
||||||
hardeningDisable = [ "all" ];
|
|
||||||
})
|
|
||||||
@@ -1,87 +0,0 @@
|
|||||||
{
|
|
||||||
lib,
|
|
||||||
stdenv,
|
|
||||||
autoconf,
|
|
||||||
automake,
|
|
||||||
autoreconfHook,
|
|
||||||
boost,
|
|
||||||
fetchFromGitHub,
|
|
||||||
gnumake,
|
|
||||||
libtool,
|
|
||||||
withCFlags,
|
|
||||||
|
|
||||||
useIntel ? true,
|
|
||||||
adaptivecpp ? null,
|
|
||||||
intelPackages ? null,
|
|
||||||
|
|
||||||
useGit ? false,
|
|
||||||
gitUrl ? "git@gitlab-internal.bsc.es:task-awareness/tasycl/tasycl.git",
|
|
||||||
gitBranch ? "main",
|
|
||||||
gitCommit ? "78f98dcf60a66e0eaa3b4ebcf55be076bec64825",
|
|
||||||
}:
|
|
||||||
|
|
||||||
assert !useIntel -> adaptivecpp != null;
|
|
||||||
assert useIntel -> intelPackages != null;
|
|
||||||
|
|
||||||
let
|
|
||||||
variant = if useIntel then "intel" else "acpp";
|
|
||||||
|
|
||||||
syclStdenv = withCFlags [ "-O3" ] (if useIntel then intelPackages.stdenv else stdenv);
|
|
||||||
|
|
||||||
release = rec {
|
|
||||||
version = "2.1.0";
|
|
||||||
src = fetchFromGitHub {
|
|
||||||
owner = "bsc-pm";
|
|
||||||
repo = "tasycl";
|
|
||||||
rev = version;
|
|
||||||
hash = "sha256-0kXnb0lHeQNHR27GTLbJ8xbiICLU8k2+FqEnnFSrzzo=";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
git = rec {
|
|
||||||
version = src.shortRev;
|
|
||||||
src = builtins.fetchGit {
|
|
||||||
url = gitUrl;
|
|
||||||
ref = gitBranch;
|
|
||||||
rev = gitCommit;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
source = if (useGit) then git else release;
|
|
||||||
|
|
||||||
in
|
|
||||||
|
|
||||||
syclStdenv.mkDerivation {
|
|
||||||
pname = "tasycl-${variant}";
|
|
||||||
inherit (source) src version;
|
|
||||||
|
|
||||||
enableParallelBuilding = true;
|
|
||||||
separateDebugInfo = true;
|
|
||||||
|
|
||||||
nativeBuildInputs = [
|
|
||||||
autoreconfHook
|
|
||||||
automake
|
|
||||||
autoconf
|
|
||||||
libtool
|
|
||||||
gnumake
|
|
||||||
];
|
|
||||||
|
|
||||||
buildInputs = [
|
|
||||||
boost
|
|
||||||
];
|
|
||||||
|
|
||||||
configureFlags = lib.optionals (!useIntel) [
|
|
||||||
"CXX=${lib.getExe adaptivecpp}"
|
|
||||||
];
|
|
||||||
|
|
||||||
# add symlinks so we can explicitly link with tasycl-intel / tasycl-acpp
|
|
||||||
postInstall = ''
|
|
||||||
pushd $out/lib
|
|
||||||
for i in libtasycl* ; do
|
|
||||||
ln -s "$i" "''\${i/tasycl/tasycl-${variant}}"
|
|
||||||
done
|
|
||||||
popd
|
|
||||||
'';
|
|
||||||
|
|
||||||
hardeningDisable = [ "all" ];
|
|
||||||
}
|
|
||||||
@@ -1,63 +0,0 @@
|
|||||||
{
|
|
||||||
lib,
|
|
||||||
stdenv,
|
|
||||||
fetchFromGitHub,
|
|
||||||
cmake,
|
|
||||||
python3,
|
|
||||||
cudatoolkit,
|
|
||||||
libbacktrace,
|
|
||||||
intel-compute-runtime,
|
|
||||||
level-zero,
|
|
||||||
unified-memory-framework,
|
|
||||||
autoAddDriverRunpath,
|
|
||||||
|
|
||||||
enableL0 ? false,
|
|
||||||
}:
|
|
||||||
|
|
||||||
stdenv.mkDerivation rec {
|
|
||||||
pname = "unified-runtime";
|
|
||||||
version = "2025-WW45";
|
|
||||||
|
|
||||||
src = fetchFromGitHub {
|
|
||||||
owner = "intel";
|
|
||||||
repo = "llvm";
|
|
||||||
tag = version;
|
|
||||||
sha256 = "sha256-yf8pFEeNEWf9LpEhAy4vMdFDlA08x5XaCegnq+5aXRw=";
|
|
||||||
};
|
|
||||||
|
|
||||||
sourceRoot = "${src.name}/unified-runtime";
|
|
||||||
|
|
||||||
nativeBuildInputs = [
|
|
||||||
cmake
|
|
||||||
python3
|
|
||||||
libbacktrace
|
|
||||||
(python3.withPackages (
|
|
||||||
python-pkgs: with python-pkgs; [
|
|
||||||
lit
|
|
||||||
filecheck
|
|
||||||
]
|
|
||||||
))
|
|
||||||
autoAddDriverRunpath
|
|
||||||
];
|
|
||||||
|
|
||||||
buildInputs = [
|
|
||||||
unified-memory-framework
|
|
||||||
cudatoolkit
|
|
||||||
]
|
|
||||||
++ lib.optionals enableL0 [
|
|
||||||
intel-compute-runtime
|
|
||||||
level-zero
|
|
||||||
];
|
|
||||||
|
|
||||||
cmakeFlags = [
|
|
||||||
(lib.cmakeBool "UR_USE_EXTERNAL_UMF" true)
|
|
||||||
(lib.cmakeBool "UR_BUILD_TESTS" false)
|
|
||||||
|
|
||||||
(lib.cmakeBool "UR_BUILD_ADAPTER_CUDA" true)
|
|
||||||
(lib.cmakeBool "UR_BUILD_ADAPTER_L0" enableL0)
|
|
||||||
|
|
||||||
(lib.cmakeBool "UR_BUILD_ADAPTER_OPENCL" false)
|
|
||||||
(lib.cmakeBool "UR_BUILD_ADAPTER_HIP" false)
|
|
||||||
(lib.cmakeBool "UR_BUILD_ADAPTER_NATIVE_CPU" false)
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -1,15 +1,12 @@
|
|||||||
{ python3Packages, lib }:
|
{ python3Packages, lib }:
|
||||||
|
|
||||||
python3Packages.buildPythonApplication {
|
python3Packages.buildPythonApplication rec {
|
||||||
pname = "upc-qaire-exporter";
|
pname = "upc-qaire-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
|
||||||
|
|||||||
@@ -23,6 +23,9 @@ in stdenv.mkDerivation {
|
|||||||
dontUnpack = true;
|
dontUnpack = true;
|
||||||
dontConfigure = true;
|
dontConfigure = true;
|
||||||
|
|
||||||
|
# nOS-V requires access to /sys/devices to request NUMA information
|
||||||
|
requiredSystemFeatures = [ "sys-devices" ];
|
||||||
|
|
||||||
buildInputs = [ openmp ];
|
buildInputs = [ openmp ];
|
||||||
|
|
||||||
buildPhase = ''
|
buildPhase = ''
|
||||||
|
|||||||
@@ -1,91 +0,0 @@
|
|||||||
{
|
|
||||||
intelPackages,
|
|
||||||
writeText,
|
|
||||||
strace,
|
|
||||||
pocl,
|
|
||||||
}:
|
|
||||||
|
|
||||||
let
|
|
||||||
stdenv = intelPackages.stdenv;
|
|
||||||
hello_sycl = writeText "hello.cpp" ''
|
|
||||||
#include <sycl/sycl.hpp>
|
|
||||||
|
|
||||||
class hello_world;
|
|
||||||
|
|
||||||
int main(int argc, char** argv) try {
|
|
||||||
auto device_selector = sycl::default_selector_v;
|
|
||||||
|
|
||||||
sycl::queue queue(device_selector);
|
|
||||||
|
|
||||||
std::cout << "Running on: "
|
|
||||||
<< queue.get_device().get_info<sycl::info::device::name>()
|
|
||||||
<< std::endl;
|
|
||||||
|
|
||||||
queue.submit([&] (sycl::handler& cgh) {
|
|
||||||
auto os = sycl::stream{128, 128, cgh};
|
|
||||||
cgh.single_task<hello_world>([=]() {
|
|
||||||
os << "Hello World! (on device)\n";
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
} catch (sycl::exception &e) {
|
|
||||||
std::cout << "SYCL exception: " << e.what() << std::endl;
|
|
||||||
return 0; // we expect to fail since no devices should be available;
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
in
|
|
||||||
|
|
||||||
stdenv.mkDerivation (finalAttrs: {
|
|
||||||
version = "0.0.1";
|
|
||||||
name = "hello-sycl";
|
|
||||||
nativeBuildInputs = [
|
|
||||||
stdenv
|
|
||||||
strace
|
|
||||||
];
|
|
||||||
src = hello_sycl;
|
|
||||||
dontUnpack = true;
|
|
||||||
dontConfigure = true;
|
|
||||||
NIX_DEBUG = 0;
|
|
||||||
buildPhase = ''
|
|
||||||
cp $src hello.cpp
|
|
||||||
set -x
|
|
||||||
echo CXX=$CXX
|
|
||||||
command -v $CXX
|
|
||||||
$CXX -fsycl hello.cpp -o hello
|
|
||||||
./hello | tee test-output
|
|
||||||
set +x
|
|
||||||
'';
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
cp test-output $out
|
|
||||||
'';
|
|
||||||
|
|
||||||
passthru = {
|
|
||||||
withPocl = finalAttrs.finalPackage.overrideAttrs (old: {
|
|
||||||
nativeBuildInputs = old.nativeBuildInputs ++ [ pocl ];
|
|
||||||
env = (old.env or { }) // {
|
|
||||||
POCL_DEBUG = "error,warn";
|
|
||||||
POCL_CACHE_DIR = "/build/pocl_cache";
|
|
||||||
|
|
||||||
# Make PoCL report Intel vendor id so oneapi SYCL works
|
|
||||||
POCL_DRIVER_VERSION_OVERRIDE = "2024.18.6.0.02_160000";
|
|
||||||
POCL_CPU_VENDOR_ID_OVERRIDE = 32902;
|
|
||||||
};
|
|
||||||
doInstallCheck = true;
|
|
||||||
installCheckPhase = ''
|
|
||||||
grep "Hello World! (on device)" $out
|
|
||||||
'';
|
|
||||||
});
|
|
||||||
withIntel = finalAttrs.finalPackage.overrideAttrs (old: {
|
|
||||||
env = (old.env or { }) // {
|
|
||||||
OCL_ICD_VENDORS = intelPackages.compiler + "/etc/OpenCL/vendors";
|
|
||||||
};
|
|
||||||
doInstallCheck = true;
|
|
||||||
installCheckPhase = ''
|
|
||||||
grep "Hello World! (on device)" $out
|
|
||||||
'';
|
|
||||||
|
|
||||||
});
|
|
||||||
};
|
|
||||||
})
|
|
||||||
@@ -1,110 +0,0 @@
|
|||||||
{
|
|
||||||
writeText,
|
|
||||||
intelPackages,
|
|
||||||
nodes,
|
|
||||||
nosv,
|
|
||||||
clangOmpss2Nodes,
|
|
||||||
strace,
|
|
||||||
pocl,
|
|
||||||
}:
|
|
||||||
|
|
||||||
let
|
|
||||||
hello_cpp = writeText "hello.cpp" ''
|
|
||||||
#include <cstdio>
|
|
||||||
#include <sycl/sycl.hpp>
|
|
||||||
|
|
||||||
int main(int argc, char** argv) try {
|
|
||||||
sycl::queue queue;
|
|
||||||
|
|
||||||
std::cout << "Running on: "
|
|
||||||
<< queue.get_device().get_info<sycl::info::device::name>()
|
|
||||||
<< std::endl;
|
|
||||||
|
|
||||||
#pragma oss task
|
|
||||||
queue.submit([&] (sycl::handler& cgh) {
|
|
||||||
auto os = sycl::stream{128, 128, cgh};
|
|
||||||
cgh.single_task<class hello_world>([=]() {
|
|
||||||
os << "Hello World! (on device)\n";
|
|
||||||
});
|
|
||||||
}).wait();
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
} catch (sycl::exception &e) {
|
|
||||||
std::cout << "SYCL exception: " << e.what() << std::endl;
|
|
||||||
return 0; // we expect to fail since no devices should be available;
|
|
||||||
}
|
|
||||||
|
|
||||||
'';
|
|
||||||
in
|
|
||||||
|
|
||||||
intelPackages.stdenv.mkDerivation (finalAttrs: {
|
|
||||||
version = "0.0.1";
|
|
||||||
name = "hello-syclompss";
|
|
||||||
|
|
||||||
src = hello_cpp;
|
|
||||||
|
|
||||||
nativeBuildInputs = [
|
|
||||||
strace
|
|
||||||
nodes
|
|
||||||
nosv
|
|
||||||
];
|
|
||||||
|
|
||||||
passthru = {
|
|
||||||
withPocl = finalAttrs.finalPackage.overrideAttrs (old: {
|
|
||||||
nativeBuildInputs = old.nativeBuildInputs ++ [ pocl ];
|
|
||||||
env = (old.env or { }) // {
|
|
||||||
POCL_DEBUG = "error,warn";
|
|
||||||
POCL_CACHE_DIR = "/build/pocl_cache";
|
|
||||||
|
|
||||||
# Make PoCL report Intel vendor id so oneapi SYCL works
|
|
||||||
POCL_DRIVER_VERSION_OVERRIDE = "2024.18.6.0.02_160000";
|
|
||||||
POCL_CPU_VENDOR_ID_OVERRIDE = 32902;
|
|
||||||
};
|
|
||||||
doInstallCheck = true;
|
|
||||||
installCheckPhase = ''
|
|
||||||
grep "Hello World! (on device)" $out
|
|
||||||
'';
|
|
||||||
});
|
|
||||||
|
|
||||||
withIntel = finalAttrs.finalPackage.overrideAttrs (old: {
|
|
||||||
env = (old.env or { }) // {
|
|
||||||
OCL_ICD_VENDORS = intelPackages.compiler + "/etc/OpenCL/vendors";
|
|
||||||
};
|
|
||||||
doInstallCheck = true;
|
|
||||||
installCheckPhase = ''
|
|
||||||
grep "Hello World! (on device)" $out
|
|
||||||
'';
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
dontUnpack = true;
|
|
||||||
dontConfigure = true;
|
|
||||||
|
|
||||||
# NODES requires access to /sys/devices to request NUMA information
|
|
||||||
requiredSystemFeatures = [ "sys-devices" ];
|
|
||||||
|
|
||||||
env.NODES_HOME = nodes;
|
|
||||||
|
|
||||||
NIX_DEBUG = 1;
|
|
||||||
buildPhase = ''
|
|
||||||
cp $src hello.cpp
|
|
||||||
set -x
|
|
||||||
echo CXX=$CXX
|
|
||||||
echo NODES_HOME=$NODES_HOME
|
|
||||||
command -v $CXX
|
|
||||||
|
|
||||||
icpx -Wno-deprecated-declarations -fsycl \
|
|
||||||
-fsycl-host-compiler=${clangOmpss2Nodes.forIcpx}/bin/clang++ \
|
|
||||||
-fsycl-host-compiler-options='-Wno-deprecated-declarations -fompss-2=libnodes' \
|
|
||||||
-lnodes -lnosv \
|
|
||||||
$NODES_HOME/lib/nodes-main-wrapper.o \
|
|
||||||
hello.cpp -o hello
|
|
||||||
|
|
||||||
./hello | tee test-output
|
|
||||||
set +x
|
|
||||||
'';
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
cp test-output $out
|
|
||||||
'';
|
|
||||||
})
|
|
||||||
@@ -1,127 +0,0 @@
|
|||||||
#include <CL/cl.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#define BUF_LEN 128
|
|
||||||
|
|
||||||
cl_int exit_err = CL_SUCCESS;
|
|
||||||
|
|
||||||
#define CHECK(cmd) \
|
|
||||||
do { \
|
|
||||||
cl_int err = cmd; \
|
|
||||||
if (err != CL_SUCCESS) { \
|
|
||||||
printf("[ERROR] " #cmd " (Error code: %d)\n" \
|
|
||||||
"@ "__FILE__ \
|
|
||||||
":%d", \
|
|
||||||
err, __LINE__); \
|
|
||||||
exit_err = err; \
|
|
||||||
goto cleanup; \
|
|
||||||
} \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
const char *kernel_source = "__kernel void vector_add(__global const float *a, "
|
|
||||||
"__global const float *b, __global float *c) {\n"
|
|
||||||
" int gid = get_global_id(0);\n"
|
|
||||||
" c[gid] = a[gid] + b[gid];\n"
|
|
||||||
"}\n";
|
|
||||||
|
|
||||||
cl_int test_kernel_compilation(cl_platform_id platform) {
|
|
||||||
cl_device_id device = NULL;
|
|
||||||
cl_context context = NULL;
|
|
||||||
cl_program program = NULL;
|
|
||||||
cl_int err = CL_SUCCESS;
|
|
||||||
char device_name[BUF_LEN];
|
|
||||||
|
|
||||||
// Get first device for this platform
|
|
||||||
CHECK(clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL, 1, &device, NULL));
|
|
||||||
|
|
||||||
// Get device name
|
|
||||||
CHECK(clGetDeviceInfo(device, CL_DEVICE_NAME, sizeof(device_name),
|
|
||||||
device_name, NULL));
|
|
||||||
printf(" Device: %s\n", device_name);
|
|
||||||
|
|
||||||
context = clCreateContext(NULL, 1, &device, NULL, NULL, &err);
|
|
||||||
CHECK(err);
|
|
||||||
|
|
||||||
program = clCreateProgramWithSource(context, 1, &kernel_source, NULL, &err);
|
|
||||||
CHECK(err);
|
|
||||||
|
|
||||||
err = clBuildProgram(program, 1, &device, NULL, NULL, NULL);
|
|
||||||
if (err != CL_SUCCESS) {
|
|
||||||
printf(" [ERROR] Kernel compilation failed (Error code: %d)\n", err);
|
|
||||||
|
|
||||||
// Build log
|
|
||||||
size_t log_size;
|
|
||||||
CHECK(clGetProgramBuildInfo(program, device, CL_PROGRAM_BUILD_LOG, 0, NULL,
|
|
||||||
&log_size));
|
|
||||||
char *log = (char *)malloc(log_size);
|
|
||||||
CHECK(clGetProgramBuildInfo(program, device, CL_PROGRAM_BUILD_LOG, log_size,
|
|
||||||
log, NULL));
|
|
||||||
printf(" Build log:\n%s\n", log);
|
|
||||||
free(log);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
printf(" [OK] Kernel compiled successfully!\n");
|
|
||||||
|
|
||||||
cleanup:
|
|
||||||
if (program)
|
|
||||||
clReleaseProgram(program);
|
|
||||||
if (context)
|
|
||||||
clReleaseContext(context);
|
|
||||||
printf("\n");
|
|
||||||
|
|
||||||
return exit_err;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main() {
|
|
||||||
cl_uint num_platforms;
|
|
||||||
cl_platform_id *platforms = NULL;
|
|
||||||
|
|
||||||
// Get number of platforms
|
|
||||||
CHECK(clGetPlatformIDs(0, NULL, &num_platforms));
|
|
||||||
|
|
||||||
printf("Found %d OpenCL platform(s)\n\n", num_platforms);
|
|
||||||
|
|
||||||
if (num_platforms == 0) {
|
|
||||||
printf("No OpenCL platforms found!\n");
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Allocate memory for platforms
|
|
||||||
platforms = (cl_platform_id *)malloc(sizeof(cl_platform_id) * num_platforms);
|
|
||||||
|
|
||||||
// Get platform IDs
|
|
||||||
CHECK(clGetPlatformIDs(num_platforms, platforms, NULL));
|
|
||||||
|
|
||||||
// Query each platform and test kernel compilation
|
|
||||||
for (cl_uint i = 0; i < num_platforms; i++) {
|
|
||||||
char platform_name[BUF_LEN];
|
|
||||||
char platform_vendor[BUF_LEN];
|
|
||||||
char platform_version[BUF_LEN];
|
|
||||||
|
|
||||||
CHECK(clGetPlatformInfo(platforms[i], CL_PLATFORM_NAME,
|
|
||||||
sizeof(platform_name), platform_name, NULL));
|
|
||||||
CHECK(clGetPlatformInfo(platforms[i], CL_PLATFORM_VENDOR,
|
|
||||||
sizeof(platform_vendor), platform_vendor, NULL));
|
|
||||||
CHECK(clGetPlatformInfo(platforms[i], CL_PLATFORM_VERSION,
|
|
||||||
sizeof(platform_version), platform_version, NULL));
|
|
||||||
|
|
||||||
printf("Platform %d: %s\n", i, platform_name);
|
|
||||||
printf(" Vendor: %s\n", platform_vendor);
|
|
||||||
printf(" Version: %s\n", platform_version);
|
|
||||||
|
|
||||||
// Test kernel compilation
|
|
||||||
CHECK(test_kernel_compilation(platforms[i]));
|
|
||||||
}
|
|
||||||
|
|
||||||
cleanup:
|
|
||||||
if (platforms)
|
|
||||||
free(platforms);
|
|
||||||
|
|
||||||
if (exit_err == CL_SUCCESS)
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
@@ -1,104 +0,0 @@
|
|||||||
{
|
|
||||||
stdenv,
|
|
||||||
ocl-icd,
|
|
||||||
opencl-headers,
|
|
||||||
pocl,
|
|
||||||
clinfo,
|
|
||||||
runCommand,
|
|
||||||
lib,
|
|
||||||
}:
|
|
||||||
|
|
||||||
stdenv.mkDerivation (finalAttrs: {
|
|
||||||
pname = "opencl-pocl-test";
|
|
||||||
version = "1.0.0";
|
|
||||||
|
|
||||||
src = ./opencl.c;
|
|
||||||
|
|
||||||
dontUnpack = true;
|
|
||||||
dontConfigure = true;
|
|
||||||
|
|
||||||
buildInputs = [
|
|
||||||
ocl-icd
|
|
||||||
opencl-headers
|
|
||||||
];
|
|
||||||
|
|
||||||
buildPhase = ''
|
|
||||||
runHook preBuild
|
|
||||||
|
|
||||||
$CC -Wall -Wextra -D CL_TARGET_OPENCL_VERSION=100 $src -o ocl-hello -lOpenCL
|
|
||||||
|
|
||||||
runHook postBuild
|
|
||||||
'';
|
|
||||||
|
|
||||||
installPhase = ''
|
|
||||||
runHook preInstall
|
|
||||||
|
|
||||||
mkdir -p $out/bin
|
|
||||||
cp ocl-hello $out/bin
|
|
||||||
|
|
||||||
runHook postInstall
|
|
||||||
'';
|
|
||||||
|
|
||||||
passthru = {
|
|
||||||
test-icd =
|
|
||||||
runCommand "custom-clinfo"
|
|
||||||
{
|
|
||||||
nativeBuildInputs =
|
|
||||||
assert !(lib.hasPrefix "pocl" ocl-icd.pname);
|
|
||||||
[
|
|
||||||
clinfo
|
|
||||||
finalAttrs.finalPackage
|
|
||||||
pocl
|
|
||||||
];
|
|
||||||
|
|
||||||
env = {
|
|
||||||
POCL_DEBUG = "error,warn";
|
|
||||||
POCL_CACHE_DIR = "/build/pocl_cache";
|
|
||||||
};
|
|
||||||
|
|
||||||
requiredSystemFeatures = [ "sys-devices" ];
|
|
||||||
}
|
|
||||||
|
|
||||||
''
|
|
||||||
set -x
|
|
||||||
|
|
||||||
mkdir $out
|
|
||||||
|
|
||||||
clinfo -l >$out/clinfo
|
|
||||||
clinfo >$out/clinfo-full
|
|
||||||
|
|
||||||
ocl-hello >$out/hello
|
|
||||||
|
|
||||||
for i in $out/*; do
|
|
||||||
grep "Portable Computing Language" $i
|
|
||||||
done
|
|
||||||
|
|
||||||
echo $OCL_ICD_VENDORS >$out/env
|
|
||||||
|
|
||||||
grep "pocl.*/etc/OpenCL/vendors" $out/env
|
|
||||||
|
|
||||||
set +x
|
|
||||||
'';
|
|
||||||
# this needs: ocl-icd = pocl-noicd
|
|
||||||
test-noicd =
|
|
||||||
runCommand "custom-clinfo"
|
|
||||||
{
|
|
||||||
nativeBuildInputs = [
|
|
||||||
finalAttrs.finalPackage
|
|
||||||
];
|
|
||||||
|
|
||||||
env = {
|
|
||||||
POCL_DEBUG = "error,warn";
|
|
||||||
POCL_CACHE_DIR = "/build/pocl_cache";
|
|
||||||
};
|
|
||||||
|
|
||||||
requiredSystemFeatures = [ "sys-devices" ];
|
|
||||||
}
|
|
||||||
|
|
||||||
''
|
|
||||||
ocl-hello >$out
|
|
||||||
|
|
||||||
grep "Portable Computing Language" $out
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
})
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
{
|
|
||||||
runCommand,
|
|
||||||
pocl,
|
|
||||||
clinfo,
|
|
||||||
}:
|
|
||||||
|
|
||||||
runCommand "clinfo-pocl"
|
|
||||||
{
|
|
||||||
nativeBuildInputs = [
|
|
||||||
clinfo
|
|
||||||
pocl
|
|
||||||
];
|
|
||||||
|
|
||||||
requiredSystemFeatures = [ "sys-devices" ];
|
|
||||||
|
|
||||||
env = {
|
|
||||||
POCL_DEBUG = "error,warn";
|
|
||||||
POCL_CACHE_DIR = "/build/pocl_cache";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
''
|
|
||||||
echo $OCL_ICD_VENDORS
|
|
||||||
clinfo >$out
|
|
||||||
|
|
||||||
# check that we have PoCL:
|
|
||||||
grep "Portable Computing Language" $out
|
|
||||||
''
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
{
|
|
||||||
intelPackages,
|
|
||||||
pocl,
|
|
||||||
runCommandWith,
|
|
||||||
symlinkJoin,
|
|
||||||
clinfo,
|
|
||||||
}:
|
|
||||||
|
|
||||||
runCommandWith
|
|
||||||
{
|
|
||||||
name = "sycl-ls";
|
|
||||||
inherit (intelPackages) stdenv;
|
|
||||||
runLocal = true;
|
|
||||||
derivationArgs = {
|
|
||||||
nativeBuildInputs = [ clinfo ];
|
|
||||||
env = {
|
|
||||||
OCL_ICD_VENDORS = symlinkJoin {
|
|
||||||
name = "vendors";
|
|
||||||
paths = builtins.map (p: p + "/etc/OpenCL/vendors") [
|
|
||||||
intelPackages.compiler
|
|
||||||
pocl
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
POCL_DRIVER_VERSION_OVERRIDE = "2024.18.6.0.02_160000";
|
|
||||||
POCL_CPU_VENDOR_ID_OVERRIDE = 32902;
|
|
||||||
POCL_DEBUG = "error,warn";
|
|
||||||
POCL_CACHE_DIR = "/build/pocl_cache";
|
|
||||||
|
|
||||||
HWLOC_SYNTHETIC = "node:1 core:1 pu:1";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
# bash
|
|
||||||
''
|
|
||||||
clinfo -l | tee -a $out
|
|
||||||
sycl-ls | tee -a $out
|
|
||||||
|
|
||||||
test x6 = x"$(cat $out | wc -l)" # 2 lines per clinfo entry and 1 per sycl-ls
|
|
||||||
''
|
|
||||||
Reference in New Issue
Block a user