From 463db72e631e0bd4a835796324eb1981071c6ee4 Mon Sep 17 00:00:00 2001 From: volth Date: Sun, 5 May 2019 23:40:20 +0000 Subject: [PATCH] platform.gcc.arch: support for AMD CPUs --- pkgs/build-support/cc-wrapper/default.nix | 10 ++++++++-- pkgs/development/interpreters/j/default.nix | 2 +- pkgs/development/libraries/dlib/default.nix | 4 ++-- .../libraries/fflas-ffpack/default.nix | 17 +++++++++++++---- pkgs/development/libraries/givaro/default.nix | 9 +++++++++ pkgs/development/libraries/linbox/default.nix | 9 +++++++++ .../libraries/qt-5/modules/qtbase.nix | 9 +++++++++ .../development/python-modules/dlib/default.nix | 4 +++- .../python-modules/tensorflow/1/default.nix | 6 +++--- .../python-modules/tensorflow/2/default.nix | 6 +++--- pkgs/tools/networking/i2pd/default.nix | 4 ++-- 11 files changed, 62 insertions(+), 18 deletions(-) diff --git a/pkgs/build-support/cc-wrapper/default.nix b/pkgs/build-support/cc-wrapper/default.nix index c2a06219f1d..f8e25031c76 100644 --- a/pkgs/build-support/cc-wrapper/default.nix +++ b/pkgs/build-support/cc-wrapper/default.nix @@ -63,18 +63,24 @@ let # older compilers (for example bootstrap's GCC 5) fail with -march=too-modern-cpu isGccArchSupported = arch: if isGNU then - { skylake = versionAtLeast ccVersion "6.0"; + { # Intel + skylake = versionAtLeast ccVersion "6.0"; skylake-avx512 = versionAtLeast ccVersion "6.0"; cannonlake = versionAtLeast ccVersion "8.0"; icelake-client = versionAtLeast ccVersion "8.0"; icelake-server = versionAtLeast ccVersion "8.0"; knm = versionAtLeast ccVersion "8.0"; + # AMD + znver1 = versionAtLeast ccVersion "6.0"; }.${arch} or true else if isClang then - { cannonlake = versionAtLeast ccVersion "5.0"; + { # Intel + cannonlake = versionAtLeast ccVersion "5.0"; icelake-client = versionAtLeast ccVersion "7.0"; icelake-server = versionAtLeast ccVersion "7.0"; knm = versionAtLeast ccVersion "7.0"; + # AMD + znver1 = versionAtLeast ccVersion "4.0"; }.${arch} or true else false; diff --git a/pkgs/development/interpreters/j/default.nix b/pkgs/development/interpreters/j/default.nix index 8e6b434281e..6df0d64bbeb 100644 --- a/pkgs/development/interpreters/j/default.nix +++ b/pkgs/development/interpreters/j/default.nix @@ -1,5 +1,5 @@ { stdenv, fetchFromGitHub, readline, libedit, bc -, avxSupport ? false +, avxSupport ? builtins.elem (stdenv.hostPlatform.platform.gcc.arch or "default") [ "sandybridge" "ivybridge" "haswell" "broadwell" "skylake" "skylake-avx512" "btver2" "bdver1" "bdver2" "bdver3" "bdver4" "znver1"] }: stdenv.mkDerivation rec { diff --git a/pkgs/development/libraries/dlib/default.nix b/pkgs/development/libraries/dlib/default.nix index a7d68d62f2a..359e8a15f02 100644 --- a/pkgs/development/libraries/dlib/default.nix +++ b/pkgs/development/libraries/dlib/default.nix @@ -2,7 +2,7 @@ , guiSupport ? false, libX11 # see http://dlib.net/compile.html -, avxSupport ? true +, avxSupport ? builtins.elem (stdenv.hostPlatform.platform.gcc.arch or "default") [ "sandybridge" "ivybridge" "haswell" "broadwell" "skylake" "skylake-avx512" "btver2" "bdver1" "bdver2" "bdver3" "bdver4" "znver1"] , cudaSupport ? true }: @@ -21,7 +21,7 @@ stdenv.mkDerivation rec { rm -rf dlib/external ''; - cmakeFlags = [ + cmakeFlags = [ "-DUSE_DLIB_USE_CUDA=${if cudaSupport then "1" else "0"}" "-DUSE_AVX_INSTRUCTIONS=${if avxSupport then "yes" else "no"}" ]; diff --git a/pkgs/development/libraries/fflas-ffpack/default.nix b/pkgs/development/libraries/fflas-ffpack/default.nix index bc84039a9aa..226d9c5e744 100644 --- a/pkgs/development/libraries/fflas-ffpack/default.nix +++ b/pkgs/development/libraries/fflas-ffpack/default.nix @@ -35,13 +35,22 @@ stdenv.mkDerivation rec { # disable SIMD instructions (which are enabled *when available* by default) # for now we need to be careful to disable *all* relevant versions of an instruction set explicitly (https://github.com/linbox-team/fflas-ffpack/issues/284) default = [ "--disable-sse3" "--disable-ssse3" "--disable-sse41" "--disable-sse42" "--disable-avx" "--disable-avx2" "--disable-avx512f" "--disable-avx512dq" "--disable-avx512vl" "--disable-fma" "--disable-fma4" ]; + # Intel westmere = [ "--disable-avx" "--disable-avx2" "--disable-avx512f" "--disable-avx512dq" "--disable-avx512vl" "--disable-fma" "--disable-fma4" ]; sandybridge = [ "--disable-avx2" "--disable-avx512f" "--disable-avx512dq" "--disable-avx512vl" "--disable-fma" "--disable-fma4" ]; ivybridge = [ "--disable-avx2" "--disable-avx512f" "--disable-avx512dq" "--disable-avx512vl" "--disable-fma" "--disable-fma4" ]; - haswell = [ "--disable-fma4" ]; - broadwell = [ "--disable-fma4" ]; - skylake = [ "--disable-fma4" ]; - skylake-avx512 = [ "--disable-fma4" ]; + haswell = [ "--disable-fma4" ]; + broadwell = [ "--disable-fma4" ]; + skylake = [ "--disable-fma4" ]; + skylake-avx512 = [ "--disable-fma4" ]; + # AMD + btver1 = [ "--disable-avx" "--disable-avx2" "--disable-avx512f" "--disable-avx512dq" "--disable-avx512vl" "--disable-fma" "--disable-fma4" ]; + btver2 = [ "--disable-avx2" "--disable-fma" "--disable-fma4" ]; + bdver1 = [ "--disable-avx2" "--disable-avx512f" "--disable-avx512dq" "--disable-avx512vl" ]; + bdver2 = [ "--disable-avx2" "--disable-avx512f" "--disable-avx512dq" "--disable-avx512vl" ]; + bdver3 = [ "--disable-avx2" "--disable-avx512f" "--disable-avx512dq" "--disable-avx512vl" ]; + bdver4 = [ ]; + znver1 = [ "--disable-fma4" ]; }.${stdenv.hostPlatform.platform.gcc.arch or "default"}; doCheck = true; diff --git a/pkgs/development/libraries/givaro/default.nix b/pkgs/development/libraries/givaro/default.nix index fdaf518c611..b88d63c3d7e 100644 --- a/pkgs/development/libraries/givaro/default.nix +++ b/pkgs/development/libraries/givaro/default.nix @@ -20,6 +20,7 @@ stdenv.mkDerivation rec { ] ++ stdenv.lib.optionals stdenv.isx86_64 { # disable SIMD instructions (which are enabled *when available* by default) default = [ "--disable-sse3" "--disable-ssse3" "--disable-sse41" "--disable-sse42" "--disable-avx" "--disable-avx2" "--disable-fma" "--disable-fma4" ]; + # Intel westmere = [ "--disable-avx" "--disable-avx2" "--disable-fma" "--disable-fma4" ]; sandybridge = [ "--disable-avx2" "--disable-fma" "--disable-fma4" ]; ivybridge = [ "--disable-avx2" "--disable-fma" "--disable-fma4" ]; @@ -27,6 +28,14 @@ stdenv.mkDerivation rec { broadwell = [ "--disable-fma4" ]; skylake = [ "--disable-fma4" ]; skylake-avx512 = [ "--disable-fma4" ]; + # AMD + btver1 = [ "--disable-avx" "--disable-avx2" "--disable-fma" "--disable-fma4" ]; + btver2 = [ "--disable-avx2" "--disable-fma" "--disable-fma4" ]; + bdver1 = [ "--disable-avx2" ]; + bdver2 = [ "--disable-avx2" ]; + bdver3 = [ "--disable-avx2" ]; + bdver4 = [ ]; + znver1 = [ "--disable-fma4" ]; }.${stdenv.hostPlatform.platform.gcc.arch or "default"}; # On darwin, tests are linked to dylib in the nix store, so we need to make diff --git a/pkgs/development/libraries/linbox/default.nix b/pkgs/development/libraries/linbox/default.nix index 2217996acdb..0612a5be4ef 100644 --- a/pkgs/development/libraries/linbox/default.nix +++ b/pkgs/development/libraries/linbox/default.nix @@ -42,6 +42,7 @@ stdenv.mkDerivation rec { ] ++ stdenv.lib.optionals stdenv.isx86_64 { # disable SIMD instructions (which are enabled *when available* by default) default = [ "--disable-sse3" "--disable-ssse3" "--disable-sse41" "--disable-sse42" "--disable-avx" "--disable-avx2" "--disable-fma" "--disable-fma4" ]; + # Intel westmere = [ "--disable-avx" "--disable-avx2" "--disable-fma" "--disable-fma4" ]; sandybridge = [ "--disable-avx2" "--disable-fma" "--disable-fma4" ]; ivybridge = [ "--disable-avx2" "--disable-fma" "--disable-fma4" ]; @@ -49,6 +50,14 @@ stdenv.mkDerivation rec { broadwell = [ "--disable-fma4" ]; skylake = [ "--disable-fma4" ]; skylake-avx512 = [ "--disable-fma4" ]; + # AMD + btver1 = [ "--disable-avx" "--disable-avx2" "--disable-fma" "--disable-fma4" ]; + btver2 = [ "--disable-avx2" "--disable-fma" "--disable-fma4" ]; + bdver1 = [ "--disable-avx2" ]; + bdver2 = [ "--disable-avx2" ]; + bdver3 = [ "--disable-avx2" ]; + bdver4 = [ ]; + znver1 = [ "--disable-fma4" ]; }.${stdenv.hostPlatform.platform.gcc.arch or "default"} ++ stdenv.lib.optionals withSage [ "--enable-sage" diff --git a/pkgs/development/libraries/qt-5/modules/qtbase.nix b/pkgs/development/libraries/qt-5/modules/qtbase.nix index a4c12793abb..33054dd403f 100644 --- a/pkgs/development/libraries/qt-5/modules/qtbase.nix +++ b/pkgs/development/libraries/qt-5/modules/qtbase.nix @@ -259,6 +259,7 @@ stdenv.mkDerivation { then [ "-no-sse2" ] else lib.optionals (compareVersion "5.9.0" >= 0) { default = [ "-sse2" "-no-sse3" "-no-ssse3" "-no-sse4.1" "-no-sse4.2" "-no-avx" "-no-avx2" ]; + # Intel westmere = [ "-sse2" "-sse3" "-ssse3" "-sse4.1" "-sse4.2" "-no-avx" "-no-avx2" ]; sandybridge = [ "-sse2" "-sse3" "-ssse3" "-sse4.1" "-sse4.2" "-avx" "-no-avx2" ]; ivybridge = [ "-sse2" "-sse3" "-ssse3" "-sse4.1" "-sse4.2" "-avx" "-no-avx2" ]; @@ -266,6 +267,14 @@ stdenv.mkDerivation { broadwell = [ "-sse2" "-sse3" "-ssse3" "-sse4.1" "-sse4.2" "-avx" "-avx2" ]; skylake = [ "-sse2" "-sse3" "-ssse3" "-sse4.1" "-sse4.2" "-avx" "-avx2" ]; skylake-avx512 = [ "-sse2" "-sse3" "-ssse3" "-sse4.1" "-sse4.2" "-avx" "-avx2" ]; + # AMD + btver1 = [ "-sse2" "-sse3" "-ssse3" "-sse4.1" "-sse4.2" "-no-avx" "-no-avx2" ]; + btver2 = [ "-sse2" "-sse3" "-ssse3" "-sse4.1" "-sse4.2" "-avx" "-no-avx2" ]; + bdver1 = [ "-sse2" "-sse3" "-ssse3" "-sse4.1" "-sse4.2" "-avx" "-no-avx2" ]; + bdver2 = [ "-sse2" "-sse3" "-ssse3" "-sse4.1" "-sse4.2" "-avx" "-no-avx2" ]; + bdver3 = [ "-sse2" "-sse3" "-ssse3" "-sse4.1" "-sse4.2" "-avx" "-no-avx2" ]; + bdver4 = [ "-sse2" "-sse3" "-ssse3" "-sse4.1" "-sse4.2" "-avx" "-avx2" ]; + znver1 = [ "-sse2" "-sse3" "-ssse3" "-sse4.1" "-sse4.2" "-avx" "-avx2" ]; }.${stdenv.hostPlatform.platform.gcc.arch or "default"} ) ++ [ diff --git a/pkgs/development/python-modules/dlib/default.nix b/pkgs/development/python-modules/dlib/default.nix index a57d8307551..33cb72dca40 100644 --- a/pkgs/development/python-modules/dlib/default.nix +++ b/pkgs/development/python-modules/dlib/default.nix @@ -1,4 +1,6 @@ -{ buildPythonPackage, dlib, python, pytest, more-itertools, avxSupport ? true, lib }: +{ buildPythonPackage, lib, dlib, python, pytest, more-itertools, + avxSupport ? builtins.elem (stdenv.hostPlatform.platform.gcc.arch or "default") [ "sandybridge" "ivybridge" "haswell" "broadwell" "skylake" "skylake-avx512" "btver2" "bdver1" "bdver2" "bdver3" "bdver4" "znver1"] +}: buildPythonPackage { inherit (dlib) name src nativeBuildInputs buildInputs meta; diff --git a/pkgs/development/python-modules/tensorflow/1/default.nix b/pkgs/development/python-modules/tensorflow/1/default.nix index 4dc5c57070d..1633a32bee2 100644 --- a/pkgs/development/python-modules/tensorflow/1/default.nix +++ b/pkgs/development/python-modules/tensorflow/1/default.nix @@ -23,9 +23,9 @@ , xlaSupport ? cudaSupport # Default from ./configure script , cudaCapabilities ? [ "3.5" "5.2" ] -, sse42Support ? builtins.elem (stdenv.hostPlatform.platform.gcc.arch or "default") ["westmere" "sandybridge" "ivybridge" "haswell" "broadwell" "skylake" "skylake-avx512"] -, avx2Support ? builtins.elem (stdenv.hostPlatform.platform.gcc.arch or "default") [ "haswell" "broadwell" "skylake" "skylake-avx512"] -, fmaSupport ? builtins.elem (stdenv.hostPlatform.platform.gcc.arch or "default") [ "haswell" "broadwell" "skylake" "skylake-avx512"] +, sse42Support ? builtins.elem (stdenv.hostPlatform.platform.gcc.arch or "default") ["westmere" "sandybridge" "ivybridge" "haswell" "broadwell" "skylake" "skylake-avx512" "btver2" "bdver1" "bdver2" "bdver3" "bdver4" "znver1"] +, avx2Support ? builtins.elem (stdenv.hostPlatform.platform.gcc.arch or "default") [ "haswell" "broadwell" "skylake" "skylake-avx512" "bdver4" "znver1"] +, fmaSupport ? builtins.elem (stdenv.hostPlatform.platform.gcc.arch or "default") [ "haswell" "broadwell" "skylake" "skylake-avx512" "bdver2" "bdver3" "bdver4" "znver1"] # Darwin deps , Foundation, Security }: diff --git a/pkgs/development/python-modules/tensorflow/2/default.nix b/pkgs/development/python-modules/tensorflow/2/default.nix index 4dd378d1410..8f30ecbcc98 100644 --- a/pkgs/development/python-modules/tensorflow/2/default.nix +++ b/pkgs/development/python-modules/tensorflow/2/default.nix @@ -23,9 +23,9 @@ , xlaSupport ? cudaSupport # Default from ./configure script , cudaCapabilities ? [ "3.5" "5.2" ] -, sse42Support ? builtins.elem (stdenv.hostPlatform.platform.gcc.arch or "default") ["westmere" "sandybridge" "ivybridge" "haswell" "broadwell" "skylake" "skylake-avx512"] -, avx2Support ? builtins.elem (stdenv.hostPlatform.platform.gcc.arch or "default") [ "haswell" "broadwell" "skylake" "skylake-avx512"] -, fmaSupport ? builtins.elem (stdenv.hostPlatform.platform.gcc.arch or "default") [ "haswell" "broadwell" "skylake" "skylake-avx512"] +, sse42Support ? builtins.elem (stdenv.hostPlatform.platform.gcc.arch or "default") ["westmere" "sandybridge" "ivybridge" "haswell" "broadwell" "skylake" "skylake-avx512" "btver2" "bdver1" "bdver2" "bdver3" "bdver4" "znver1"] +, avx2Support ? builtins.elem (stdenv.hostPlatform.platform.gcc.arch or "default") [ "haswell" "broadwell" "skylake" "skylake-avx512" "bdver4" "znver1"] +, fmaSupport ? builtins.elem (stdenv.hostPlatform.platform.gcc.arch or "default") [ "haswell" "broadwell" "skylake" "skylake-avx512" "bdver2" "bdver3" "bdver4" "znver1"] # Darwin deps , Foundation, Security }: diff --git a/pkgs/tools/networking/i2pd/default.nix b/pkgs/tools/networking/i2pd/default.nix index b686ea4d04f..14fcde4367c 100644 --- a/pkgs/tools/networking/i2pd/default.nix +++ b/pkgs/tools/networking/i2pd/default.nix @@ -1,8 +1,8 @@ { stdenv, fetchFromGitHub , boost, zlib, openssl , upnpSupport ? true, miniupnpc ? null -, aesniSupport ? false -, avxSupport ? false +, aesniSupport ? builtins.elem (stdenv.hostPlatform.platform.gcc.arch or "default") [ "sandybridge" "ivybridge" "haswell" "broadwell" "skylake" "skylake-avx512" "btver2" "bdver1" "bdver2" "bdver3" "bdver4" "znver1"] +, avxSupport ? builtins.elem (stdenv.hostPlatform.platform.gcc.arch or "default") [ "sandybridge" "ivybridge" "haswell" "broadwell" "skylake" "skylake-avx512" "btver2" "bdver1" "bdver2" "bdver3" "bdver4" "znver1"] }: assert upnpSupport -> miniupnpc != null;