mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-13 17:23:08 +00:00
ff1a94e523
The nixpkgs-unstable channel's programs.sqlite was used to identify packages producing exactly one binary, and these automatically added to their package definitions wherever possible.
126 lines
3.1 KiB
Nix
126 lines
3.1 KiB
Nix
{ lib
|
|
, makeWrapper
|
|
, fetchFromGitHub
|
|
, rustPackages
|
|
, pkg-config
|
|
, elfutils
|
|
, zlib
|
|
}:
|
|
let
|
|
inherit (rustPackages.rustc) llvmPackages;
|
|
inherit (rustPackages) rustPlatform;
|
|
bpftool = llvmPackages.stdenv.mkDerivation {
|
|
pname = "bpftool";
|
|
version = "unstable-2023-03-11";
|
|
|
|
# this fork specialized for some functions
|
|
# and has eventually been embedded into the ecc binary
|
|
src = fetchFromGitHub {
|
|
owner = "eunomia-bpf";
|
|
repo = "bpftool";
|
|
rev = "05940344f5db18d0cb1bc1c42e628f132bc93123";
|
|
hash = "sha256-g2gjixfuGwVnFlqCMGLWVPbtKOSpQI+vZwIZciXFPTc=";
|
|
fetchSubmodules = true;
|
|
};
|
|
|
|
buildInputs = [
|
|
llvmPackages.libllvm
|
|
elfutils
|
|
zlib
|
|
];
|
|
|
|
buildPhase = ''
|
|
make -C src
|
|
'';
|
|
|
|
installPhase = ''
|
|
# We don't use the default `make install` because we are looking to create a
|
|
# directory structure compatible with `build.rs` of `ecc`.
|
|
mkdir -p $out/src/libbpf
|
|
# some headers are required
|
|
cp -r src/libbpf/include $out/src/libbpf
|
|
cp src/bpftool $out/src
|
|
'';
|
|
};
|
|
|
|
vmlinux-headers = fetchFromGitHub {
|
|
owner = "eunomia-bpf";
|
|
repo = "vmlinux";
|
|
rev = "933f83becb45f5586ed5fd089e60d382aeefb409";
|
|
hash = "sha256-CVEmKkzdFNLKCbcbeSIoM5QjYVLQglpz6gy7+ZFPgCY=";
|
|
};
|
|
|
|
in
|
|
rustPlatform.buildRustPackage rec {
|
|
pname = "ecc";
|
|
version = "1.0.12";
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "eunomia-bpf";
|
|
repo = "eunomia-bpf";
|
|
rev = "v${version}";
|
|
hash = "sha256-EK/SZ9LNAk88JpHJEoxw12NHje6QdCqO/vT2TfkWlb0=";
|
|
};
|
|
|
|
sourceRoot = "${src.name}/compiler/cmd";
|
|
|
|
cargoHash = "sha256-ymBEzFsMTxKSdJRYoDY3AC0QpgtcMlU0fQV03emCxQc=";
|
|
|
|
nativeBuildInputs = [
|
|
pkg-config
|
|
makeWrapper
|
|
rustPlatform.bindgenHook
|
|
];
|
|
|
|
buildInputs = [
|
|
elfutils
|
|
zlib
|
|
];
|
|
|
|
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER = "gcc";
|
|
|
|
preBuild = ''
|
|
# `SANDBOX` defined by upstream to disable build-time network access
|
|
export SANDBOX=1
|
|
# specify dependencies' location
|
|
export VMLINUX_DIR=${vmlinux-headers}
|
|
export BPFTOOL_DIR=${bpftool}
|
|
'';
|
|
|
|
preCheck = ''
|
|
export HOME=$NIX_BUILD_TOP
|
|
'';
|
|
|
|
checkFlags = [
|
|
# requires network access
|
|
"--skip=bpf_compiler::tests::test_generate_custom_btf"
|
|
|
|
# FIXME: requires dynamic link `libclang` or clang binary which are not found in check env
|
|
"--skip=bpf_compiler::tests::test_compile_bpf"
|
|
"--skip=bpf_compiler::tests::test_export_multi_and_pack"
|
|
"--skip=document_parser::test::test_parse_empty"
|
|
"--skip=document_parser::test::test_parse_maps"
|
|
"--skip=document_parser::test::test_parse_progss"
|
|
"--skip=document_parser::test::test_parse_variables"
|
|
];
|
|
|
|
passthru = {
|
|
inherit bpftool;
|
|
};
|
|
|
|
postFixup = ''
|
|
wrapProgram $out/bin/ecc-rs \
|
|
--prefix LIBCLANG_PATH : ${llvmPackages.libclang.lib}/lib \
|
|
--prefix PATH : ${lib.makeBinPath (with llvmPackages; [clang bintools-unwrapped])}
|
|
'';
|
|
|
|
meta = with lib; {
|
|
homepage = "https://eunomia.dev";
|
|
description = "the eBPF compile toolchain for eunomia-bpf";
|
|
mainProgram = "ecc-rs";
|
|
maintainers = with maintainers; [ oluceps ];
|
|
platforms = platforms.linux;
|
|
license = licenses.mit;
|
|
};
|
|
}
|