1{ lib }:
2with import ./parse.nix { inherit lib; };
3with lib.attrsets;
4with lib.lists;
5
6let abis_ = abis; in
7let abis = lib.mapAttrs (_: abi: builtins.removeAttrs abi [ "assertions" ]) abis_; in
8
9rec {
10 patterns = rec {
11 isi686 = { cpu = cpuTypes.i686; };
12 isx86_32 = { cpu = { family = "x86"; bits = 32; }; };
13 isx86_64 = { cpu = { family = "x86"; bits = 64; }; };
14 isPowerPC = { cpu = cpuTypes.powerpc; };
15 isPower = { cpu = { family = "power"; }; };
16 isx86 = { cpu = { family = "x86"; }; };
17 isAarch32 = { cpu = { family = "arm"; bits = 32; }; };
18 isAarch64 = { cpu = { family = "arm"; bits = 64; }; };
19 isMips = { cpu = { family = "mips"; }; };
20 isMmix = { cpu = { family = "mmix"; }; };
21 isRiscV = { cpu = { family = "riscv"; }; };
22 isSparc = { cpu = { family = "sparc"; }; };
23 isWasm = { cpu = { family = "wasm"; }; };
24 isMsp430 = { cpu = { family = "msp430"; }; };
25 isVc4 = { cpu = { family = "vc4"; }; };
26 isAvr = { cpu = { family = "avr"; }; };
27 isAlpha = { cpu = { family = "alpha"; }; };
28 isOr1k = { cpu = { family = "or1k"; }; };
29 isM68k = { cpu = { family = "m68k"; }; };
30 isS390 = { cpu = { family = "s390"; }; };
31 isJavaScript = { cpu = cpuTypes.js; };
32
33 is32bit = { cpu = { bits = 32; }; };
34 is64bit = { cpu = { bits = 64; }; };
35 isBigEndian = { cpu = { significantByte = significantBytes.bigEndian; }; };
36 isLittleEndian = { cpu = { significantByte = significantBytes.littleEndian; }; };
37
38 isBSD = { kernel = { families = { inherit (kernelFamilies) bsd; }; }; };
39 isDarwin = { kernel = { families = { inherit (kernelFamilies) darwin; }; }; };
40 isUnix = [ isBSD isDarwin isLinux isSunOS isCygwin isRedox ];
41
42 isMacOS = { kernel = kernels.macos; };
43 isiOS = { kernel = kernels.ios; };
44 isLinux = { kernel = kernels.linux; };
45 isSunOS = { kernel = kernels.solaris; };
46 isFreeBSD = { kernel = kernels.freebsd; };
47 isNetBSD = { kernel = kernels.netbsd; };
48 isOpenBSD = { kernel = kernels.openbsd; };
49 isWindows = { kernel = kernels.windows; };
50 isCygwin = { kernel = kernels.windows; abi = abis.cygnus; };
51 isMinGW = { kernel = kernels.windows; abi = abis.gnu; };
52 isWasi = { kernel = kernels.wasi; };
53 isRedox = { kernel = kernels.redox; };
54 isGhcjs = { kernel = kernels.ghcjs; };
55 isGenode = { kernel = kernels.genode; };
56 isNone = { kernel = kernels.none; };
57
58 isAndroid = [ { abi = abis.android; } { abi = abis.androideabi; } ];
59 isGnu = with abis; map (a: { abi = a; }) [ gnuabi64 gnu gnueabi gnueabihf ];
60 isMusl = with abis; map (a: { abi = a; }) [ musl musleabi musleabihf ];
61 isUClibc = with abis; map (a: { abi = a; }) [ uclibc uclibceabi uclibceabihf ];
62
63 isEfi = map (family: { cpu.family = family; })
64 [ "x86" "arm" "aarch64" ];
65 };
66
67 matchAnyAttrs = patterns:
68 if builtins.isList patterns then attrs: any (pattern: matchAttrs pattern attrs) patterns
69 else matchAttrs patterns;
70
71 predicates = mapAttrs (_: matchAnyAttrs) patterns;
72}