From 702b62657065bbf0fa7f58ce843100d6e6681370 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20de=20Kok?= Date: Fri, 6 Nov 2020 09:55:12 +0100 Subject: [PATCH 1/2] mkl: Fix pkg-config file There was a spurious `intel64` in some library paths. --- pkgs/development/libraries/science/math/mkl/default.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/development/libraries/science/math/mkl/default.nix b/pkgs/development/libraries/science/math/mkl/default.nix index 2be3baed4497..7cbc50bc5b37 100644 --- a/pkgs/development/libraries/science/math/mkl/default.nix +++ b/pkgs/development/libraries/science/math/mkl/default.nix @@ -90,7 +90,8 @@ in stdenvNoCC.mkDerivation { substituteInPlace $f \ --replace "prefix=/mkl" "prefix=$out" \ --replace $\{MKLROOT} "$out" \ - --replace "lib/intel64_lin" "lib" + --replace "lib/intel64_lin" "lib" \ + --replace "lib/intel64" "lib" done for f in $(find opt/intel -name 'mkl*iomp.pc') ; do From b5d27eb87c99a476460f5bec2a636848a4e7cef6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20de=20Kok?= Date: Fri, 6 Nov 2020 09:56:13 +0100 Subject: [PATCH 2/2] mkl: Add a small test program The MKL pkg-config files often change and are then incorrect for our paths. pkg-config validation finds some issues, but not incorrect paths. So, add a small test program to test whether the generated pkg-config files can actually be used to build a functioning binary. Hopefully this catches future regressions. --- .../libraries/science/math/mkl/default.nix | 5 ++- .../science/math/mkl/test/default.nix | 33 +++++++++++++++++++ .../libraries/science/math/mkl/test/test.c | 12 +++++++ 3 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 pkgs/development/libraries/science/math/mkl/test/default.nix create mode 100644 pkgs/development/libraries/science/math/mkl/test/test.c diff --git a/pkgs/development/libraries/science/math/mkl/default.nix b/pkgs/development/libraries/science/math/mkl/default.nix index 7cbc50bc5b37..7b91940033dd 100644 --- a/pkgs/development/libraries/science/math/mkl/default.nix +++ b/pkgs/development/libraries/science/math/mkl/default.nix @@ -1,4 +1,5 @@ -{ stdenvNoCC +{ callPackage +, stdenvNoCC , fetchurl , rpmextract , undmg @@ -157,6 +158,8 @@ in stdenvNoCC.mkDerivation { dontStrip = true; dontPatchELF = true; + passthru.tests.pkg-config = callPackage ./test { }; + meta = with stdenvNoCC.lib; { description = "Intel Math Kernel Library"; longDescription = '' diff --git a/pkgs/development/libraries/science/math/mkl/test/default.nix b/pkgs/development/libraries/science/math/mkl/test/default.nix new file mode 100644 index 000000000000..688c0ec7c399 --- /dev/null +++ b/pkgs/development/libraries/science/math/mkl/test/default.nix @@ -0,0 +1,33 @@ +{ stdenv, pkg-config, mkl }: + +stdenv.mkDerivation { + pname = "mkl-test"; + version = mkl.version; + + src = ./.; + + nativeBuildInputs = [ pkg-config ]; + + buildInputs = [ mkl ]; + + doCheck = true; + + buildPhase = '' + # Check regular Nix build. + gcc $(pkg-config --cflags --libs mkl-dynamic-ilp64-seq) test.c -o test + + # Clear flags to ensure that we are purely relying on options + # provided by pkg-config. + NIX_CFLAGS_COMPILE="" \ + NIX_LDFLAGS="" \ + gcc $(pkg-config --cflags --libs mkl-dynamic-ilp64-seq) test.c -o test + ''; + + installPhase = '' + touch $out + ''; + + checkPhase = '' + ./test + ''; +} diff --git a/pkgs/development/libraries/science/math/mkl/test/test.c b/pkgs/development/libraries/science/math/mkl/test/test.c new file mode 100644 index 000000000000..9413ac0c68e9 --- /dev/null +++ b/pkgs/development/libraries/science/math/mkl/test/test.c @@ -0,0 +1,12 @@ +#include + +#include + +int main() { + float u[] = {1., 2., 3.}; + float v[] = {4., 5., 6.}; + + float dp = cblas_sdot(3, u, 1, v, 1); + + assert(dp == 32.); +}