feat: added zig loaders for unix and refactor

This commit is contained in:
Andrew Rioux
2025-01-21 00:41:42 -05:00
parent 5ee8802607
commit 489b1d380f
15 changed files with 225 additions and 21 deletions
+116 -7
View File
@@ -19,6 +19,15 @@ let
};
patch-freebsd-elf = patch-elf 9;
freebsd-zig-libc = pkgs.writeText "freebsd-libc.txt" ''
include_dir=${freebsd-libs}/usr/include
sys_include_dir=${freebsd-libs}/usr/include
sys_include_dir=${freebsd-libs}/usr/lib
msvc_lib_dir=
kernel32_lib_dir=
gcc_dir=
'';
src = craneLib.cleanCargoSource ./.;
commonArgs = buildEnvironment // {
@@ -45,6 +54,22 @@ let
];
};
fileSetForInstallerCrate = pkgs.lib.fileset.toSource {
root = ./.;
fileset = pkgs.lib.fileset.unions [
./.cargo/config.toml
./Cargo.toml
./Cargo.lock
./build_common.rs
(craneLib.fileset.commonCargoSources ./sparse-actions)
(craneLib.fileset.commonCargoSources ./pcap-sys)
(craneLib.fileset.commonCargoSources ./nl-sys)
./nl-sys/src/bridge.c
(craneLib.fileset.commonCargoSources ./packets)
(craneLib.fileset.commonCargoSources ./sparse-installer)
];
};
fileSetForWebCrate = pkgs.lib.fileset.toSource {
root = ./.;
fileset = pkgs.lib.fileset.unions [
@@ -97,7 +122,7 @@ let
sparse-beacon-linux = craneLib.buildPackage (commonArgs // {
cargoArtifacts = linuxCargoArtifacts;
name = "sparse-beacon-linux";
cargoExtraArgs = "-p sparse-beacon";
cargoExtraArgs = "-p sparse-unix-beacon";
src = fileSetForBeaconCrate;
CARGO_BUILD_TARGET = "x86_64-unknown-linux-musl";
@@ -107,7 +132,7 @@ let
sparse-beacon-freebsd-sysv = craneLib.buildPackage (freebsdArgs // {
cargoArtifacts = freebsdCargoArtifacts;
name = "sparse-beacon-freebsd";
cargoExtraArgs = "-p sparse-beacon";
cargoExtraArgs = "-p sparse-unix-beacon";
nativeBuildInputs = buildTools;
@@ -121,12 +146,81 @@ let
sparse-beacon-windows = craneLib.buildPackage (windowsArgs // {
cargoArtifacts = windowsCargoArtifacts;
name = "sparse-beacon-windows";
cargoExtraArgs = "-p sparse-beacon";
cargoExtraArgs = "-p sparse-windows-beacon";
CARGO_BUILD_TARGET = "x86_64-pc-windows-gnu";
CARGO_BUILD_RUSTFLAGS = "-Ctarget-feature=+crt-static";
});
linux-loader = pkgs.stdenv.mkDerivation {
name = "sparse-linux-loader";
buildInputs = with pkgs; [ zig ];
src = ./unix-loader;
buildPhase = ''
zig build \
-Dtarget=x86_64-linux-musl
'';
installPhase = ''
mkdir -p $out/lib
cp zig-out/lib/libunix-loader.so $out/lib/unix-loader.so
'';
SPARSE_BEACON = "${sparse-beacon-linux}/bin/sparse-beacon";
};
freebsd-loader = pkgs.stdenv.mkDerivation {
name = "sparse-freebsd-loader";
buildInputs = with pkgs; [ zig ];
src = ./unix-loader;
buildPhase = ''
zig build \
-Dtarget=x86_64-freebsd \
--sysroot ${freebsd-libs} \
--libc ${freebsd-zig-libc}
'';
installPhase = ''
mkdir -p $out/lib
cp zig-out/lib/libunix-loader.so $out/lib/unix-loader.so
'';
SPARSE_BEACON = "${sparse-beacon-freebsd}/bin/sparse-beacon";
};
sparse-installer-linux = craneLib.buildPackage (commonArgs // {
cargoArtifacts = linuxCargoArtifacts;
name = "sparse-installer-linux";
cargoExtraArgs = "-p sparse-installer";
src = fileSetForInstallerCrate;
CARGO_BUILD_TARGET = "x86_64-unknown-linux-musl";
CARGO_BUILD_RUSTFLAGS = "-Ctarget-feature=+crt-static";
SPARSE_INSTALLER_LINUX = "${linux-loader}/lib/unix-loader.so";
});
sparse-installer-freebsd-sysv = craneLib.buildPackage (commonArgs // {
cargoArtifacts = linuxCargoArtifacts;
name = "sparse-installer-linux";
cargoExtraArgs = "-p sparse-installer";
src = fileSetForInstallerCrate;
CARGO_BUILD_TARGET = "x86_64-unknown-linux-musl";
CARGO_BUILD_RUSTFLAGS = "-Ctarget-feature=+crt-static";
SPARSE_INSTALLER_FREEBSD = "${freebsd-loader}/lib/unix-loader.so";
});
sparse-installer-freebsd =
patch-freebsd-elf sparse-installer-freebsd-sysv "bin/sparse-installer";
sparse-server = craneLib.buildPackage (commonArgs // {
src = fileSetForWebCrate;
@@ -145,15 +239,20 @@ let
cp target/x86_64-unknown-linux-musl/release/sparse-server $out/bin
'';
SPARSE_BEACON_LINUX = "${sparse-beacon-linux}/bin/sparse-beacon";
SPARSE_INSTALLER_LINUX = "${sparse-installer-linux}/bin/sparse-installer";
SPARSE_INSTALLER_FREEBSD =
"${sparse-installer-freebsd}/bin/sparse-installer";
SPARSE_BEACON_WINDOWS = "${sparse-beacon-windows}/bin/sparse-beacon.exe";
SPARSE_BEACON_FREEBSD = "${sparse-beacon-freebsd}/bin/sparse-beacon";
});
outputs = rec {
packages = {
inherit sparse-beacon-linux sparse-beacon-windows sparse-beacon-freebsd
sparse-server;
inherit sparse-server sparse-beacon-linux sparse-beacon-windows
linux-loader freebsd-loader sparse-beacon-freebsd;
inherit freebsd-zig-libc;
default = sparse-server;
};
checks = outputs.packages // {
rs-fmt = craneLib.cargoFmt { inherit src; };
@@ -166,6 +265,16 @@ let
cargoArtifacts = linuxCargoArtifacts;
cargoClippyExtraArgs = "--all-targets -- --deny warnings";
});
zig-fmt = pkgs.stdenv.mkDerivation {
name = "zig-fmt-check";
src = ./.;
checkPhase = ''
zig fmt --check
'';
};
};
};
in outputs