sparse-v2/system-libs.nix
2025-01-19 20:46:46 -05:00

126 lines
2.9 KiB
Nix

{ pkgs, 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
'';
};
bsd-toolchain = with pkgs.pkgsCross.x86_64-freebsd.buildPackages;
pkgs.writeText "bsd-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'
mv npf.sys $out/npf.sys
'';
};
libnl = pkgs.stdenv.mkDerivation {
name = "libnl-static";
buildInputs = with pkgs; [ autoconf automake libtool ];
};
libpcap-linux = pkgs.stdenv.mkDerivation {
name = "libpcap-static-linux";
buildInputs = with pkgs; [ automake bison cmake flex ];
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-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 = ''
cmake \
-DCMAKE_TOOLCHAIN_FILE=${bsd-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
'';
};
}