1{2 craneLib,3 lib,4 pkgs,5 runCommandLocal,6}:7let8 crateName = "remowt-agent";910 buildFor =11 {12 target,13 crossPkgs,14 }:15 let16 cc = crossPkgs.stdenv.cc;17 ccBin = "${cc}/bin/${cc.targetPrefix}";18 ut = builtins.replaceStrings [ "-" ] [ "_" ] target;19 linkerEnv = "CARGO_TARGET_${lib.toUpper ut}_LINKER";20 in21 craneLib.buildPackage (22 {23 src = craneLib.cleanCargoSource ../.;24 pname = "${crateName}-${target}";2526 cargoExtraArgs = "--locked -p ${crateName}";2728 CARGO_BUILD_TARGET = target;29 CARGO_BUILD_RUSTFLAGS = "-C target-feature=+crt-static";3031 depsBuildBuild = [ cc ];32 doCheck = false;33 }34 // {35 ${linkerEnv} = "${ccBin}cc";36 "CC_${ut}" = "${ccBin}cc";37 "CXX_${ut}" = "${ccBin}c++";38 "AR_${ut}" = "${ccBin}ar";39 }40 );41 x86_64 = buildFor {42 target = "x86_64-unknown-linux-musl";43 crossPkgs = pkgs;44 };45 aarch64 = buildFor {46 target = "aarch64-unknown-linux-musl";47 crossPkgs = pkgs.pkgsCross.aarch64-multiplatform-musl;48 };49 armv7l = buildFor {50 target = "armv7-unknown-linux-musleabihf";51 crossPkgs = pkgs.pkgsCross.armv7l-hf-multiplatform.pkgsMusl;52 };53in54runCommandLocal "remowt-agents-bundle"55 {56 passthru = {57 perArch = {58 inherit x86_64 aarch64 armv7l;59 };60 };61 }62 ''63 mkdir -p $out64 cp ${x86_64}/bin/remowt-agent $out/remowt-agent-x86_6465 cp ${aarch64}/bin/remowt-agent $out/remowt-agent-aarch6466 cp ${armv7l}/bin/remowt-agent $out/remowt-agent-armv7l67 chmod +w $out/remowt-agent-*6869 for arch in x86_64 aarch64 armv7l; do70 hash=$(sha256sum "$out/remowt-agent-$arch" | cut -d' ' -f1)71 printf '%s %s\n' "$arch" "$hash" >> $out/hashes72 done73 ''