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_64 = { cpu = cpuTypes.x86_64; };
13 isPowerPC = { cpu = cpuTypes.powerpc; };
14 isPower = { cpu = { family = "power"; }; };
15 isx86 = { cpu = { family = "x86"; }; };
16 isAarch32 = { cpu = { family = "arm"; bits = 32; }; };
17 isAarch64 = { cpu = { family = "arm"; bits = 64; }; };
18 isMips = { cpu = { family = "mips"; }; };
19 isRiscV = { cpu = { family = "riscv"; }; };
20 isSparc = { cpu = { family = "sparc"; }; };
21 isWasm = { cpu = { family = "wasm"; }; };
22
23 is32bit = { cpu = { bits = 32; }; };
24 is64bit = { cpu = { bits = 64; }; };
25 isBigEndian = { cpu = { significantByte = significantBytes.bigEndian; }; };
26 isLittleEndian = { cpu = { significantByte = significantBytes.littleEndian; }; };
27
28 isBSD = { kernel = { families = { inherit (kernelFamilies) bsd; }; }; };
29 isDarwin = { kernel = { families = { inherit (kernelFamilies) darwin; }; }; };
30 isUnix = [ isBSD isDarwin isLinux isSunOS isCygwin ];
31
32 isMacOS = { kernel = kernels.macos; };
33 isiOS = { kernel = kernels.ios; };
34 isLinux = { kernel = kernels.linux; };
35 isSunOS = { kernel = kernels.solaris; };
36 isFreeBSD = { kernel = kernels.freebsd; };
37 isNetBSD = { kernel = kernels.netbsd; };
38 isOpenBSD = { kernel = kernels.openbsd; };
39 isWindows = { kernel = kernels.windows; };
40 isCygwin = { kernel = kernels.windows; abi = abis.cygnus; };
41 isMinGW = { kernel = kernels.windows; abi = abis.gnu; };
42
43 isAndroid = [ { abi = abis.android; } { abi = abis.androideabi; } ];
44 isMusl = with abis; map (a: { abi = a; }) [ musl musleabi musleabihf ];
45 isUClibc = with abis; map (a: { abi = a; }) [ uclibc uclibceabi uclibceabihf ];
46
47 isEfi = map (family: { cpu.family = family; })
48 [ "x86" "arm" "aarch64" ];
49
50 # Deprecated after 18.03
51 isArm = isAarch32;
52 };
53
54 matchAnyAttrs = patterns:
55 if builtins.isList patterns then attrs: any (pattern: matchAttrs pattern attrs) patterns
56 else matchAttrs patterns;
57
58 predicates = mapAttrs (_: matchAnyAttrs) patterns;
59}