221 lines
4.9 KiB
Nix
221 lines
4.9 KiB
Nix
{ 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
|
|
'';
|
|
};
|
|
}
|