about summary refs log tree commit diff
path: root/nixpkgs/lib
diff options
context:
space:
mode:
authorvolth <volth@volth.com>2020-08-05 02:32:41 +0000
committerAlyssa Ross <hi@alyssa.is>2020-11-27 13:28:22 +0000
commitbc030c028322c3797c351832ff2e41348351a223 (patch)
tree1338ec7ecc4c5d9941b419b1b83fe164e261f1b9 /nixpkgs/lib
parent56a4b2b477a63be9bb1fd016dc9ccfc2bbebf600 (diff)
downloadnixlib-bc030c028322c3797c351832ff2e41348351a223.tar
nixlib-bc030c028322c3797c351832ff2e41348351a223.tar.gz
nixlib-bc030c028322c3797c351832ff2e41348351a223.tar.bz2
nixlib-bc030c028322c3797c351832ff2e41348351a223.tar.lz
nixlib-bc030c028322c3797c351832ff2e41348351a223.tar.xz
nixlib-bc030c028322c3797c351832ff2e41348351a223.tar.zst
nixlib-bc030c028322c3797c351832ff2e41348351a223.zip
gcc.arch: refactor, move tables under lib/
(cherry picked from commit cf7b63df5b9efdef4e8e1b3261d7040199f7e671)
Diffstat (limited to 'nixpkgs/lib')
-rw-r--r--nixpkgs/lib/systems/architectures.nix75
-rw-r--r--nixpkgs/lib/systems/default.nix2
2 files changed, 77 insertions, 0 deletions
diff --git a/nixpkgs/lib/systems/architectures.nix b/nixpkgs/lib/systems/architectures.nix
new file mode 100644
index 000000000000..287f5be03c45
--- /dev/null
+++ b/nixpkgs/lib/systems/architectures.nix
@@ -0,0 +1,75 @@
+{ lib }:
+
+rec {
+  # platform.gcc.arch to its features (as in /proc/cpuinfo)
+  features = {
+    default        = [ ];
+    # x86_64 Intel
+    westmere       = [ "sse3" "ssse3" "sse4_1" "sse4_2"         "aes"                                    ];
+    sandybridge    = [ "sse3" "ssse3" "sse4_1" "sse4_2"         "aes" "avx"                              ];
+    ivybridge      = [ "sse3" "ssse3" "sse4_1" "sse4_2"         "aes" "avx"                              ];
+    haswell        = [ "sse3" "ssse3" "sse4_1" "sse4_2"         "aes" "avx" "avx2"          "fma"        ];
+    broadwell      = [ "sse3" "ssse3" "sse4_1" "sse4_2"         "aes" "avx" "avx2"          "fma"        ];
+    skylake        = [ "sse3" "ssse3" "sse4_1" "sse4_2"         "aes" "avx" "avx2"          "fma"        ];
+    skylake-avx512 = [ "sse3" "ssse3" "sse4_1" "sse4_2"         "aes" "avx" "avx2" "avx512" "fma"        ];
+    # x86_64 AMD
+    btver1         = [ "sse3" "ssse3" "sse4_1" "sse4_2"                                                  ];
+    btver2         = [ "sse3" "ssse3" "sse4_1" "sse4_2"         "aes" "avx"                              ];
+    bdver1         = [ "sse3" "ssse3" "sse4_1" "sse4_2" "sse4a" "aes" "avx"                 "fma" "fma4" ];
+    bdver2         = [ "sse3" "ssse3" "sse4_1" "sse4_2" "sse4a" "aes" "avx"                 "fma" "fma4" ];
+    bdver3         = [ "sse3" "ssse3" "sse4_1" "sse4_2" "sse4a" "aes" "avx"                 "fma" "fma4" ];
+    bdver4         = [ "sse3" "ssse3" "sse4_1" "sse4_2" "sse4a" "aes" "avx" "avx2"          "fma" "fma4" ];
+    znver1         = [ "sse3" "ssse3" "sse4_1" "sse4_2" "sse4a" "aes" "avx" "avx2"          "fma"        ];
+    znver2         = [ "sse3" "ssse3" "sse4_1" "sse4_2" "sse4a" "aes" "avx" "avx2"          "fma"        ];
+    # other
+    armv5te        = [ ];
+    armv6          = [ ];
+    armv7-a        = [ ];
+    armv8-a        = [ ];
+    mips32         = [ ];
+    loongson2f     = [ ];
+  };
+
+  # a superior CPU has all the features of an inferior and is able to build and test code for it
+  inferiors = {
+    # x86_64 Intel
+    default        = [ ];
+    westmere       = [ ];
+    sandybridge    = [ "westmere" ];
+    ivybridge      = [ "westmere" "sandybridge" ];
+    haswell        = [ "westmere" "sandybridge" "ivybridge" ];
+    broadwell      = [ "westmere" "sandybridge" "ivybridge" "haswell" ];
+    skylake        = [ "westmere" "sandybridge" "ivybridge" "haswell" "broadwell" ];
+    skylake-avx512 = [ "westmere" "sandybridge" "ivybridge" "haswell" "broadwell" "skylake" ];
+    # x86_64 AMD
+    btver1         = [ ];
+    btver2         = [ ];
+    bdver1         = [ ];
+    bdver2         = [ ];
+    bdver3         = [ ];
+    bdver4         = [ ];
+    znver1         = [ ];
+    znver2         = [ ];
+    # other
+    armv5te        = [ ];
+    armv6          = [ ];
+    armv7-a        = [ ];
+    armv8-a        = [ ];
+    mips32         = [ ];
+    loongson2f     = [ ];
+  };
+
+  predicates = {
+    sse3Support    = x: builtins.elem "sse3"   features.${x};
+    ssse3Support   = x: builtins.elem "ssse3"  features.${x};
+    sse4_1Support  = x: builtins.elem "sse4_1" features.${x};
+    sse4_2Support  = x: builtins.elem "sse4_2" features.${x};
+    sse4_aSupport  = x: builtins.elem "sse4a"  features.${x};
+    avxSupport     = x: builtins.elem "avx"    features.${x};
+    avx2Support    = x: builtins.elem "avx2"   features.${x};
+    avx512Support  = x: builtins.elem "avx512" features.${x};
+    aesSupport     = x: builtins.elem "aes"    features.${x};
+    fmaSupport     = x: builtins.elem "fma"    features.${x};
+    fma4Support    = x: builtins.elem "fma4"   features.${x};
+  };
+}
diff --git a/nixpkgs/lib/systems/default.nix b/nixpkgs/lib/systems/default.nix
index c929781dd8ff..02d58592b325 100644
--- a/nixpkgs/lib/systems/default.nix
+++ b/nixpkgs/lib/systems/default.nix
@@ -7,6 +7,7 @@ rec {
   inspect = import ./inspect.nix { inherit lib; };
   platforms = import ./platforms.nix { inherit lib; };
   examples = import ./examples.nix { inherit lib; };
+  architectures = import ./architectures.nix { inherit lib; };
 
   # Elaborate a `localSystem` or `crossSystem` so that it contains everything
   # necessary.
@@ -125,6 +126,7 @@ rec {
         else throw "Don't know how to run ${final.config} executables.";
 
     } // mapAttrs (n: v: v final.parsed) inspect.predicates
+      // mapAttrs (n: v: v final.platform.gcc.arch or "default") architectures.predicates
       // args;
   in assert final.useAndroidPrebuilt -> final.isAndroid;
      assert lib.foldl