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" "x86_64-cygwin"
11
12 # Darwin
13 "x86_64-darwin" "i686-darwin" "aarch64-darwin" "armv7a-darwin"
14
15 # FreeBSD
16 "i686-freebsd" "x86_64-freebsd"
17
18 # Genode
19 "aarch64-genode" "i686-genode" "x86_64-genode"
20
21 # illumos
22 "x86_64-solaris"
23
24 # JS
25 "js-ghcjs"
26
27 # Linux
28 "aarch64-linux" "armv5tel-linux" "armv6l-linux" "armv7a-linux"
29 "armv7l-linux" "i686-linux" "m68k-linux" "mipsel-linux"
30 "powerpc64-linux" "powerpc64le-linux" "riscv32-linux"
31 "riscv64-linux" "s390-linux" "s390x-linux" "x86_64-linux"
32
33 # MMIXware
34 "mmix-mmixware"
35
36 # NetBSD
37 "aarch64-netbsd" "armv6l-netbsd" "armv7a-netbsd" "armv7l-netbsd"
38 "i686-netbsd" "m68k-netbsd" "mipsel-netbsd" "powerpc-netbsd"
39 "riscv32-netbsd" "riscv64-netbsd" "x86_64-netbsd"
40
41 # none
42 "aarch64-none" "arm-none" "armv6l-none" "avr-none" "i686-none"
43 "msp430-none" "or1k-none" "m68k-none" "powerpc-none"
44 "riscv32-none" "riscv64-none" "s390-none" "s390x-none" "vc4-none"
45 "x86_64-none"
46
47 # OpenBSD
48 "i686-openbsd" "x86_64-openbsd"
49
50 # Redox
51 "x86_64-redox"
52
53 # WASI
54 "wasm64-wasi" "wasm32-wasi"
55
56 # Windows
57 "x86_64-windows" "i686-windows"
58 ];
59
60 allParsed = map parse.mkSystemFromString all;
61
62 filterDoubles = f: map parse.doubleFromSystem (lists.filter f allParsed);
63
64in {
65 inherit all;
66
67 none = [];
68
69 arm = filterDoubles predicates.isAarch32;
70 aarch64 = filterDoubles predicates.isAarch64;
71 x86 = filterDoubles predicates.isx86;
72 i686 = filterDoubles predicates.isi686;
73 x86_64 = filterDoubles predicates.isx86_64;
74 mips = filterDoubles predicates.isMips;
75 mmix = filterDoubles predicates.isMmix;
76 riscv = filterDoubles predicates.isRiscV;
77 vc4 = filterDoubles predicates.isVc4;
78 or1k = filterDoubles predicates.isOr1k;
79 m68k = filterDoubles predicates.isM68k;
80 s390 = filterDoubles predicates.isS390;
81 js = filterDoubles predicates.isJavaScript;
82
83 bigEndian = filterDoubles predicates.isBigEndian;
84 littleEndian = filterDoubles predicates.isLittleEndian;
85
86 cygwin = filterDoubles predicates.isCygwin;
87 darwin = filterDoubles predicates.isDarwin;
88 freebsd = filterDoubles predicates.isFreeBSD;
89 # Should be better, but MinGW is unclear.
90 gnu = filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnu; }) ++ filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnueabi; }) ++ filterDoubles (matchAttrs { kernel = parse.kernels.linux; abi = parse.abis.gnueabihf; });
91 illumos = filterDoubles predicates.isSunOS;
92 linux = filterDoubles predicates.isLinux;
93 netbsd = filterDoubles predicates.isNetBSD;
94 openbsd = filterDoubles predicates.isOpenBSD;
95 unix = filterDoubles predicates.isUnix;
96 wasi = filterDoubles predicates.isWasi;
97 redox = filterDoubles predicates.isRedox;
98 windows = filterDoubles predicates.isWindows;
99 genode = filterDoubles predicates.isGenode;
100
101 embedded = filterDoubles predicates.isNone;
102
103 mesaPlatforms = ["i686-linux" "x86_64-linux" "x86_64-darwin" "armv5tel-linux" "armv6l-linux" "armv7l-linux" "armv7a-linux" "aarch64-linux" "powerpc64-linux" "powerpc64le-linux" "aarch64-darwin" "riscv64-linux"];
104}