1{ lib }:
2let
3 inherit (lib) lists;
4 inherit (lib.systems) parse;
5 inherit (lib.systems.inspect) predicates;
6 inherit (lib.attrsets) matchAttrs;
7
8 all = [
9 # Cygwin
10 "i686-cygwin"
11 "x86_64-cygwin"
12
13 # Darwin
14 "x86_64-darwin"
15 "aarch64-darwin"
16
17 # FreeBSD
18 "i686-freebsd"
19 "x86_64-freebsd"
20 "aarch64-freebsd"
21
22 # Genode
23 "aarch64-genode"
24 "i686-genode"
25 "x86_64-genode"
26
27 # illumos
28 "x86_64-solaris"
29
30 # JS
31 "javascript-ghcjs"
32
33 # Linux
34 "aarch64-linux"
35 "armv5tel-linux"
36 "armv6l-linux"
37 "armv7a-linux"
38 "armv7l-linux"
39 "i686-linux"
40 "loongarch64-linux"
41 "m68k-linux"
42 "microblaze-linux"
43 "microblazeel-linux"
44 "mips-linux"
45 "mips64-linux"
46 "mips64el-linux"
47 "mipsel-linux"
48 "powerpc-linux"
49 "powerpc64-linux"
50 "powerpc64le-linux"
51 "riscv32-linux"
52 "riscv64-linux"
53 "s390-linux"
54 "s390x-linux"
55 "x86_64-linux"
56
57 # MMIXware
58 "mmix-mmixware"
59
60 # NetBSD
61 "aarch64-netbsd"
62 "armv6l-netbsd"
63 "armv7a-netbsd"
64 "armv7l-netbsd"
65 "i686-netbsd"
66 "m68k-netbsd"
67 "mipsel-netbsd"
68 "powerpc-netbsd"
69 "riscv32-netbsd"
70 "riscv64-netbsd"
71 "x86_64-netbsd"
72
73 # none
74 "aarch64_be-none"
75 "aarch64-none"
76 "arm-none"
77 "armv6l-none"
78 "avr-none"
79 "i686-none"
80 "microblaze-none"
81 "microblazeel-none"
82 "mips-none"
83 "mips64-none"
84 "msp430-none"
85 "or1k-none"
86 "m68k-none"
87 "powerpc-none"
88 "powerpcle-none"
89 "riscv32-none"
90 "riscv64-none"
91 "rx-none"
92 "s390-none"
93 "s390x-none"
94 "vc4-none"
95 "x86_64-none"
96
97 # OpenBSD
98 "i686-openbsd"
99 "x86_64-openbsd"
100
101 # Redox
102 "x86_64-redox"
103
104 # WASI
105 "wasm64-wasi"
106 "wasm32-wasi"
107
108 # Windows
109 "aarch64-windows"
110 "x86_64-windows"
111 "i686-windows"
112 ];
113
114 allParsed = map parse.mkSystemFromString all;
115
116 filterDoubles = f: map parse.doubleFromSystem (lists.filter f allParsed);
117
118in
119{
120 inherit all;
121
122 none = [ ];
123
124 arm = filterDoubles predicates.isAarch32;
125 armv7 = filterDoubles predicates.isArmv7;
126 aarch = filterDoubles predicates.isAarch;
127 aarch64 = filterDoubles predicates.isAarch64;
128 x86 = filterDoubles predicates.isx86;
129 i686 = filterDoubles predicates.isi686;
130 x86_64 = filterDoubles predicates.isx86_64;
131 microblaze = filterDoubles predicates.isMicroBlaze;
132 mips = filterDoubles predicates.isMips;
133 mmix = filterDoubles predicates.isMmix;
134 power = filterDoubles predicates.isPower;
135 riscv = filterDoubles predicates.isRiscV;
136 riscv32 = filterDoubles predicates.isRiscV32;
137 riscv64 = filterDoubles predicates.isRiscV64;
138 rx = filterDoubles predicates.isRx;
139 vc4 = filterDoubles predicates.isVc4;
140 or1k = filterDoubles predicates.isOr1k;
141 m68k = filterDoubles predicates.isM68k;
142 s390 = filterDoubles predicates.isS390;
143 s390x = filterDoubles predicates.isS390x;
144 loongarch64 = filterDoubles predicates.isLoongArch64;
145 js = filterDoubles predicates.isJavaScript;
146
147 bigEndian = filterDoubles predicates.isBigEndian;
148 littleEndian = filterDoubles predicates.isLittleEndian;
149
150 cygwin = filterDoubles predicates.isCygwin;
151 darwin = filterDoubles predicates.isDarwin;
152 freebsd = filterDoubles predicates.isFreeBSD;
153 # Should be better, but MinGW is unclear.
154 gnu =
155 filterDoubles (matchAttrs {
156 kernel = parse.kernels.linux;
157 abi = parse.abis.gnu;
158 })
159 ++ filterDoubles (matchAttrs {
160 kernel = parse.kernels.linux;
161 abi = parse.abis.gnueabi;
162 })
163 ++ filterDoubles (matchAttrs {
164 kernel = parse.kernels.linux;
165 abi = parse.abis.gnueabihf;
166 })
167 ++ filterDoubles (matchAttrs {
168 kernel = parse.kernels.linux;
169 abi = parse.abis.gnuabin32;
170 })
171 ++ filterDoubles (matchAttrs {
172 kernel = parse.kernels.linux;
173 abi = parse.abis.gnuabi64;
174 })
175 ++ filterDoubles (matchAttrs {
176 kernel = parse.kernels.linux;
177 abi = parse.abis.gnuabielfv1;
178 })
179 ++ filterDoubles (matchAttrs {
180 kernel = parse.kernels.linux;
181 abi = parse.abis.gnuabielfv2;
182 });
183 illumos = filterDoubles predicates.isSunOS;
184 linux = filterDoubles predicates.isLinux;
185 netbsd = filterDoubles predicates.isNetBSD;
186 openbsd = filterDoubles predicates.isOpenBSD;
187 unix = filterDoubles predicates.isUnix;
188 wasi = filterDoubles predicates.isWasi;
189 redox = filterDoubles predicates.isRedox;
190 windows = filterDoubles predicates.isWindows;
191 genode = filterDoubles predicates.isGenode;
192
193 embedded = filterDoubles predicates.isNone;
194}