87 lines
2.1 KiB
Nix
87 lines
2.1 KiB
Nix
{
|
|
inputs,
|
|
self,
|
|
...
|
|
}: {
|
|
flake.nixosModules.default = import ./module.nix self;
|
|
|
|
perSystem = {
|
|
lib,
|
|
pkgs,
|
|
system,
|
|
self',
|
|
inputs',
|
|
...
|
|
}: let
|
|
crossPkgsFor =
|
|
{
|
|
x86_64-linux = {
|
|
x86_64 = pkgs.pkgsStatic;
|
|
aarch64 = pkgs.pkgsCross.aarch64-multiplatform.pkgsStatic;
|
|
};
|
|
|
|
aarch64-linux = {
|
|
x86_64 = pkgs.pkgsCross.musl64;
|
|
aarch64 = pkgs.pkgsStatic;
|
|
};
|
|
|
|
x86_64-darwin = {
|
|
x86_64 = pkgs.pkgsCross.musl64;
|
|
aarch64 = pkgs.pkgsCross.aarch64-multiplatform.pkgsStatic;
|
|
};
|
|
|
|
aarch64-darwin = crossPkgsFor.x86_64-darwin;
|
|
}
|
|
.${system};
|
|
|
|
exeFor = arch: let
|
|
target = "${arch}-unknown-linux-musl";
|
|
target' = builtins.replaceStrings ["-"] ["_"] target;
|
|
targetUpper = lib.toUpper target';
|
|
|
|
toolchain = with inputs'.fenix.packages;
|
|
combine [
|
|
minimal.cargo
|
|
minimal.rustc
|
|
targets.${target}.latest.rust-std
|
|
];
|
|
|
|
naersk' = inputs.naersk.lib.${system}.override {
|
|
cargo = toolchain;
|
|
rustc = toolchain;
|
|
};
|
|
|
|
refraction = self'.packages.refraction.override {
|
|
naersk = naersk';
|
|
optimizeSize = true;
|
|
};
|
|
|
|
newAttrs = {
|
|
CARGO_BUILD_TARGET = target;
|
|
"CC_${target'}" = "${cc}/bin/${cc.targetPrefix}cc";
|
|
"CARGO_TARGET_${targetUpper}_RUSTFLAGS" = "-C target-feature=+crt-static";
|
|
"CARGO_TARGET_${targetUpper}_LINKER" = newAttrs."CC_${target'}";
|
|
};
|
|
|
|
inherit (crossPkgsFor.${arch}.stdenv) cc;
|
|
in
|
|
lib.getExe (
|
|
refraction.overrideAttrs (lib.const newAttrs)
|
|
);
|
|
|
|
containerFor = arch:
|
|
pkgs.dockerTools.buildLayeredImage {
|
|
name = "refraction";
|
|
tag = "latest-${arch}";
|
|
contents = [pkgs.dockerTools.caCertificates];
|
|
config.Cmd = [(exeFor arch)];
|
|
|
|
architecture = crossPkgsFor.${arch}.go.GOARCH;
|
|
};
|
|
in {
|
|
legacyPackages = {
|
|
container-x86_64 = containerFor "x86_64";
|
|
container-aarch64 = containerFor "aarch64";
|
|
};
|
|
};
|
|
}
|