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