nixpkgs/pkgs/os-specific/linux/bpftrace/default.nix

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

87 lines
2.8 KiB
Nix
Raw Normal View History

{ lib, stdenv, fetchFromGitHub
, cmake, pkg-config, flex, bison
, llvmPackages, elfutils
, libbfd, libbpf, libopcodes, bcc
2021-12-03 23:56:03 +00:00
, cereal, asciidoctor
, nixosTests
, util-linux
}:
stdenv.mkDerivation rec {
pname = "bpftrace";
2022-05-30 11:41:33 +00:00
version = "0.15.0";
# Cherry-picked from merged PR, remove this hook on next update
# https://github.com/iovisor/bpftrace/pull/2242
# Cannot `fetchpatch` such pure renaming diff since
# https://github.com/iovisor/bpftrace/commit/2df807dbae4037aa8bf0afc03f52fb3f6321c62a.patch
# does not contain any diff in unified format but just this instead:
# ...
# man/man8/{bashreadline.8 => bashreadline.bt.8} | 0
# ...
# 35 files changed, 0 insertions(+), 0 deletions(-)
# rename man/man8/{bashreadline.8 => bashreadline.bt.8} (100%)
# ...
# on witch `fetchpatch` fails with
# error: Normalized patch '/build/patch' is empty (while the fetched file was not)!
# Did you maybe fetch a HTML representation of a patch instead of a raw patch?
postUnpack = ''
rename .8 .bt.8 "$sourceRoot"/man/man8/*.8
'';
src = fetchFromGitHub {
bpftrace: unstable-2018-10-27 -> 0.9 Update bpftrace to the latest pre-release, with a real version number. The most notable change now is that bpftrace can use a stable version of the 'bcc' toolchain in order to build, meaning no more hacks are needed to clone the source code and fix up the build system, etc. This simplifies things greatly and removes the old bcc-source patch. Similarly, we can remove our custom gtests patch (which disabled the build) by just passing -DBUILD_TESTING=FALSE when running cmake. This was also added upstream recently. However, something does still need to be fixed, at a cost: bpftrace requires the kernel -dev package because it wants both objects and include directories (some files are only shipped in one or the other). Therefore, we remove the dependency on linuxHeaders and instead use kernel.dev as the sole input to the build. This is both a positive and a negative: the positive is that tools work without annoying fatal errors, and that the bpf toolchain is synchronized to the linuxPackages.kernel derivation it was built against. The downside is that the .dev expression is much heavier as a dependency, so bpftrace is now closer to 700mb in closure size. (This especially hurts across kernel upgrades requiring a whole new rebuild, especially if you have existing nixos generations that won't GC, etc.) We probably want to slim this down substantially in the future (and there may be a few ways to do that), but as this will probably also touch bcc, and as a first cut of the pre-releases, this is probably fine while we work out other kinks. Signed-off-by: Austin Seipp <aseipp@pobox.com>
2019-05-03 06:16:37 +00:00
owner = "iovisor";
repo = "bpftrace";
rev = "v${version}";
2022-05-30 11:41:33 +00:00
sha256 = "sha256-9adZAKSn00W2yNwVDbVB1/O5Y+10c4EkVJGCHyd4Tgg=";
};
bpftrace: unstable-2018-10-27 -> 0.9 Update bpftrace to the latest pre-release, with a real version number. The most notable change now is that bpftrace can use a stable version of the 'bcc' toolchain in order to build, meaning no more hacks are needed to clone the source code and fix up the build system, etc. This simplifies things greatly and removes the old bcc-source patch. Similarly, we can remove our custom gtests patch (which disabled the build) by just passing -DBUILD_TESTING=FALSE when running cmake. This was also added upstream recently. However, something does still need to be fixed, at a cost: bpftrace requires the kernel -dev package because it wants both objects and include directories (some files are only shipped in one or the other). Therefore, we remove the dependency on linuxHeaders and instead use kernel.dev as the sole input to the build. This is both a positive and a negative: the positive is that tools work without annoying fatal errors, and that the bpf toolchain is synchronized to the linuxPackages.kernel derivation it was built against. The downside is that the .dev expression is much heavier as a dependency, so bpftrace is now closer to 700mb in closure size. (This especially hurts across kernel upgrades requiring a whole new rebuild, especially if you have existing nixos generations that won't GC, etc.) We probably want to slim this down substantially in the future (and there may be a few ways to do that), but as this will probably also touch bcc, and as a first cut of the pre-releases, this is probably fine while we work out other kinks. Signed-off-by: Austin Seipp <aseipp@pobox.com>
2019-05-03 06:16:37 +00:00
buildInputs = with llvmPackages;
2021-05-08 23:50:12 +00:00
[ llvm libclang
elfutils bcc
libbpf libbfd libopcodes
2021-12-03 23:56:03 +00:00
cereal asciidoctor
bpftrace: unstable-2018-10-27 -> 0.9 Update bpftrace to the latest pre-release, with a real version number. The most notable change now is that bpftrace can use a stable version of the 'bcc' toolchain in order to build, meaning no more hacks are needed to clone the source code and fix up the build system, etc. This simplifies things greatly and removes the old bcc-source patch. Similarly, we can remove our custom gtests patch (which disabled the build) by just passing -DBUILD_TESTING=FALSE when running cmake. This was also added upstream recently. However, something does still need to be fixed, at a cost: bpftrace requires the kernel -dev package because it wants both objects and include directories (some files are only shipped in one or the other). Therefore, we remove the dependency on linuxHeaders and instead use kernel.dev as the sole input to the build. This is both a positive and a negative: the positive is that tools work without annoying fatal errors, and that the bpf toolchain is synchronized to the linuxPackages.kernel derivation it was built against. The downside is that the .dev expression is much heavier as a dependency, so bpftrace is now closer to 700mb in closure size. (This especially hurts across kernel upgrades requiring a whole new rebuild, especially if you have existing nixos generations that won't GC, etc.) We probably want to slim this down substantially in the future (and there may be a few ways to do that), but as this will probably also touch bcc, and as a first cut of the pre-releases, this is probably fine while we work out other kinks. Signed-off-by: Austin Seipp <aseipp@pobox.com>
2019-05-03 06:16:37 +00:00
];
nativeBuildInputs = [ cmake pkg-config flex bison llvmPackages.llvm.dev util-linux ];
bpftrace: unstable-2018-10-27 -> 0.9 Update bpftrace to the latest pre-release, with a real version number. The most notable change now is that bpftrace can use a stable version of the 'bcc' toolchain in order to build, meaning no more hacks are needed to clone the source code and fix up the build system, etc. This simplifies things greatly and removes the old bcc-source patch. Similarly, we can remove our custom gtests patch (which disabled the build) by just passing -DBUILD_TESTING=FALSE when running cmake. This was also added upstream recently. However, something does still need to be fixed, at a cost: bpftrace requires the kernel -dev package because it wants both objects and include directories (some files are only shipped in one or the other). Therefore, we remove the dependency on linuxHeaders and instead use kernel.dev as the sole input to the build. This is both a positive and a negative: the positive is that tools work without annoying fatal errors, and that the bpf toolchain is synchronized to the linuxPackages.kernel derivation it was built against. The downside is that the .dev expression is much heavier as a dependency, so bpftrace is now closer to 700mb in closure size. (This especially hurts across kernel upgrades requiring a whole new rebuild, especially if you have existing nixos generations that won't GC, etc.) We probably want to slim this down substantially in the future (and there may be a few ways to do that), but as this will probably also touch bcc, and as a first cut of the pre-releases, this is probably fine while we work out other kinks. Signed-off-by: Austin Seipp <aseipp@pobox.com>
2019-05-03 06:16:37 +00:00
# tests aren't built, due to gtest shenanigans. see:
#
# https://github.com/iovisor/bpftrace/issues/161#issuecomment-453606728
# https://github.com/iovisor/bpftrace/pull/363
#
cmakeFlags =
[ "-DBUILD_TESTING=FALSE"
"-DLIBBCC_INCLUDE_DIRS=${bcc}/include"
bpftrace: unstable-2018-10-27 -> 0.9 Update bpftrace to the latest pre-release, with a real version number. The most notable change now is that bpftrace can use a stable version of the 'bcc' toolchain in order to build, meaning no more hacks are needed to clone the source code and fix up the build system, etc. This simplifies things greatly and removes the old bcc-source patch. Similarly, we can remove our custom gtests patch (which disabled the build) by just passing -DBUILD_TESTING=FALSE when running cmake. This was also added upstream recently. However, something does still need to be fixed, at a cost: bpftrace requires the kernel -dev package because it wants both objects and include directories (some files are only shipped in one or the other). Therefore, we remove the dependency on linuxHeaders and instead use kernel.dev as the sole input to the build. This is both a positive and a negative: the positive is that tools work without annoying fatal errors, and that the bpf toolchain is synchronized to the linuxPackages.kernel derivation it was built against. The downside is that the .dev expression is much heavier as a dependency, so bpftrace is now closer to 700mb in closure size. (This especially hurts across kernel upgrades requiring a whole new rebuild, especially if you have existing nixos generations that won't GC, etc.) We probably want to slim this down substantially in the future (and there may be a few ways to do that), but as this will probably also touch bcc, and as a first cut of the pre-releases, this is probably fine while we work out other kinks. Signed-off-by: Austin Seipp <aseipp@pobox.com>
2019-05-03 06:16:37 +00:00
];
# nuke the example/reference output .txt files, for the included tools,
# stuffed inside $out. we don't need them at all.
# (see "Allow skipping examples" for a potential option
# https://github.com/iovisor/bpftrace/pull/2256)
#
# Pull BPF scripts into $PATH (next to their bcc program equivalents), but do
# not move them to keep `${pkgs.bpftrace}/share/bpftrace/tools/...` working.
# (remove `chmod` once a new release "Add executable permission to tools"
# https://github.com/iovisor/bpftrace/commit/77e524e6d276216ed6a6e1984cf204418db07c78)
postInstall = ''
rm -rf $out/share/bpftrace/tools/doc
ln -s $out/share/bpftrace/tools/*.bt $out/bin/
chmod +x $out/bin/*.bt
'';
bpftrace: unstable-2018-10-27 -> 0.9 Update bpftrace to the latest pre-release, with a real version number. The most notable change now is that bpftrace can use a stable version of the 'bcc' toolchain in order to build, meaning no more hacks are needed to clone the source code and fix up the build system, etc. This simplifies things greatly and removes the old bcc-source patch. Similarly, we can remove our custom gtests patch (which disabled the build) by just passing -DBUILD_TESTING=FALSE when running cmake. This was also added upstream recently. However, something does still need to be fixed, at a cost: bpftrace requires the kernel -dev package because it wants both objects and include directories (some files are only shipped in one or the other). Therefore, we remove the dependency on linuxHeaders and instead use kernel.dev as the sole input to the build. This is both a positive and a negative: the positive is that tools work without annoying fatal errors, and that the bpf toolchain is synchronized to the linuxPackages.kernel derivation it was built against. The downside is that the .dev expression is much heavier as a dependency, so bpftrace is now closer to 700mb in closure size. (This especially hurts across kernel upgrades requiring a whole new rebuild, especially if you have existing nixos generations that won't GC, etc.) We probably want to slim this down substantially in the future (and there may be a few ways to do that), but as this will probably also touch bcc, and as a first cut of the pre-releases, this is probably fine while we work out other kinks. Signed-off-by: Austin Seipp <aseipp@pobox.com>
2019-05-03 06:16:37 +00:00
outputs = [ "out" "man" ];
passthru.tests = {
bpf = nixosTests.bpf;
};
meta = with lib; {
description = "High-level tracing language for Linux eBPF";
homepage = "https://github.com/iovisor/bpftrace";
bpftrace: unstable-2018-10-27 -> 0.9 Update bpftrace to the latest pre-release, with a real version number. The most notable change now is that bpftrace can use a stable version of the 'bcc' toolchain in order to build, meaning no more hacks are needed to clone the source code and fix up the build system, etc. This simplifies things greatly and removes the old bcc-source patch. Similarly, we can remove our custom gtests patch (which disabled the build) by just passing -DBUILD_TESTING=FALSE when running cmake. This was also added upstream recently. However, something does still need to be fixed, at a cost: bpftrace requires the kernel -dev package because it wants both objects and include directories (some files are only shipped in one or the other). Therefore, we remove the dependency on linuxHeaders and instead use kernel.dev as the sole input to the build. This is both a positive and a negative: the positive is that tools work without annoying fatal errors, and that the bpf toolchain is synchronized to the linuxPackages.kernel derivation it was built against. The downside is that the .dev expression is much heavier as a dependency, so bpftrace is now closer to 700mb in closure size. (This especially hurts across kernel upgrades requiring a whole new rebuild, especially if you have existing nixos generations that won't GC, etc.) We probably want to slim this down substantially in the future (and there may be a few ways to do that), but as this will probably also touch bcc, and as a first cut of the pre-releases, this is probably fine while we work out other kinks. Signed-off-by: Austin Seipp <aseipp@pobox.com>
2019-05-03 06:16:37 +00:00
license = licenses.asl20;
2021-12-03 23:56:03 +00:00
maintainers = with maintainers; [ rvl thoughtpolice martinetd ];
};
}