perf: add default d3-flame-graph templates for flamegraph script (#198028)

Co-authored-by: Sandro <sandro.jaeckel@gmail.com>

Changed files
+92 -22
pkgs
os-specific
linux
kernel
+92 -22
pkgs/os-specific/linux/kernel/perf/default.nix
···
-
{ lib, stdenv, fetchpatch, kernel, elfutils, python2, python3, python3Packages, perl, newt, slang, asciidoc, xmlto, makeWrapper
-
, docbook_xsl, docbook_xml_dtd_45, libxslt, flex, bison, pkg-config, libunwind, binutils-unwrapped
-
, libiberty, audit, libbfd, libbfd_2_38, libopcodes, libopcodes_2_38, openssl, systemtap, numactl
+
{ lib
+
, stdenv
+
, fetchpatch
+
, fetchurl
+
, kernel
+
, elfutils
+
, python2
+
, python3
+
, python3Packages
+
, perl
+
, newt
+
, slang
+
, asciidoc
+
, xmlto
+
, makeWrapper
+
, docbook_xsl
+
, docbook_xml_dtd_45
+
, libxslt
+
, flex
+
, bison
+
, pkg-config
+
, libunwind
+
, binutils-unwrapped
+
, libiberty
+
, audit
+
, libbfd
+
, libbfd_2_38
+
, libopcodes
+
, libopcodes_2_38
+
, openssl
+
, systemtap
+
, numactl
, zlib
-
, withGtk ? false, gtk2
-
, withZstd ? true, zstd
-
, withLibcap ? true, libcap
+
, withGtk ? false
+
, gtk2
+
, withZstd ? true
+
, zstd
+
, withLibcap ? true
+
, libcap
}:
+
let
+
d3-flame-graph-templates = stdenv.mkDerivation rec {
+
pname = "d3-flame-graph-templates";
+
version = "4.1.3";
+
+
src = fetchurl {
+
url = "https://registry.npmjs.org/d3-flame-graph/-/d3-flame-graph-${version}.tgz";
+
sha256 = "sha256-W5/Vh5jarXUV224aIiTB2TnBFYT3naEIcG2945QjY8Q=";
+
};
+
+
installPhase = ''
+
install -D -m 0755 -t $out/share/d3-flame-graph/ ./dist/templates/*
+
'';
+
};
+
in
stdenv.mkDerivation {
pname = "perf-linux";
···
./5.19-binutils-2.39-support.patch
];
+
postPatch = ''
+
patchShebangs scripts tools/perf/pmu-events/jevents.py
+
+
substituteInPlace tools/perf/scripts/python/flamegraph.py \
+
--replace "/usr/share/d3-flame-graph/d3-flamegraph-base.html" \
+
"${d3-flame-graph-templates}/share/d3-flame-graph/d3-flamegraph-base.html"
+
'';
+
preConfigure = ''
cd tools/perf
···
fi
'';
-
makeFlags = ["prefix=$(out)" "WERROR=0"] ++ kernel.makeFlags;
+
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 pkg-config python3
+
asciidoc
+
xmlto
+
docbook_xsl
+
docbook_xml_dtd_45
+
libxslt
+
flex
+
bison
+
libiberty
+
audit
+
makeWrapper
+
pkg-config
+
python3
];
+
buildInputs = [
-
elfutils newt slang libunwind zlib openssl systemtap.stapBuild numactl
-
python3 perl
+
elfutils
+
newt
+
slang
+
libunwind
+
zlib
+
openssl
+
systemtap.stapBuild
+
numactl
+
python3
+
perl
] ++ (if (lib.versionAtLeast kernel.version "5.19")
-
then [ libbfd libopcodes ]
-
else [ libbfd_2_38 libopcodes_2_38 ])
-
++ lib.optional withGtk gtk2
-
++ (if (lib.versionAtLeast kernel.version "4.19") then [ python3 ] else [ python2 ])
-
++ lib.optional withZstd zstd
-
++ lib.optional withLibcap libcap
-
++ lib.optional (lib.versionAtLeast kernel.version "6.0") python3Packages.setuptools;
+
then [ libbfd libopcodes ]
+
else [ libbfd_2_38 libopcodes_2_38 ])
+
++ lib.optional withGtk gtk2
+
++ (if (lib.versionAtLeast kernel.version "4.19") then [ python3 ] else [ python2 ])
+
++ lib.optional withZstd zstd
+
++ lib.optional withLibcap libcap
+
++ lib.optional (lib.versionAtLeast kernel.version "6.0") python3Packages.setuptools;
NIX_CFLAGS_COMPILE = toString [
"-Wno-error=cpp"
···
"-Wno-error=deprecated-declarations"
"-Wno-error=stringop-truncation"
];
-
-
postPatch = ''
-
patchShebangs scripts tools/perf/pmu-events/jevents.py
-
'';
doCheck = false; # requires "sparse"
doInstallCheck = false; # same