{ pkgs, libcap-src, libnl-src, libpcap-src, winpcap-installer , freebsd-libs-packed }: let freebsd-libs = pkgs.stdenv.mkDerivation { name = "freebsd-libs"; buildInputs = with pkgs; [ gnutar ]; unpackPhase = '' mkdir -p $out tar xvJpf ${freebsd-libs-packed} -C $out ./usr/lib tar xvJpf ${freebsd-libs-packed} -C $out ./usr/include tar xvJpf ${freebsd-libs-packed} -C $out ./lib ''; }; freebsd-toolchain = with pkgs.pkgsCross.x86_64-freebsd.buildPackages; pkgs.writeText "freebsd-toolchain.cmake" '' set(CMAKE_SYSTEM_NAME FreeBSD) set(CMAKE_C_COMPILER ${clang}/bin/x86_64-unknown-freebsd-clang) set(CMAKE_CXX_COMPILER ${clang}/bin/x86_64-unknown-freebsd-clang++) set(CMAKE_FIND_ROOT_PATH ${freebsd-libs}) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) ''; in { inherit freebsd-libs; winpcap-drivers = pkgs.stdenv.mkDerivation { name = "winpcap-drivers"; buildInputs = with pkgs; [ p7zip ]; # extract only the 64 bit drivers unpackPhase = '' mkdir -p $out printf 'Y\nN\n' | 7z e "${winpcap-installer}" '$SYSDIR/drivers/npf.sys' printf 'Y\n' | 7z e "${winpcap-installer}" '$SYSDIR/wpcap.dll' printf 'Y\nY\nN\nN\n' | 7z e "${winpcap-installer}" '$SYSDIR/Packet.dll' mv npf.sys $out/npf.sys mv wpcap.dll $out/wpcap.dll mv Packet.dll $out/Packet.dll ''; }; libnl = pkgs.stdenv.mkDerivation { name = "libnl-static"; nativeBuildInputs = with pkgs; [ musl clang autoconf automake libtool pkg-config autoconf-archive flex bison ]; src = libnl-src; configurePhase = '' export CC=musl-clang export CXX=musl-clang aclocal autoreconf -vi ./configure \ --enable-static \ --disable-shared ''; buildPhase = '' export CC=musl-clang export CXX=musl-clang make ''; installPhase = '' mkdir -p $out/lib cp lib/.libs/*.a $out/lib ''; }; libcap = pkgs.stdenv.mkDerivation { name = "libcap-static"; nativeBuildInputs = with pkgs; [ clang musl ]; src = libcap-src; buildPhase = '' export BUILD_CC=musl-clang export CC=musl-gcc export CXX=musl-gcc make -C libcap ''; installPhase = '' mkdir -p $out/lib cp -a libcap/* $out/lib ''; }; libpcap-linux-gnu = pkgs.stdenv.mkDerivation { name = "libpcap-static-linux-gnu"; buildInputs = with pkgs; [ clang automake bison cmake flex glibc.static ]; src = libpcap-src; configurePhase = '' cmake \ -DCMAKE_BUILD_TYPE=MinSizeRel \ -DBUILD_SHARED_LIBS=OFF \ -DDISABLE_BLUETOOTH=ON \ -DDISABLE_DAG=ON \ -DDISABLE_DBUS=ON \ -DDISABLE_DPDK=ON \ -DDISABLE_NETMAP=ON \ -DDISABLE_RDMA=ON \ -DDISABLE_LINUX_USBMON=ON \ -DDISABLE_SNF=ON \ -DPCAP_TYPE=linux \ . ''; buildPhase = '' cmake --build . --target pcap_static ''; installPhase = '' mkdir -p $out/lib cp libpcap.a $out/lib ''; }; libpcap-linux-musl = pkgs.stdenv.mkDerivation { name = "libpcap-static-linux-musl"; buildInputs = with pkgs; [ clang automake bison cmake flex musl ]; src = libpcap-src; configurePhase = '' export CC=musl-clang cmake \ -DCMAKE_BUILD_TYPE=MinSizeRel \ -DBUILD_SHARED_LIBS=OFF \ -DDISABLE_BLUETOOTH=ON \ -DDISABLE_DAG=ON \ -DDISABLE_DBUS=ON \ -DDISABLE_DPDK=ON \ -DDISABLE_NETMAP=ON \ -DDISABLE_RDMA=ON \ -DDISABLE_LINUX_USBMON=ON \ -DDISABLE_SNF=ON \ -DPCAP_TYPE=linux \ . ''; buildPhase = '' cmake --build . --target pcap_static ''; installPhase = '' mkdir -p $out/lib cp libpcap.a $out/lib ''; }; libpcap-freebsd = pkgs.stdenv.mkDerivation { name = "libpcap-static-freebsd"; nativeBuildInputs = with pkgs.pkgsCross.x86_64-freebsd.buildPackages; [ clang lld automake bison cmake flex ]; src = libpcap-src; configurePhase = '' export CC=x86_64-unknown-freebsd-clang export CXX=x86_64-unknown-freebsd-clang++ cmake \ -DCMAKE_TOOLCHAIN_FILE=${freebsd-toolchain} \ -DCMAKE_BUILD_TYPE=MinSizeRel \ -DBUILD_SHARED_LIBS=OFF \ -DDISABLE_BLUETOOTH=ON \ -DDISABLE_DAG=ON \ -DDISABLE_DBUS=ON \ -DDISABLE_DPDK=ON \ -DDISABLE_NETMAP=ON \ -DDISABLE_RDMA=ON \ -DDISABLE_SNF=ON \ -DPCAP_TYPE=bpf \ . ''; buildPhase = '' cmake --build . --target pcap_static ''; installPhase = '' mkdir -p $out/lib cp libpcap.a $out/lib ''; }; }