From 5c917d34ef6b153ea07eb3c6fb830d05f6578993 Mon Sep 17 00:00:00 2001
From: "Mulas, Giacomo" <gmulas@oa-cagliari.inaf.it>
Date: Thu, 7 Mar 2024 14:19:34 +0100
Subject: [PATCH] clean up the various options of lapack vs mkl vs internal
 lucin, making sure it works.

---
 src/Makefile                 |  4 ++--
 src/cluster/Makefile         |  4 ++--
 src/cluster/cluster.cpp      |  2 ++
 src/libnptm/lapack_calls.cpp |  2 ++
 src/make.inc                 | 41 ++++++++++++++++++++++++++++++++++--
 5 files changed, 47 insertions(+), 6 deletions(-)

diff --git a/src/Makefile b/src/Makefile
index 61a13c6f..dd65769a 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -9,8 +9,8 @@ override BUILDDIR_NPTM=$(BUILDDIR)/libnptm
 endif
 ifndef LIBNPTM
 # choose one of the two following lines, depending on whether a static or dynamic libnptm is wanted
-override LIBNPTM=$(BUILDDIR_NPTM)/libnptm.a
-#override LIBNPTM=$(BUILDDIR_NPTM)/libnptm.so
+#override LIBNPTM=$(BUILDDIR_NPTM)/libnptm.a
+override LIBNPTM=$(BUILDDIR_NPTM)/libnptm.so
 endif
 DOCSDIR=$(SRCDIR)/../doc
 
diff --git a/src/cluster/Makefile b/src/cluster/Makefile
index 8a117426..c13c9680 100644
--- a/src/cluster/Makefile
+++ b/src/cluster/Makefile
@@ -12,8 +12,8 @@ override BUILDDIR_NPTM=$(BUILDDIR)/libnptm
 endif
 ifndef LIBNPTM
 # choose one of the two following lines, depending on whether a static or dynamic libnptm is wanted
-override LIBNPTM=$(BUILDDIR_NPTM)/libnptm.a
-#override LIBNPTM=$(BUILDDIR_NPTM)/libnpTm.so
+#override LIBNPTM=$(BUILDDIR_NPTM)/libnptm.a
+override LIBNPTM=$(BUILDDIR_NPTM)/libnptm.so
 endif
 
 include ../make.inc
diff --git a/src/cluster/cluster.cpp b/src/cluster/cluster.cpp
index a0fc6642..52ab59ac 100644
--- a/src/cluster/cluster.cpp
+++ b/src/cluster/cluster.cpp
@@ -32,10 +32,12 @@
 #include "../include/TransitionMatrix.h"
 #endif
 
+#ifdef USE_LAPACK
 #ifndef INCLUDE_LAPACK_CALLS_H_
 #include "lapacke.h"
 #include "../include/lapack_calls.h"
 #endif
+#endif
 
 #ifndef INCLUDE_ALGEBRAIC_H_
 #include "../include/algebraic.h"
diff --git a/src/libnptm/lapack_calls.cpp b/src/libnptm/lapack_calls.cpp
index 462bdaec..8ec06e98 100644
--- a/src/libnptm/lapack_calls.cpp
+++ b/src/libnptm/lapack_calls.cpp
@@ -6,6 +6,7 @@
 #include "../include/lapack_calls.h"
 #endif
 
+#ifdef USE_LAPACK
 void zinvert(std::complex<double> **mat, lapack_int n, int &jer) {
   jer = 0;
   __complex__ double *arr = new __complex__ double[n * n];
@@ -30,3 +31,4 @@ void zinvert(std::complex<double> **mat, lapack_int n, int &jer) {
   delete[] IPIV;
   delete[] arr;
 }
+#endif
diff --git a/src/make.inc b/src/make.inc
index 35dc5713..d5b96b5a 100644
--- a/src/make.inc
+++ b/src/make.inc
@@ -38,11 +38,48 @@ ifndef HDF5_INCLUDE
 override HDF5_INCLUDE=/usr/include/hdf5/serial
 endif
 
+# define (outside) USE_LAPACK for lapacke support, LAPACK_ILP64 for ilp64 interface, MKL_ILP64 the same if using MKL implementation
+ifdef USE_LAPACK
+ifndef LAPACK_ILP64
+override LAPACK_ILP64=1
+endif
+# define (outside) USE_MKL to use the MKL implementation of lapacke
+ifdef USE_MKL
+ifndef MKL_ILP64
+override MKL_ILP64=1
+endif
+ifndef LAPACK_INCLUDE
+# this is for the MKL implementation
+override LAPACK_INCLUDE=$(MKLROOT)/include
+endif
+ifndef LAPACK_LDFLAGS
+# this is for the MKL implementation
+override LAPACK_LDFLAGS=-L$(MKLROOT)/lib -Wl,--no-as-needed -lmkl_intel_ilp64 -lmkl_gnu_thread -lmkl_core -lgomp -lpthread -lm -ldl
+endif
+# the next else refers to USE_MKL
+else
+ifndef LAPACK_INCLUDE
+# this is for standard "vanilla" lapacke64
+override LAPACK_INCLUDE=/usr/include
+endif
+ifndef LAPACK_LDFLAGS
+# this is for standard "vanilla" lapacke64
+override LAPACK_LDFLAGS=-llapacke64
+endif
+# the next endif is for USE_MKL
+endif
+#the next endif is for USE_LAPACK
+endif
+
 # CXXFLAGS defines the default compilation options for the C++ compiler
 ifndef CXXFLAGS
-override CXXFLAGS=-O3 -ggdb -pg -coverage -DLAPACK_ILP64 -I$(HDF5_INCLUDE)
+ifdef USE_LAPACK
+override CXXFLAGS=-O3 -ggdb -pg -coverage -I$(HDF5_INCLUDE) -I$(LAPACK_INCLUDE)
+else
+override CXXFLAGS=-O3 -ggdb -pg -coverage -I$(HDF5_INCLUDE)
 #override CXXFLAGS=-O3 -I$(HDF5_INCLUDE)
 endif
+endif
 
 # HDF5_LIB defines the default path to the HDF5 libraries to use
 # CXXLDFLAGS defines the default linker flags to use for C++ codes
@@ -50,7 +87,7 @@ ifndef CXXLDFLAGS
 ifndef HDF5_LIB
 override HDF5_LIB=/usr/lib/x86_64-linux-gnu/hdf5/serial
 endif
-override CXXLDFLAGS=-L/usr/lib64 -L$(HDF5_LIB) -lhdf5 -llapacke64 $(LDFLAGS)
+override CXXLDFLAGS=-L/usr/lib64 -L$(HDF5_LIB) -lhdf5 $(LAPACK_LDFLAGS) $(LDFLAGS)
 #else
 #override CXXLDFLAGS=-L/usr/lib64 -L$(HDF5_LIB) -lhdf5 $(CXXLDFLAGS)
 endif
-- 
GitLab