diff --git a/default.nix b/default.nix index 079f7db..2a91a4e 100644 --- a/default.nix +++ b/default.nix @@ -77,7 +77,7 @@ in // ( if pkgs.system == "riscv64-linux" then { - inherit (pkgsWithOverlay) vf2Kernel; + inherit (pkgsWithOverlay) vf2Kernel valgrind; } else {} ) diff --git a/flake.nix b/flake.nix index da49f2c..e8e9001 100644 --- a/flake.nix +++ b/flake.nix @@ -121,7 +121,7 @@ // ( if system == "riscv64-linux" then { - inherit (pkgs) vf2Kernel; + inherit (pkgs) vf2Kernel valgrind; } else {} ) diff --git a/overlay.nix b/overlay.nix index 03039ea..1c3cd22 100644 --- a/overlay.nix +++ b/overlay.nix @@ -32,16 +32,23 @@ system: self: super: let }); libopus = super.libopus.overrideAttrs (_: { mesonFlags = [ - (lib.mesonBool "fixed-point" false) - (lib.mesonBool "custom-modes" true) - (lib.mesonEnable "intrinsics" false) - (lib.mesonEnable "rtcd" false) - (lib.mesonEnable "asm" false) - (lib.mesonEnable "docs" false) + "-Dfixed-point=false" + "-Dcustom-modes=true" + "-Dintrinsics=disabled" + "-Drtcd=disabled" + "-Dasm=disabled" + "-Dasm=disabled" + "-Ddocs=disabled" ]; doCheck = false; doInstallCheck = false; }); + valgrind = self.callPackage ./riscv/valgrind {}; + valgrind-light = self.valgrind; + openldap = super.openldap.overrideAttrs (_: { + doCheck = false; + doInstallCheck = false; + }); }) else (_: _: {}); diff --git a/riscv/valgrind/default.nix b/riscv/valgrind/default.nix new file mode 100644 index 0000000..74020e4 --- /dev/null +++ b/riscv/valgrind/default.nix @@ -0,0 +1,82 @@ +{ + lib, + stdenv, + fetchFromGitHub, + perl, + gdb, + autoreconfHook, +}: let + source = builtins.fromJSON (builtins.readFile ./source.json); +in + stdenv.mkDerivation rec { + pname = "valgrind-riscv64"; + version = source.date; + + src = fetchFromGitHub { + owner = "petrpavlu"; + repo = "valgrind-riscv64"; + inherit (source) rev sha256; + }; + + outputs = ["out" "dev"]; + + hardeningDisable = ["stackprotector"]; + + # GDB is needed to provide a sane default for `--db-command'. + # Perl is needed for `callgrind_{annotate,control}'. + buildInputs = [gdb perl]; + + # Perl is also a native build input. + nativeBuildInputs = [autoreconfHook perl]; + + enableParallelBuilding = true; + separateDebugInfo = stdenv.isLinux; + + # To prevent rebuild on linux when moving darwin's postPatch fixes to preConfigure + postPatch = ""; + + doCheck = true; + + postInstall = '' + for i in $out/libexec/valgrind/*.supp; do + substituteInPlace $i \ + --replace 'obj:/lib' 'obj:*/lib' \ + --replace 'obj:/usr/X11R6/lib' 'obj:*/lib' \ + --replace 'obj:/usr/lib' 'obj:*/lib' + done + ''; + + passthru.updateScript = [ + ../../scripts/update-git.sh + "https://github.com/petrpavlu/valgrind-riscv64" + "riscv/valgrind/source.json" + ]; + + meta = { + homepage = "http://www.valgrind.org/"; + description = "Debugging and profiling tool suite"; + + longDescription = '' + Valgrind is an award-winning instrumentation framework for + building dynamic analysis tools. There are Valgrind tools that + can automatically detect many memory management and threading + bugs, and profile your programs in detail. You can also use + Valgrind to build new tools. + ''; + + license = lib.licenses.gpl2Plus; + + maintainers = [lib.maintainers.nickcao]; + platforms = lib.platforms.unix; + badPlatforms = [ + "armv5tel-linux" + "armv6l-linux" + "armv6m-linux" + "sparc-linux" + "sparc64-linux" + "riscv32-linux" + "alpha-linux" + ]; + broken = stdenv.isDarwin || stdenv.hostPlatform.isStatic; # https://hydra.nixos.org/build/128521440/nixlog/2 + }; + } diff --git a/riscv/valgrind/source.json b/riscv/valgrind/source.json new file mode 100644 index 0000000..bfc9dd9 --- /dev/null +++ b/riscv/valgrind/source.json @@ -0,0 +1,11 @@ +{ + "url": "https://github.com/petrpavlu/valgrind-riscv64", + "rev": "71272b252977fe52f03ea4fa8306b457b098cca5", + "date": "2023-04-10T20:43:50+02:00", + "path": "/nix/store/g00qg2qhm10c0a6v5v7al89pc57b4bjy-valgrind-riscv64", + "sha256": "0znk98hypdh7j84h237131aqsczz91mrwpwkvy1xgaxkhiskhgy4", + "fetchLFS": false, + "fetchSubmodules": false, + "deepClone": false, + "leaveDotGit": false +}