ovni/flake.nix
Rodrigo Arias 247ea7e7c3 Add nosv.can_breakdown attribute check
The nosv.can_breakdown attribute states if enough events for the
breakdown model of nOS-V are enabled at runtime. It is used to ensure
that breakdown traces have the progress events enabled along with others
required for proper visualization of traces.

The emulator will panic when the level is not enough, instead of relying
on users to always remember to enable the correct level.
2024-06-18 12:06:42 +02:00

141 lines
4.3 KiB
Nix

{
inputs.nixpkgs.url = "nixpkgs";
inputs.bscpkgs.url = "git+https://git.sr.ht/~rodarima/bscpkgs";
inputs.bscpkgs.inputs.nixpkgs.follows = "nixpkgs";
nixConfig.bash-prompt = "\[nix-develop\]$ ";
outputs = { self, nixpkgs, bscpkgs }:
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 = "c668e3bbfae34cd9b8797811b29ae35361b267ca";
};
nanos6 = prev.nanos6.override {
useGit = true;
gitBranch = "master";
gitCommit = "21fccec383a4136daf5919093a6ffcdc8c139bfe";
};
nodes = prev.nodes.override {
useGit = true;
gitBranch = "master";
gitCommit = "70ce0ed0a20842d8eb3124aa5db5916fb6fc238f";
};
clangOmpss2Unwrapped = prev.clangOmpss2Unwrapped.override {
useGit = true;
gitBranch = "master";
gitCommit = "b813108e2810c235480688ed7d1b0f1faf76e804";
};
# Use a fixed commit for libovni
ovniFixed = prev.ovni.override {
useGit = true;
gitBranch = "master";
# Includes ovni_attr_* API
gitCommit = "d1e8a62396ae92934c0b6e248d5f6ff921bef56f";
};
# 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 = [
bscpkgs.bscOverlay
ovniOverlay
];
};
compilerList = with pkgs; [
#gcc49Stdenv # broken
gcc6Stdenv
gcc7Stdenv
gcc8Stdenv
gcc9Stdenv
gcc10Stdenv
gcc11Stdenv
gcc12Stdenv
gcc13Stdenv
];
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 ]);
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
'';
});
};
};
}