Rodrigo Arias
247ea7e7c3
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.
141 lines
4.3 KiB
Nix
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
|
|
'';
|
|
});
|
|
};
|
|
};
|
|
}
|