On Wed, 21 Dec 2016 09:17:33 -0600, Satish Balay wrote:
I've added $MKLROOT/lib/ to search path for MKL. Thanks for the
report.
https://bitbucket.org/petsc/petsc/commits/7fe016461159234c29eaa106eb46d0bf81683f36
Thanks.
Wrt libiomp5.dylib - its an intel compiler library - so its found
when
using icc,icpc [as you describe below].
I guess it doesn't work when building with clang?
Intel MKL advisor is the authoritative tool for such checks..
Yet another bug'd Intel "software"...
https://software.intel.com/en-us/articles/intel-mkl-link-line-advisor/
it says:
-L${MKLROOT}/lib -Wl,-rpath,${MKLROOT}/lib -lmkl_intel_lp64
-lmkl_intel_thread -lmkl_core -lmkl_blacs_mpich_lp64 -liomp5
-lpthread
-lm -ldl
So it suggests using -liomp5 - but doesn't say - its not a clang
library. Not sure how to deal with this automatically.
Your current approach of using LDFLAGS is appropriate [workarround].
It should be reachable by the linker in most cases in one of the
following folder:
${MKLROOT}/../compiler/[os.path.join('lib','64'),os.path.join('lib','ia64'),os.path.join('lib','em64t'),os.path.join('lib','intel64'),'lib','64','ia64','em64t','intel64',os.path.join('lib','32'),os.path.join('lib','ia32'),'32','ia32','']
But there might be a more appropriate (or less ugly) way to go.
Thanks.
Satish
On Wed, 21 Dec 2016, Pierre Jolivet wrote:
Hello,
There are some issues when using (most recent versions of) the MKL
on macOS:
1) the correct path to libmkl_*.dylib is now $MKLROOT/lib/, but this
is not taken into account by the build system
diff --git a/config/BuildSystem/config/packages/BlasLapack.py
b/config/BuildSystem/config/packages/BlasLapack.py
index 43597e2..017ed12 100644
--- a/config/BuildSystem/config/packages/BlasLapack.py
+++ b/config/BuildSystem/config/packages/BlasLapack.py
@@ -217,7 +217,7 @@ class Configure(config.package.Package):
mkl_blacs_32=[]
if useCPardiso or usePardiso:
self.logPrintBox('BLASLAPACK: Looking for Multithreaded MKL
for C/Pardiso')
- for libdir in
[os.path.join('lib','64'),os.path.join('lib','ia64'),os.path.join('lib','em64t'),os.path.join('lib','intel64'),'64','ia64','em64t','intel64',
+ for libdir in
[os.path.join('lib','64'),os.path.join('lib','ia64'),os.path.join('lib','em64t'),os.path.join('lib','intel64'),'64','ia64','em64t','lib','intel64',
os.path.join('lib','32'),os.path.join('lib','ia32'),'32','ia32','']:
if not os.path.exists(os.path.join(dir,libdir)):
self.logPrint('MKL Path not found.. skipping:
'+os.path.join(dir,libdir))
2) Once this is fixed, it is assumed that libiomp5.dylib is in the
same folder as libmkl_intel_thread.dylib (which is wrong), or at least
visible to the linker. Thus, the configure will fail because it can’t
find libiomp5.dylib, unless explicitly using —CXX=icpc and —CC=icc, or
—LDFLAGS=-L${PATH_TO_LIBIOMP5}
I don’t know if you care enough to fix this (I’m guessing there
aren’t that many macOS users compiling PETSc with MKL support but
without the Intel compilers), but just in case…
Thanks,
Pierre