about summary refs log tree commit diff
path: root/nixpkgs/pkgs/os-specific/linux/kernel/perf.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/os-specific/linux/kernel/perf.nix')
-rw-r--r--nixpkgs/pkgs/os-specific/linux/kernel/perf.nix75
1 files changed, 75 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/os-specific/linux/kernel/perf.nix b/nixpkgs/pkgs/os-specific/linux/kernel/perf.nix
new file mode 100644
index 000000000000..840d4cc9cf7b
--- /dev/null
+++ b/nixpkgs/pkgs/os-specific/linux/kernel/perf.nix
@@ -0,0 +1,75 @@
+{ lib, stdenv, kernel, elfutils, python, perl, newt, slang, asciidoc, xmlto, makeWrapper
+, docbook_xsl, docbook_xml_dtd_45, libxslt, flex, bison, pkgconfig, libunwind, binutils
+, libiberty, audit, libbfd, openssl, systemtap, numactl
+, zlib, withGtk ? false, gtk2 ? null
+}:
+
+with lib;
+
+assert withGtk -> gtk2 != null;
+assert versionAtLeast kernel.version "3.12";
+
+stdenv.mkDerivation {
+  name = "perf-linux-${kernel.version}";
+
+  inherit (kernel) src;
+
+  preConfigure = ''
+    cd tools/perf
+
+    substituteInPlace Makefile \
+      --replace /usr/include/elfutils $elfutils/include/elfutils
+
+    for x in util/build-id.c util/dso.c; do
+      substituteInPlace $x --replace /usr/lib/debug /run/current-system/sw/lib/debug
+    done
+
+    if [ -f bash_completion ]; then
+      sed -i 's,^have perf,_have perf,' bash_completion
+    fi
+  '';
+
+  makeFlags = ["prefix=$(out)" "WERROR=0"] ++ kernel.makeFlags;
+
+  hardeningDisable = [ "format" ];
+
+  # perf refers both to newt and slang
+  nativeBuildInputs = [
+    asciidoc xmlto docbook_xsl docbook_xml_dtd_45 libxslt
+    flex bison libiberty audit makeWrapper pkgconfig python perl
+  ];
+  buildInputs = [
+    elfutils newt slang libunwind libbfd zlib openssl systemtap.stapBuild numactl
+  ] ++ stdenv.lib.optional withGtk gtk2;
+
+  # Note: we don't add elfutils to buildInputs, since it provides a
+  # bad `ld' and other stuff.
+  NIX_CFLAGS_COMPILE =
+    [ "-Wno-error=cpp"
+      "-Wno-error=bool-compare"
+      "-Wno-error=deprecated-declarations"
+      "-DOBJDUMP_PATH=\"${binutils}/bin/objdump\""
+    ]
+    # gcc before 6 doesn't know these options
+    ++ stdenv.lib.optionals (hasPrefix "gcc-6" stdenv.cc.cc.name) [
+      "-Wno-error=unused-const-variable" "-Wno-error=misleading-indentation"
+    ];
+
+  doCheck = false; # requires "sparse"
+  doInstallCheck = false; # same
+
+  separateDebugInfo = true;
+  installFlags = "install install-man ASCIIDOC8=1 prefix=$(out)";
+
+  preFixup = ''
+    wrapProgram $out/bin/perf \
+      --prefix PATH : "${binutils}/bin"
+  '';
+
+  meta = {
+    homepage = https://perf.wiki.kernel.org/;
+    description = "Linux tools to profile with performance counters";
+    maintainers = with stdenv.lib.maintainers; [viric];
+    platforms = with stdenv.lib.platforms; linux;
+  };
+}