sparse-v2/system-libs.nix
Andrew Rioux 90c8b97141
feat: fixed server comp, added ELF inject
I gave up and just put it in a Docker image, it's not as important as
the beacons being statically compiled
2025-02-04 16:42:05 -05:00

217 lines
4.7 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'
mv npf.sys $out/npf.sys
'';
};
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
'';
};
}