blob: 82d005a628b9455abfdc7e791cd76635d0a99e9a (
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
{
nixConfig = {
substituters =
[ "https://cache.nixos.org/" "https://nix-community.cachix.org" ];
trusted-public-keys = [
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
];
};
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-23.05";
fenix = {
url = "github:nix-community/fenix";
inputs.nixpkgs.follows = "nixpkgs";
};
crane = {
url = "github:ipetkov/crane";
inputs.nixpkgs.follows = "nixpkgs";
};
advisory-db = {
url = "github:rustsec/advisory-db";
flake = false;
};
utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, utils, fenix, crane, advisory-db }:
with nixpkgs.lib;
utils.lib.eachDefaultSystem (system:
let
pkgs = nixpkgs.legacyPackages.${system};
rustToolchain = with fenix.packages.${system};
combine ([ latest.toolchain ] ++ (if system == "x86_64-linux" then
[ targets.x86_64-unknown-linux-musl.latest.rust-std ]
else
[ ]));
openssl =
(if (system == "aarch64-darwin" || system == "x86_64-darwin") then
pkgs.openssl.override { static = true; }
else
pkgs.pkgsStatic.openssl);
nativeBuildInputs = with pkgs;
[
rustToolchain
pkg-config
openssl
] ++ lib.optional stdenv.isDarwin [
pkgs.darwin.libiconv
pkgs.darwin.apple_sdk.frameworks.Security
];
OPENSSL_STATIC = "true";
OPENSSL_DIR = "${openssl}";
OPENSSL_LIB_DIR = "${openssl.out}/lib";
OPENSSL_CRYPTO_LIBRARY = "${openssl.out}/lib";
OPENSSL_INCLUDE_DIR = "${openssl.dev}/include";
CARGO_BUILD_TARGET = if system == "x86_64-linux" then
"x86_64-unknown-linux-musl"
else
null;
CARGO_BUILD_RUSTFLAGS = if system == "x86_64-linux" then
"-C target-feature=+crt-static"
else
null;
graphqlFilter = path: _type: builtins.match ".*graphql$" path != null;
markdownFilter = path: _type: builtins.match ".*md$" path != null;
markdownOrCargo = path: type:
(graphqlFilter path type) || (markdownFilter path type)
|| (craneLib.filterCargoSources path type);
# crane setup
craneLib = crane.lib.${system}.overrideToolchain rustToolchain;
src = nixpkgs.lib.cleanSourceWith {
src = craneLib.path ./.; # The original, unfiltered source
filter = markdownOrCargo;
};
cargoArtifacts = self.packages.${system}.cargoArtifacts;
in {
packages = {
cargoArtifacts = craneLib.buildDepsOnly {
inherit src;
inherit nativeBuildInputs OPENSSL_STATIC OPENSSL_DIR OPENSSL_LIB_DIR
OPENSSL_CRYPTO_LIBRARY OPENSSL_INCLUDE_DIR CARGO_BUILD_TARGET
CARGO_BUILD_RUSTFLAGS;
};
#####################################
# Build Binaries
gtree = craneLib.buildPackage {
inherit cargoArtifacts src;
inherit nativeBuildInputs OPENSSL_STATIC OPENSSL_DIR OPENSSL_LIB_DIR
OPENSSL_CRYPTO_LIBRARY OPENSSL_INCLUDE_DIR CARGO_BUILD_TARGET
CARGO_BUILD_RUSTFLAGS;
};
default = self.packages.${system}.gtree;
};
devShells.default = pkgs.mkShell {
inherit nativeBuildInputs OPENSSL_STATIC OPENSSL_DIR OPENSSL_LIB_DIR
OPENSSL_CRYPTO_LIBRARY OPENSSL_INCLUDE_DIR CARGO_BUILD_TARGET
CARGO_BUILD_RUSTFLAGS;
};
formatter = pkgs.nixfmt;
});
}
|