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