summary refs log blame commit diff
path: root/pkgs/os-specific/linux/bpftrace/default.nix
blob: 12773a957165f116a9d3cb28170f70d25b226d0b (plain) (tree)
























































                                                                         
{ stdenv, fetchFromGitHub
, cmake, pkgconfig, flex, bison
, llvmPackages, kernel, linuxHeaders, elfutils, libelf, bcc
}:

stdenv.mkDerivation rec {
  name = "bpftrace-unstable-${version}";
  version = "2018-10-27";

  src = fetchFromGitHub {
    owner = "iovisor";
    repo = "bpftrace";
    rev = "c07b54f61fd7b7b49e0a254e746d6f442c5d780d";
    sha256 = "1mpcjfyay9akmpqxag2ndwpz1qsdx8ii07jh9fky4w40wi9cipyg";
  };

  # bpftrace requires an unreleased version of bcc, added to the cmake
  # build as an ExternalProject.
  # https://github.com/iovisor/bpftrace/issues/184
  bccSrc = fetchFromGitHub {
    owner = "iovisor";
    repo = "bcc";
    rev = "afd00154865f3b2da6781cf92cecebaca4853950";
    sha256 = "0ad78smrnipr1f377i5rv6ksns7v2vq54g5badbj5ldqs4x0hygd";
  };

  buildInputs = [
    llvmPackages.llvm llvmPackages.clang-unwrapped kernel
    elfutils libelf bccSrc
  ];

  nativeBuildInputs = [ cmake pkgconfig flex bison ]
    # libelf is incompatible with elfutils-libelf
    ++ stdenv.lib.filter (x: x != libelf) kernel.moduleBuildDependencies;

  patches = [
    ./bcc-source.patch
    # https://github.com/iovisor/bpftrace/issues/184
    ./disable-gtests.patch
  ];

  configurePhase = ''
    mkdir build
    cd build
    cmake ../                                   \
      -DKERNEL_HEADERS_DIR=${linuxHeaders}      \
      -DNIX_BUILDS:BOOL=ON                      \
      -DCMAKE_INSTALL_PREFIX=$out
  '';

  meta = with stdenv.lib; {
    description = "High-level tracing language for Linux eBPF";
    homepage = https://github.com/iovisor/bpftrace;
    license = licenses.asl20;
    maintainers = with maintainers; [ rvl ];
  };
}