-
Notifications
You must be signed in to change notification settings - Fork 1
/
flake.nix
123 lines (111 loc) · 3.9 KB
/
flake.nix
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
118
119
120
121
122
123
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
crane = {
url = "github:ipetkov/crane";
inputs.nixpkgs.follows = "nixpkgs";
};
fenix = {
url = "github:nix-community/fenix";
inputs.nixpkgs.follows = "nixpkgs";
inputs.rust-analyzer-src.follows = "";
};
advisory-db = {
url = "github:rustsec/advisory-db";
flake = false;
};
};
outputs = { self, nixpkgs, crane, fenix, advisory-db, ... }@inputs:
let
supportedSystems = [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ];
forAllSystems = nixpkgs.lib.genAttrs supportedSystems;
nixpkgsFor = forAllSystems (system: import nixpkgs { inherit system; overlays = [ self.overlays.default ]; });
in
{
overlays.default = final: prev:
let
stdenv = if prev.stdenv.isDarwin then final.overrideLibcxx final.darwin.apple_sdk_11_0.llvmPackages_14.stdenv else prev.stdenv;
rustPlatform = final.makeRustPlatform { inherit stdenv; inherit (final) rustc cargo; };
in
{
pythonPackagesExtensions = prev.pythonPackagesExtensions ++ [
(python-final: python-prev: {
pyperscan = final.callPackage (import ./pyperscan.nix inputs) { inherit stdenv rustPlatform; python3 = python-final.python; };
})
];
vectorscan = prev.vectorscan.override { inherit stdenv; };
};
checks = forAllSystems (system:
let
inherit (nixpkgsFor.${system}) rustPlatform;
inherit (nixpkgsFor.${system}.python3Packages) pyperscan;
nativeBuildInputs = with rustPlatform; [
bindgenHook
];
inherit (pyperscan) cargoArtifacts craneLib commonArgs libpyperscan src;
in
pyperscan.passthru.tests // {
# Build the crate as part of `nix flake check` for convenience
inherit libpyperscan;
# Run clippy (and deny all warnings) on the crate source,
# again, resuing the dependency artifacts from above.
#
# Note that this is done as a separate derivation so that
# we can block the CI if there are issues here, but not
# prevent downstream consumers from building our crate by itself.
libpyperscan-clippy = craneLib.cargoClippy (commonArgs // {
inherit nativeBuildInputs cargoArtifacts;
cargoClippyExtraArgs = "--all-targets -- --deny warnings";
});
libpyperscan-doc = craneLib.cargoDoc (commonArgs // {
inherit nativeBuildInputs cargoArtifacts;
});
# Check formatting
libpyperscan-fmt = craneLib.cargoFmt {
inherit src;
};
# Audit dependencies
libpyperscan-audit = craneLib.cargoAudit {
inherit src advisory-db;
};
}
);
formatter = forAllSystems (system: nixpkgsFor.${system}.nixpkgs-fmt);
packages = forAllSystems (system:
let
inherit (nixpkgsFor.${system}.python3Packages) pyperscan;
in
{
inherit pyperscan;
default = pyperscan;
});
devShells = forAllSystems (system:
let
pkgs = nixpkgsFor.${system};
in
{
default = with pkgs; mkShell {
inputsFrom = [ python3Packages.pyperscan.libpyperscan ];
buildInputs = [
just
maturin
pdm
podman
pre-commit
boost
cmake
ragel
rustPlatform.bindgenHook
(fenix.packages.${system}.complete.withComponents [
"cargo"
"clippy"
"rust-src"
"rustc"
"rustfmt"
])
fenix.packages.${system}.complete.rust-analyzer
];
};
});
};
}