nixpkgs/pkgs/by-name/ec/ecc/package.nix

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

135 lines
3.2 KiB
Nix
Raw Normal View History

{
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";
2024-09-04 07:06:24 +00:00
version = "1.0.27";
src = fetchFromGitHub {
owner = "eunomia-bpf";
repo = "eunomia-bpf";
rev = "v${version}";
2024-09-04 07:06:24 +00:00
hash = "sha256-KfYCC+TJbmjHrV46LoshD+uXcaBVMKk6+cN7TZKKYp4=";
};
sourceRoot = "${src.name}/compiler/cmd";
2024-09-04 07:06:24 +00:00
cargoHash = "sha256-t8sPwAha90SMC/SJqZngXD9hpoaWh9e91X/kuHN4G7o=";
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 : ${lib.getLib llvmPackages.libclang}/lib \
--prefix PATH : ${
lib.makeBinPath (
with llvmPackages;
[
clang
bintools-unwrapped
]
)
}
'';
meta = with lib; {
homepage = "https://eunomia.dev";
description = "EBPF compile toolchain for eunomia-bpf";
mainProgram = "ecc-rs";
maintainers = with maintainers; [ oluceps ];
platforms = platforms.linux;
license = licenses.mit;
};
}