From cf7b63df5b9efdef4e8e1b3261d7040199f7e671 Mon Sep 17 00:00:00 2001 From: volth Date: Wed, 5 Aug 2020 02:32:41 +0000 Subject: gcc.arch: refactor, move tables under lib/ --- lib/systems/architectures.nix | 75 +++++++++++++++++++++++++++++++++++++++++++ lib/systems/default.nix | 2 ++ 2 files changed, 77 insertions(+) create mode 100644 lib/systems/architectures.nix (limited to 'lib/systems') diff --git a/lib/systems/architectures.nix b/lib/systems/architectures.nix new file mode 100644 index 0000000000000..287f5be03c453 --- /dev/null +++ b/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/lib/systems/default.nix b/lib/systems/default.nix index c929781dd8ff9..02d58592b325a 100644 --- a/lib/systems/default.nix +++ b/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 -- cgit 1.4.1 From 55bc2b54a481f08bd9f7189561f9cf2f65f810c7 Mon Sep 17 00:00:00 2001 From: volth Date: Sat, 22 Aug 2020 22:55:13 +0000 Subject: Update architectures.nix --- lib/systems/architectures.nix | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'lib/systems') diff --git a/lib/systems/architectures.nix b/lib/systems/architectures.nix index 287f5be03c453..ce7ac0356bdc0 100644 --- a/lib/systems/architectures.nix +++ b/lib/systems/architectures.nix @@ -35,12 +35,12 @@ rec { # 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" ]; + sandybridge = [ "westmere" ] ++ inferiors.westmere; + ivybridge = [ "sandybridge" ] ++ inferiors.sandybridge; + haswell = [ "ivybridge" ] ++ inferiors.ivybridge; + broadwell = [ "haswell" ] ++ inferiors.haswell; + skylake = [ "broadwell" ] ++ inferiors.broadwell; + skylake-avx512 = [ "skylake" ] ++ inferiors.skylake; # x86_64 AMD btver1 = [ ]; btver2 = [ ]; -- cgit 1.4.1 From 8ad48c921e6bc5b1a0a273764ef3337747b34503 Mon Sep 17 00:00:00 2001 From: volth Date: Sat, 22 Aug 2020 23:01:38 +0000 Subject: Update architectures.nix --- lib/systems/architectures.nix | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'lib/systems') diff --git a/lib/systems/architectures.nix b/lib/systems/architectures.nix index ce7ac0356bdc0..c9ca27a0651d4 100644 --- a/lib/systems/architectures.nix +++ b/lib/systems/architectures.nix @@ -43,13 +43,13 @@ rec { skylake-avx512 = [ "skylake" ] ++ inferiors.skylake; # x86_64 AMD btver1 = [ ]; - btver2 = [ ]; - bdver1 = [ ]; - bdver2 = [ ]; - bdver3 = [ ]; - bdver4 = [ ]; - znver1 = [ ]; - znver2 = [ ]; + btver2 = [ ]; # TODO: fill this (need testing) + bdver1 = [ ]; # TODO: fill this (need testing) + bdver2 = [ ]; # TODO: fill this (need testing) + bdver3 = [ ]; # TODO: fill this (need testing) + bdver4 = [ ]; # TODO: fill this (need testing) + znver1 = [ ]; # TODO: fill this (need testing) + znver2 = [ ]; # TODO: fill this (need testing) # other armv5te = [ ]; armv6 = [ ]; -- cgit 1.4.1 From 60ce27db2b405c0de1b870b2d04056e71d704133 Mon Sep 17 00:00:00 2001 From: volth Date: Sat, 22 Aug 2020 23:04:08 +0000 Subject: Update architectures.nix --- lib/systems/architectures.nix | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) (limited to 'lib/systems') diff --git a/lib/systems/architectures.nix b/lib/systems/architectures.nix index c9ca27a0651d4..acb6e417386ba 100644 --- a/lib/systems/architectures.nix +++ b/lib/systems/architectures.nix @@ -59,17 +59,18 @@ rec { 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}; + predicates = rec { + featureSupport = feature: x: builtins.elem feature features.${x}; + sse3Support = featureSupport "sse3"; + ssse3Support = featureSupport "ssse3"; + sse4_1Support = featureSupport "sse4_1"; + sse4_2Support = featureSupport "sse4_2"; + sse4_aSupport = featureSupport "sse4a"; + avxSupport = featureSupport "avx"; + avx2Support = featureSupport "avx2"; + avx512Support = featureSupport "avx512"; + aesSupport = featureSupport "aes"; + fmaSupport = featureSupport "fma"; + fma4Support = featureSupport "fma4"; }; } -- cgit 1.4.1 From c5fe132b3c5da5044c01a9bd4aa4ab45795cb9e6 Mon Sep 17 00:00:00 2001 From: volth Date: Tue, 1 Sep 2020 11:28:34 +0000 Subject: Update architectures.nix --- lib/systems/architectures.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'lib/systems') diff --git a/lib/systems/architectures.nix b/lib/systems/architectures.nix index acb6e417386ba..9d1c29fd9f0bd 100644 --- a/lib/systems/architectures.nix +++ b/lib/systems/architectures.nix @@ -59,8 +59,9 @@ rec { loongson2f = [ ]; }; - predicates = rec { + predicates = let featureSupport = feature: x: builtins.elem feature features.${x}; + in { sse3Support = featureSupport "sse3"; ssse3Support = featureSupport "ssse3"; sse4_1Support = featureSupport "sse4_1"; -- cgit 1.4.1