|
17 | 17 | flake-parts.lib.mkFlake { inherit inputs; } {
|
18 | 18 | imports = [ ];
|
19 | 19 | systems = [ "x86_64-linux" "aarch64-linux" "aarch64-darwin" "x86_64-darwin" ];
|
20 |
| - perSystem = { config, pkgs, system, inputs', ... }: |
| 20 | + perSystem = { config, pkgs, system, ... }: |
21 | 21 | let
|
22 |
| - glibc-join = p: p.buildPackages.symlinkJoin { |
23 |
| - name = "glibc-join"; |
24 |
| - paths = [ p.glibc p.glibc.static ]; |
25 |
| - }; |
26 |
| - |
27 |
| - wrap-gcc = p: p.buildPackages.wrapCCWith { |
28 |
| - cc = p.buildPackages.gcc13.cc; |
29 |
| - bintools = p.buildPackages.wrapBintoolsWith { |
30 |
| - bintools = p.buildPackages.binutils-unwrapped; |
31 |
| - libc = glibc-join p; |
32 |
| - }; |
33 |
| - }; |
34 |
| - |
35 |
| - native-gcc = |
36 |
| - if pkgs.stdenv.isDarwin |
37 |
| - then null |
38 |
| - else wrap-gcc pkgs; |
39 |
| - |
40 |
| - # cross is for determining whether to install the cross toolchain or not |
41 |
| - core = { cross ? true }: |
42 |
| - let |
43 |
| - x86_64-gcc = wrap-gcc pkgs.pkgsCross.gnu64; |
44 |
| - aarch64-gcc = wrap-gcc pkgs.pkgsCross.aarch64-multiplatform; |
45 |
| - riscv64-gcc = wrap-gcc pkgs.pkgsCross.riscv64; |
46 |
| - aarch64_be-gcc = (pkgs.callPackage ./nix/aarch64_be-none-linux-gnu-gcc.nix { }); |
47 |
| - in |
48 |
| - # NOTE: |
49 |
| - # - native toolchain should be equipped in the shell via `mkShellWithCC` (see `mkShell`) |
50 |
| - # - only install extra cross-compiled toolchains if not on darwin or `cross` is specifally set to true |
51 |
| - # - providing cross compilation toolchain (x86_64/aarch64-linux) for darwin can be cumbersome |
52 |
| - # and won't just work for now |
53 |
| - # - equip all toolchains if cross is explicitly set to true |
54 |
| - # - On some machines, `native-gcc` needed to be evaluated lastly (placed as the last element of the toolchain list), or else would result in environment variables (CC, AR, ...) overriding issue. |
55 |
| - pkgs.lib.optionals (cross && !pkgs.stdenv.isDarwin) [ |
56 |
| - (pkgs.lib.optional (! pkgs.stdenv.hostPlatform.isx86_64) x86_64-gcc) |
57 |
| - (pkgs.lib.optional (! pkgs.stdenv.hostPlatform.isAarch64) aarch64-gcc) |
58 |
| - (pkgs.lib.optional (! pkgs.stdenv.hostPlatform.isRiscV64) riscv64-gcc) |
59 |
| - (pkgs.lib.optional (pkgs.stdenv.hostPlatform.isx86_64) aarch64_be-gcc) |
60 |
| - native-gcc |
61 |
| - ] |
62 |
| - ++ builtins.attrValues { |
63 |
| - inherit (config.packages) base; |
64 |
| - inherit (pkgs) |
65 |
| - qemu; # 8.2.4 |
66 |
| - }; |
67 |
| - |
68 |
| - wrapShell = mkShell: attrs: |
69 |
| - mkShell (attrs // { |
70 |
| - shellHook = '' |
71 |
| - export PATH=$PWD/scripts:$PWD/scripts/ci:$PATH |
72 |
| - '' + |
73 |
| - # NOTE: we don't support nix gcc toolchains for darwin system, therefore explicitly setting environment variables like CC, AR, AS, ... is required |
74 |
| - pkgs.lib.optionalString pkgs.stdenv.isDarwin '' |
75 |
| - export CC=gcc |
76 |
| - export CXX=g++ |
77 |
| - for cmd in \ |
78 |
| - ar as ld nm objcopy objdump readelf ranlib strip strings size windres |
79 |
| - do |
80 |
| - export ''${cmd^^}=$cmd |
81 |
| - done |
82 |
| - ''; |
83 |
| - }); |
84 |
| - |
85 |
| - # NOTE: idiomatic nix way of properly setting the $CC in a nix shell |
86 |
| - mkShellWithCC = cc: pkgs.mkShellNoCC.override { stdenv = pkgs.overrideCC pkgs.stdenv cc; }; |
87 |
| - mkShell = mkShellWithCC native-gcc; |
| 22 | + util = pkgs.callPackage ./nix/util.nix { bitwuzla = inputs.nixpkgs-unstable.legacyPackages.${system}.bitwuzla; }; |
88 | 23 | in
|
89 | 24 | {
|
90 |
| - # NOTE: hack for replacing bitwuzla in nixos-24.05 (0.4.0) to the one in nixos-unstable (0.6.0) by nix overlays |
91 |
| - _module.args.pkgs = import inputs.nixpkgs { |
92 |
| - inherit system; |
93 |
| - overlays = [ |
94 |
| - (_: _: { bitwuzla = inputs'.nixpkgs-unstable.legacyPackages.bitwuzla; }) |
95 |
| - ]; |
96 |
| - }; |
97 |
| - |
98 |
| - packages.linters = pkgs.buildEnv |
99 |
| - { |
100 |
| - name = "pqcp-linters"; |
101 |
| - paths = builtins.attrValues { |
102 |
| - clang-tools = pkgs.clang-tools.overrideAttrs { |
103 |
| - unwrapped = pkgs.llvmPackages_17.clang-unwrapped; |
104 |
| - }; |
| 25 | + packages.cbmc = util.cbmc; |
105 | 26 |
|
106 |
| - inherit (pkgs) |
107 |
| - nixpkgs-fmt |
108 |
| - shfmt; |
109 |
| - |
110 |
| - inherit (pkgs.python3Packages) |
111 |
| - black; |
112 |
| - }; |
113 |
| - }; |
114 |
| - |
115 |
| - packages.cbmc = pkgs.callPackage ./nix/cbmc { }; # 6.4.1 |
116 |
| - |
117 |
| - packages.base = pkgs.buildEnv { |
118 |
| - name = "pqcp-base"; |
119 |
| - paths = builtins.attrValues { |
120 |
| - inherit (pkgs.python3Packages) |
121 |
| - pyyaml |
122 |
| - python |
123 |
| - click; |
124 |
| - }; |
125 |
| - }; |
126 |
| - |
127 |
| - devShells.default = wrapShell mkShell { |
| 27 | + devShells.default = util.wrapShell util.mkShell { |
128 | 28 | packages =
|
129 |
| - core { } ++ |
| 29 | + util.core { } ++ |
| 30 | + util.linters ++ |
130 | 31 | builtins.attrValues
|
131 | 32 | {
|
132 |
| - inherit (config.packages) linters cbmc; |
| 33 | + inherit (config.packages) cbmc; |
133 | 34 | inherit (pkgs)
|
134 | 35 | direnv
|
135 | 36 | nix-direnv;
|
136 | 37 | };
|
137 | 38 | };
|
138 | 39 |
|
139 |
| - devShells.ci = wrapShell mkShell { packages = core { cross = false; }; }; |
140 |
| - devShells.ci-cross = wrapShell mkShell { packages = core { }; }; |
141 |
| - devShells.ci-cbmc = wrapShell mkShell { packages = core { cross = false; } ++ [ config.packages.cbmc ]; }; |
142 |
| - devShells.ci-cbmc-cross = wrapShell mkShell { packages = core { } ++ [ config.packages.cbmc ]; }; |
143 |
| - devShells.ci-linter = wrapShell pkgs.mkShellNoCC { packages = [ config.packages.linters ]; }; |
144 |
| - |
145 |
| - devShells.ci_clang18 = wrapShell (mkShellWithCC pkgs.clang_18) { packages = [ config.packages.base ]; }; |
146 |
| - devShells.ci_gcc48 = wrapShell (mkShellWithCC pkgs.gcc48) { packages = [ config.packages.base ]; }; |
147 |
| - devShells.ci_gcc49 = wrapShell (mkShellWithCC pkgs.gcc49) { packages = [ config.packages.base ]; }; |
148 |
| - devShells.ci_gcc7 = wrapShell (mkShellWithCC pkgs.gcc7) { packages = [ config.packages.base ]; }; |
149 |
| - devShells.ci_gcc11 = wrapShell (mkShellWithCC pkgs.gcc11) { packages = [ config.packages.base ]; }; |
150 |
| - devShells.ci_gcc14 = wrapShell (mkShellWithCC pkgs.gcc14) { packages = [ config.packages.base ]; }; |
| 40 | + devShells.ci = util.wrapShell util.mkShell { packages = util.core { cross = false; }; }; |
| 41 | + devShells.ci-cross = util.wrapShell util.mkShell { packages = util.core { }; }; |
| 42 | + devShells.ci-cbmc = util.wrapShell util.mkShell { packages = util.core { cross = false; } ++ [ config.packages.cbmc ]; }; |
| 43 | + devShells.ci-cbmc-cross = util.wrapShell util.mkShell { packages = util.core { } ++ [ config.packages.cbmc ]; }; |
| 44 | + devShells.ci-linter = util.wrapShell pkgs.mkShellNoCC { packages = util.linters; }; |
| 45 | + |
| 46 | + devShells.ci_clang18 = util.wrapShell (util.mkShellWithCC pkgs.clang_18) { packages = [ pkgs.python3 ]; }; |
| 47 | + devShells.ci_gcc48 = util.wrapShell (util.mkShellWithCC pkgs.gcc48) { packages = [ pkgs.python3 ]; }; |
| 48 | + devShells.ci_gcc49 = util.wrapShell (util.mkShellWithCC pkgs.gcc49) { packages = [ pkgs.python3 ]; }; |
| 49 | + devShells.ci_gcc7 = util.wrapShell (util.mkShellWithCC pkgs.gcc7) { packages = [ pkgs.python3 ]; }; |
| 50 | + devShells.ci_gcc11 = util.wrapShell (util.mkShellWithCC pkgs.gcc11) { packages = [ pkgs.python3 ]; }; |
| 51 | + devShells.ci_gcc14 = util.wrapShell (util.mkShellWithCC pkgs.gcc14) { packages = [ pkgs.python3 ]; }; |
151 | 52 | };
|
152 | 53 | flake = {
|
| 54 | + devShell.x86_64-linux = |
| 55 | + let |
| 56 | + pkgs = inputs.nixpkgs.legacyPackages.x86_64-linux; |
| 57 | + pkgs-unstable = inputs.nixpkgs-unstable.legacyPackages.x86_64-linux; |
| 58 | + util = pkgs.callPackage ./nix/util.nix { |
| 59 | + inherit pkgs; |
| 60 | + bitwuzla = pkgs-unstable.bitwuzla; |
| 61 | + }; |
| 62 | + in |
| 63 | + util.wrapShell util.mkShell { |
| 64 | + packages = |
| 65 | + util.core { } ++ |
| 66 | + util.linters ++ |
| 67 | + [ |
| 68 | + util.cbmc |
| 69 | + ]; |
| 70 | + }; |
153 | 71 | # The usual flake attributes can be defined here, including system-
|
154 | 72 | # agnostic ones like nixosModule and system-enumerating ones, although
|
155 | 73 | # those are more easily expressed in perSystem.
|
|
0 commit comments