ovni/flake.nix
Rodrigo Arias f87ab0f4dd
Some checks failed
CI / build:rt (pull_request) Failing after 6m38s
CI / build:asan (pull_request) Failing after 8m48s
CI / build:debug (pull_request) Successful in 22m27s
CI / build:nompi (pull_request) Successful in 20m37s
CI / build:compilers (pull_request) Successful in 18m22s
CI / build:local (pull_request) Successful in 23m13s
Switch bscpkgs input to jungle
The bscpkgs repository has been merged into jungle.

See: rarias/jungle#189
2025-10-10 12:57:26 +02:00

196 lines
6.4 KiB
Nix

{
inputs.nixpkgs.url = "nixpkgs/9c6b49aeac36e2ed73a8c472f1546f6d9cf1addc";
inputs.jungle.url = "git+https://jungle.bsc.es/git/rarias/jungle";
#inputs.jungle.url = "git+https://git.sr.ht/~rodarima/jungle"; # backup
inputs.jungle.inputs.nixpkgs.follows = "nixpkgs";
nixConfig.bash-prompt = "\[nix-develop\]$ ";
outputs = { self, nixpkgs, jungle }:
let
# Set to true to replace all libovni in all runtimes with the current
# source. Causes large rebuilds on changes of ovni.
useLocalOvni = false;
ovniOverlay = final: prev: {
nosv = prev.nosv.override {
useGit = true;
gitBranch = "master";
gitCommit = "efed594c3fdf0a2dd35ef98c9c941c896b4c65f6";
};
nanos6 = prev.nanos6.override {
useGit = true;
gitBranch = "master";
gitCommit = "f39ea57c67a613d098050e2bb251116a021e91e5";
};
nodes = prev.nodes.override {
useGit = true;
gitBranch = "master";
gitCommit = "c97d7ca6f885500121a94c75df429c788e8d6cf8";
};
clangOmpss2Unwrapped = prev.clangOmpss2Unwrapped.override {
useGit = true;
gitBranch = "master";
gitCommit = "6ea3824988abf00ead8084994a922182bf5fd8ba";
};
mpi = prev.mpich;
bench6 = prev.bench6.overrideAttrs (old: rec {
src = builtins.fetchGit {
url = "ssh://git@bscpm04.bsc.es/rarias/bench6.git";
ref = "master";
rev = "14227b1aa5a17deb5b746eb9648de2eb89fe3521";
};
version = src.shortRev;
cmakeFlags = [ "-DCMAKE_C_COMPILER=clang" "-DCMAKE_CXX_COMPILER=clang++" ];
env = with final; {
NANOS6_HOME = nanos6;
NODES_HOME = nodes;
NOSV_HOME = nosv;
};
buildInputs = with final; [ bigotes cmake clangOmpss2 openmp openmpv
nanos6 nodes nosv mpi tampi tagaspi gpi-2 openblas openblas.dev ovni
];
hardeningDisable = [ "all" ];
dontStrip = true;
});
# Use a fixed commit for libovni
ovniFixed = prev.ovni.override {
useGit = true;
gitBranch = "master";
gitCommit = "3bbfe0f0ecdf58e3f46ebafdf2540680f990b76b";
};
# Build with the current source
ovniLocal = prev.ovni.overrideAttrs (old: rec {
pname = "ovni-local";
version = if self ? shortRev then self.shortRev else "dirty";
src = self;
cmakeFlags = [ "-DOVNI_GIT_COMMIT=${version}" ];
});
# Select correct ovni for libovni
ovni = if (useLocalOvni) then final.ovniLocal else final.ovniFixed;
};
pkgs = import nixpkgs {
system = "x86_64-linux";
overlays = [
jungle.bscOverlay
ovniOverlay
];
};
compilerList = with pkgs; [
#gcc49Stdenv # broken
#gcc6Stdenv # deprecated
#gcc7Stdenv # deprecated
#gcc8Stdenv # deprecated
gcc9Stdenv
gcc10Stdenv
gcc11Stdenv
gcc12Stdenv
gcc13Stdenv
gcc14Stdenv
];
lib = pkgs.lib;
in {
packages.x86_64-linux.ovniPackages = {
# Allow inspection of packages from the command line
inherit pkgs;
} // rec {
# Build with the current source
local = pkgs.ovniLocal;
# Build in Debug mode
debug = local.overrideAttrs (old: {
pname = "ovni-debug";
cmakeBuildType = "Debug";
});
# Without MPI
nompi = local.overrideAttrs (old: {
pname = "ovni-nompi";
buildInputs = lib.filter (x: x != pkgs.mpi ) old.buildInputs;
cmakeFlags = old.cmakeFlags ++ [ "-DUSE_MPI=OFF" ];
});
# Helper function to build with different compilers
genOvniCC = stdenv: (local.override {
stdenv = stdenv;
}).overrideAttrs (old: {
name = "ovni-gcc" + stdenv.cc.cc.version;
cmakeFlags = old.cmakeFlags ++ [
"-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=OFF"
];
});
# Test several gcc versions
compilers = let
drvs = map genOvniCC compilerList;
in pkgs.runCommand "ovni-compilers" { } ''
printf "%s\n" ${builtins.toString drvs} > $out
'';
# Enable RT tests
rt = (local.override {
# Provide the clang compiler as default
stdenv = pkgs.stdenvClangOmpss2;
}).overrideAttrs (old: {
pname = "ovni-rt";
# We need to be able to exit the chroot to run Nanos6 tests, as they
# require access to /sys for hwloc
__noChroot = true;
buildInputs = old.buildInputs ++ (with pkgs; [
pkg-config nosv nanos6 nodes openmpv bench6
]);
cmakeFlags = old.cmakeFlags ++ [ "-DENABLE_ALL_TESTS=ON" ];
preConfigure = old.preConfigure or "" + ''
export NOSV_HOME="${pkgs.nosv}"
export NODES_HOME="${pkgs.nodes}"
export NANOS6_HOME="${pkgs.nanos6}"
export OPENMP_RUNTIME="libompv"
'';
});
# Build with ASAN and pass RT tests
asan = rt.overrideAttrs (old: {
pname = "ovni-asan";
cmakeFlags = old.cmakeFlags ++ [ "-DCMAKE_BUILD_TYPE=Asan" ];
# Ignore leaks in tests for now, only check memory errors
preCheck = old.preCheck + ''
export ASAN_OPTIONS=detect_leaks=0
'';
});
ubsan = rt.overrideAttrs (old: {
pname = "ovni-ubsan";
cmakeFlags = old.cmakeFlags ++ [ "-DCMAKE_BUILD_TYPE=Ubsan" ];
});
armv7 = (pkgs.pkgsCross.armv7l-hf-multiplatform.ovniLocal.overrideAttrs (old: {
pname = "ovni-armv7";
buildInputs = [];
nativeBuildInputs = [ pkgs.pkgsCross.armv7l-hf-multiplatform.buildPackages.cmake ];
cmakeFlags = old.cmakeFlags ++ [ "-DUSE_MPI=OFF" ];
})).overrideDerivation (old: {
doCheck = true;
});
aarch64 = (pkgs.pkgsCross.aarch64-multiplatform.ovniLocal.overrideAttrs (old: {
pname = "ovni-aarch64";
buildInputs = [];
nativeBuildInputs = [ pkgs.pkgsCross.aarch64-multiplatform.buildPackages.cmake ];
cmakeFlags = old.cmakeFlags ++ [ "-DUSE_MPI=OFF" ];
})).overrideDerivation (old: {
doCheck = true;
});
riscv64 = (pkgs.pkgsCross.riscv64.ovniLocal.overrideAttrs (old: {
pname = "ovni-riscv64";
buildInputs = [];
nativeBuildInputs = [ pkgs.pkgsCross.riscv64.buildPackages.cmake ];
cmakeFlags = old.cmakeFlags ++ [ "-DUSE_MPI=OFF" ];
})).overrideDerivation (old: {
doCheck = true;
});
};
};
}