summaryrefslogtreecommitdiff
path: root/nix/deployment/static.nix
blob: dcdf0f3ad2bbd5b608bb2d8ae8be365c25fa9b49 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
{
  perSystem = {
    lib,
    pkgs,
    inputs',
    self',
    ...
  }: let
    targets = with pkgs.pkgsCross; {
      x86_64 = musl64.pkgsStatic;
      aarch64 = aarch64-multiplatform.pkgsStatic;
    };

    toolchain = let
      fenix = inputs'.fenix.packages;
    in
      with fenix;
        combine (
          [minimal.cargo minimal.rustc]
          ++ map (
            pkgs:
              fenix.targets.${pkgs.stdenv.hostPlatform.config}.latest.rust-std
          ) (lib.attrValues targets)
        );

    rustPlatforms =
      lib.mapAttrs (
        lib.const (pkgs:
          pkgs.makeRustPlatform (
            lib.genAttrs ["cargo" "rustc"] (lib.const toolchain)
          ))
      )
      targets;

    buildTeawieWith = rustPlatform:
      self'.packages.teawiebot.override {
        inherit rustPlatform;
        lto = true;
        optimizeSize = true;
      };
  in {
    packages = lib.optionalAttrs pkgs.stdenv.isLinux (
      lib.mapAttrs' (
        target: rustPlatform:
          lib.nameValuePair "teawiebot-static-${target}" (buildTeawieWith rustPlatform)
      )
      rustPlatforms
    );
  };
}