forked from charmoniumQ/PROBE
-
Notifications
You must be signed in to change notification settings - Fork 0
/
flake.nix
153 lines (147 loc) · 4.77 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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
{
inputs = {
nixpkgs = {
url = "github:NixOS/nixpkgs/nixpkgs-unstable";
};
flake-utils = {
url = "github:numtide/flake-utils";
};
crane = {
url = "github:ipetkov/crane";
inputs.nixpkgs.follows = "nixpkgs";
};
advisory-db = {
url = "github:rustsec/advisory-db";
flake = false;
};
rust-overlay = {
url = "github:oxalica/rust-overlay";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = {
self,
nixpkgs,
flake-utils,
rust-overlay,
...
} @ inputs: let
supported-systems = [
"x86_64-linux"
"i686-linux"
"aarch64-linux"
"armv7l-linux"
];
in
flake-utils.lib.eachSystem supported-systems (
system: let
pkgs = import nixpkgs {
inherit system;
overlays = [(import rust-overlay)];
};
python = pkgs.python312;
frontend = (import ./probe_src/frontend/frontend.nix) ({inherit system pkgs python;} // inputs);
in {
packages =
rec {
probe-bundled = let
# libprobe is a "private" package
# It is only used in probe-bundled
# TODO: The only public package should probably be probe-bundled and probe-py.
libprobe = pkgs.stdenv.mkDerivation rec {
pname = "libprobe";
version = "0.1.0";
src = ./probe_src/libprobe;
makeFlags = ["INSTALL_PREFIX=$(out)" "SOURCE_VERSION=${version}"];
buildInputs = [
(pkgs.python312.withPackages (pypkgs: [
pypkgs.pycparser
]))
];
};
in
pkgs.stdenv.mkDerivation rec {
pname = "probe-bundled";
version = "0.1.0";
dontUnpack = true;
dontBuild = true;
nativeBuildInputs = [pkgs.makeWrapper];
installPhase = ''
mkdir $out $out/bin
makeWrapper \
${self.packages.${system}.probe-cli}/bin/probe \
$out/bin/probe \
--set __PROBE_LIB ${libprobe}/lib \
--prefix PATH : ${probe-py}/bin
'';
};
probe-py-manual = python.pkgs.buildPythonPackage rec {
pname = "probe_py.manual";
version = "0.1.0";
pyproject = true;
build-system = [
python.pkgs.flit-core
];
src = ./probe_src/python;
propagatedBuildInputs = [
self.packages.${system}.probe-py-generated
python.pkgs.networkx
python.pkgs.pygraphviz
python.pkgs.pydot
python.pkgs.rich
python.pkgs.typer
];
pythonImportsCheck = [pname];
};
probe-py = python.withPackages (pypkgs: [probe-py-manual]);
default = probe-bundled;
}
// frontend.packages;
# TODO: Run pytest tests in Nix checks
checks = self.packages.${system} // frontend.checks;
devShells = {
default = frontend.devShells.default.overrideAttrs (oldAttrs: rec {
shellHook = ''
pushd $(git rev-parse --show-toplevel)
source ./setup_devshell.sh
popd
'';
buildInputs =
oldAttrs.buildInputs
++ [
(python.withPackages (pypkgs: [
# probe_py.manual runtime requirements
pypkgs.networkx
pypkgs.pygraphviz
pypkgs.pydot
pypkgs.rich
pypkgs.typer
# probe_py.manual "dev time" requirements
pypkgs.psutil
pypkgs.pytest
pypkgs.mypy
pypkgs.ipython
# libprobe build time requirement
pypkgs.pycparser
]))
# (export-and-rename python312-debug [["bin/python" "bin/python-dbg"]])
pkgs.which
pkgs.gnumake
pkgs.gcc
pkgs.coreutils
pkgs.bash
pkgs.alejandra
pkgs.hyperfine
pkgs.just
pkgs.black
pkgs.ruff
]
# gdb broken on apple silicon
++ pkgs.lib.lists.optional (system != "aarch64-darwin") pkgs.gdb
# while xdot isn't marked as linux only, it has a dependency (xvfb-run) that is
++ pkgs.lib.lists.optional (builtins.elem system pkgs.lib.platforms.linux) pkgs.xdot;
});
};
}
);
}