1with import ./parse.nix;
2with import ../attrsets.nix;
3with import ../lists.nix;
4
5rec {
6 patterns = rec {
7 "32bit" = { cpu = { bits = 32; }; };
8 "64bit" = { cpu = { bits = 64; }; };
9 i686 = { cpu = cpuTypes.i686; };
10 x86_64 = { cpu = cpuTypes.x86_64; };
11 PowerPC = { cpu = cpuTypes.powerpc; };
12 x86 = { cpu = { family = "x86"; }; };
13 Arm = { cpu = { family = "arm"; }; };
14 Aarch64 = { cpu = { family = "aarch64"; }; };
15 Mips = { cpu = { family = "mips"; }; };
16 BigEndian = { cpu = { significantByte = significantBytes.bigEndian; }; };
17 LittleEndian = { cpu = { significantByte = significantBytes.littleEndian; }; };
18
19 BSD = { kernel = { families = { inherit (kernelFamilies) bsd; }; }; };
20 Unix = [ BSD Darwin Linux SunOS Hurd Cygwin ];
21
22 Darwin = { kernel = kernels.darwin; };
23 Linux = { kernel = kernels.linux; };
24 SunOS = { kernel = kernels.solaris; };
25 FreeBSD = { kernel = kernels.freebsd; };
26 Hurd = { kernel = kernels.hurd; };
27 NetBSD = { kernel = kernels.netbsd; };
28 OpenBSD = { kernel = kernels.openbsd; };
29 Windows = { kernel = kernels.windows; };
30 Cygwin = { kernel = kernels.windows; abi = abis.cygnus; };
31 MinGW = { kernel = kernels.windows; abi = abis.gnu; };
32 };
33
34 matchAnyAttrs = patterns:
35 if builtins.isList patterns then attrs: any (pattern: matchAttrs pattern attrs) patterns
36 else matchAttrs patterns;
37
38 predicates = mapAttrs'
39 (name: value: nameValuePair ("is" + name) (matchAnyAttrs value))
40 patterns;
41}