rve/rve.nix

69 lines
1.6 KiB
Nix

{ pkgs, stdenv, riscv-arch-test }:
pkgs.gcc13Stdenv.mkDerivation rec {
pname = "rve";
version = "0.1.0";
dontPatch = true;
preBuild = ''
patchShebangs bin/*.sh
'';
installFlags = "PREFIX=${placeholder "out"} VERSION=${version}";
nativeBuildInputs = with pkgs; [ pkg-config cmake ninja ];
buildInputs = with pkgs; [
gdb
linuxPackages.perf
jq
lcov
(SDL2.overrideAttrs {waylandSupport= true;})
#riscv-pkgs.buildPackages.gcc
pkgsCross.riscv32-embedded.buildPackages.gcc
pkgsCross.riscv32-embedded.buildPackages.binutils
pkgsCross.riscv32-embedded.buildPackages.gdb
sail-riscv-rv32
(python3.withPackages (ps: with ps; [
riscof
]))
];
hardeningDisable = [ "all" ];
cmakeFlags = [
"-DCMAKE_EXPORT_COMPILE_COMMANDS=TRUE"
#"-DCMAKE_BUILD_TYPE=Debug"
"-DCMAKE_BUILD_TYPE=RelWithDebInfo"
# For profiling
# "-DCMAKE_CXX_FLAGS=-pg"
# "-DCMAKE_EXE_LINKER_FLAGS=-pg"
# "-DCMAKE_SHARED_LINKER_FLAGS=-pg"
];
shellHook = ''
export CMAKE_BUILD_TYPE=Debug
ln -s build/compile_commands.json compile_commands.json
'';
checkPhase = ''
export PATH=`pwd`:$PATH
cd ../test
riscof run --config=config.ini \
--suite=${riscv-arch-test}/riscv-test-suite \
--env=${riscv-arch-test}/riscv-test-suite/env \
--no-browser 2>report.txt
# This is needed because `riscof` doesn't return
# error code on failed tests
if [ ! -z "$(grep ERROR report.txt)" ]; then
cat report.txt
echo "Some of the RISCOF tests failed"
exit 1
fi
cd -
'';
doCheck = true;
src = ./.;
}