summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorheavysink2020-05-16 03:29:14 -0400
committerheavysink2020-05-16 03:29:14 -0400
commit481863c4e82d320128b95df9c1f07c23e077253b (patch)
tree601663c4aaa50e238dd88f319a00c5d10bcbd9d6
parent0ad378f138e32b416ca7076dd34b96a2b188c27e (diff)
downloadaur-481863c4e82d320128b95df9c1f07c23e077253b.tar.gz
Add shared compiling
-rw-r--r--.SRCINFO10
-rw-r--r--MUMPS-shared-pord.patch61
-rw-r--r--MUMPS-shared-seq.patch42
-rw-r--r--MUMPS-shared.patch41
-rw-r--r--Makefile.inc9
-rwxr-xr-xPKGBUILD36
6 files changed, 175 insertions, 24 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 1e62985692b7..15a635d4bbd3 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,7 +1,7 @@
pkgbase = mumps-par
pkgdesc = Sparse solver library using Gaussian elimination, with parmetis implementation
pkgver = 5.3.1
- pkgrel = 1
+ pkgrel = 3
url = http://mumps.enseeiht.fr
arch = i686
arch = x86_64
@@ -19,8 +19,14 @@ pkgbase = mumps-par
conflicts = mumps
source = http://mumps.enseeiht.fr/MUMPS_5.3.1.tar.gz
source = Makefile.inc
+ source = MUMPS-shared.patch
+ source = MUMPS-shared-pord.patch
+ source = MUMPS-shared-seq.patch
sha256sums = 774fc9411a3ab4704bc907cb7d30090ce6a65b83cde32549c58d3e9f63594e1a
- sha256sums = 70c24f044ba53bab49790ccb09d6c470e2d3cded46100fa5aaa97472321342ee
+ sha256sums = b5d3baf74f14f30f7888cc6847ffdf43184aaa9609dd21b9d9ab94a9070639ee
+ sha256sums = 51c754c0d34b461f3635ce2731f82e9c51d512528caf72cac5041380259d063d
+ sha256sums = e47d0bb48d278c96963bf0de2a6282836fef80af4344376c2a796c59c723053f
+ sha256sums = 6ae456e4969d1af5ce8f209932d65f2d2dbe475a1fa99c303a6eb92d6771788f
pkgname = mumps-par
diff --git a/MUMPS-shared-pord.patch b/MUMPS-shared-pord.patch
new file mode 100644
index 000000000000..efada6e5e351
--- /dev/null
+++ b/MUMPS-shared-pord.patch
@@ -0,0 +1,61 @@
+--- PORD/lib/Makefile
++++ PORD/lib/Makefile
+@@ -24,10 +24,14 @@ OBJS = graph.o gbipart.o gbisect.o ddcre
+ .c.o:
+ $(CC) $(COPTIONS) -c $*.c $(OUTC)$*.o
+
+-libpord$(LIBEXT):$(OBJS)
++libpord$(PLAT).a:$(OBJS)
+ $(AR)$@ $(OBJS)
+ $(RANLIB) $@
+
++libpord$(PLAT).so: $(OBJS)
++ $(CC) -shared $(OBJS) -Wl,-soname,libpord$(PLAT).so.$(SONAME_VERSION) -o libpord$(PLAT).so.$(SONAME_VERSION) $(OPTL) -Wl,-z,defs
++ ln -fs libpord$(PLAT).so.$(SONAME_VERSION) $@
++
+ clean:
+ rm -f *.o
+
+Index: mumps/Makefile
+===================================================================
+--- Makefile
++++ Makefile
+@@ -54,7 +54,7 @@
+ multi_example: s d c z
+ (cd examples ; $(MAKE) multi)
+
+-requiredobj: Makefile.inc $(LIBSEQNEEDED) $(libdir)/libpord$(PLAT)$(LIBEXT)
++requiredobj: Makefile.inc $(LIBSEQNEEDED) $(libdir)/libpord$(PLAT).a $(libdir)/libpord$(PLAT).so
+
+ # dummy MPI library (sequential version)
+
+@@ -62,19 +62,26 @@
+ (cd libseq; $(MAKE))
+
+ # Build the libpord.a library and copy it into $(topdir)/lib
+-$(libdir)/libpord$(PLAT)$(LIBEXT):
++$(libdir)/libpord$(PLAT).a:
+ if [ "$(LPORDDIR)" != "" ] ; then \
+ cd $(LPORDDIR); \
+ $(MAKE) CC="$(CC)" CFLAGS="$(OPTC)" AR="$(AR)" RANLIB="$(RANLIB)" OUTC="$(OUTC)" LIBEXT=$(LIBEXT); \
+ fi;
+ if [ "$(LPORDDIR)" != "" ] ; then \
+- cp $(LPORDDIR)/libpord$(LIBEXT) $@; \
++ cp $(LPORDDIR)/libpord$(PLAT).a $@; \
+ fi;
+
++$(libdir)/libpord$(PLAT).so:
++ if [ "$(LPORDDIR)" != "" ] ; then \
++ cd $(LPORDDIR); make CC="$(CC)" CFLAGS="$(OPTC)" AR="$(AR)" ARFUNCT= RANLIB="$(RANLIB)" libpord$(PLAT).so; fi;
++ if [ "$(LPORDDIR)" != "" ] ; then \
++ cp -a $(LPORDDIR)/libpord*.so* lib/; fi;
++
++
+ clean:
+ (cd src; $(MAKE) clean)
+ (cd examples; $(MAKE) clean)
+- (cd $(libdir); $(RM) *$(PLAT)$(LIBEXT))
++ (cd $(libdir); $(RM) *$(PLAT).a *$(PLAT).so*)
+ (cd libseq; $(MAKE) clean)
+ if [ "$(LPORDDIR)" != "" ] ; then \
+ cd $(LPORDDIR); $(MAKE) realclean; \
diff --git a/MUMPS-shared-seq.patch b/MUMPS-shared-seq.patch
new file mode 100644
index 000000000000..565da49ef688
--- /dev/null
+++ b/MUMPS-shared-seq.patch
@@ -0,0 +1,42 @@
+Create a shared version of the sequential library, MUST BE LAST IN SERIES
+
+--- libseq/Makefile
++++ libseq/Makefile
+@@ -8,7 +8,7 @@
+ include ../Makefile.inc
+
+-libmpiseq: libmpiseq$(PLAT)$(LIBEXT)
++libmpiseq: libmpiseq$(PLAT)$(LIBEXT) libmpiseq$(PLAT).so
+
+ libmpiseq$(PLAT)$(LIBEXT): mpi.o mpic.o elapse.o
+ $(AR)$@ mpi.o mpic.o elapse.o
+
+--- libseq/Makefile
++++ libseq/Makefile
+@@ -13,10 +13,13 @@
+ libmpiseq$(PLAT)$(LIBEXT): mpi.o mpic.o elapse.o
+ $(AR)$@ mpi.o mpic.o elapse.o
+ $(RANLIB) $@
++libmpiseq$(PLAT).so: mpi.o mpic.o elapse.o
++ $(FC) -shared $^ -Wl,--as-needed -Wl,-soname,libmpiseq$(PLAT).so.$(SONAME_VERSION) -o libmpiseq$(PLAT).so.$(SONAME_VERSION)
++ ln -fs libmpiseq$(PLAT).so.$(SONAME_VERSION) $@
+ .f.o:
+- $(FC) $(OPTF) -c $*.f $(OUTF)$*.o
++ $(FC) $(OPTF) -fPIC -c $*.f $(OUTF)$*.o
+ .c.o:
+- $(CC) $(OPTC) $(CDEFS) -I. -c $*.c $(OUTC)$*.o
++ $(CC) $(OPTC) $(CDEFS) -I. -fPIC -c $*.c $(OUTC)$*.o
+
+ clean:
+ $(RM) *.o *$(LIBEXT)
+
+--- Makefile 2015-02-20 19:51:32.021098000 +0100
++++ Makefile 2015-02-20 19:52:13.535854348 +0100
+@@ -57,6 +57,7 @@
+
+ libseqneeded:
+ (cd libseq; $(MAKE))
++ cp libseq/lib* $(libdir)
+
+ # Build the libpord.a library and copy it into $(topdir)/lib
+ $(libdir)/libpord$(PLAT).a:
diff --git a/MUMPS-shared.patch b/MUMPS-shared.patch
new file mode 100644
index 000000000000..a380f2fb2fa9
--- /dev/null
+++ b/MUMPS-shared.patch
@@ -0,0 +1,41 @@
+--- src/Makefile
++++ src/Makefile
+@@ -23,9 +23,10 @@ z:
+ include $(topdir)/Makefile.inc
+
+ mumps_lib: $(incdir)/mumps_int_def.h \
+- $(libdir)/libmumps_common$(PLAT)$(LIBEXT) \
+- $(libdir)/lib$(ARITH)mumps$(PLAT)$(LIBEXT)
+-
++ $(libdir)/libmumps_common$(PLAT).a \
++ $(libdir)/libmumps_common$(PLAT).so \
++ $(libdir)/lib$(ARITH)mumps$(PLAT).a \
++ $(libdir)/lib$(ARITH)mumps$(PLAT).so
+ # Build $(incdir)/mumps_int_def.h, needed by mumps_c_types.h
+ $(incdir)/mumps_int_def.h: build_mumps_int_def
+ ./build_mumps_int_def > $(incdir)/mumps_int_def.h
+@@ -188,14 +189,22 @@ OBJS_OTHER = \
+ $(ARITH)tools.o\
+ $(ARITH)type3_root.o
+
+-$(libdir)/libmumps_common$(PLAT)$(LIBEXT): $(OBJS_COMMON_MOD) $(OBJS_COMMON_OTHER)
++$(libdir)/libmumps_common$(PLAT).a: $(OBJS_COMMON_MOD) $(OBJS_COMMON_OTHER)
+ $(AR)$@ $?
+ $(RANLIB) $@
++
++$(libdir)/libmumps_common$(PLAT).so: $(OBJS_COMMON_MOD) $(OBJS_COMMON_OTHER)
++ $(FC) -shared $^ -Wl,-soname,libmumps_common$(PLAT).so.$(SONAME_VERSION) $(OPTL) -L$(libdir) $(LORDERINGS) -lpthread $(MPIFLIB) $(MPICLIB) -o $(libdir)/libmumps_common$(PLAT).so.$(SONAME_VERSION) $(OPTL) -Wl,-z,defs
++ ln -fs libmumps_common$(PLAT).so.$(SONAME_VERSION) $@
+
+-$(libdir)/lib$(ARITH)mumps$(PLAT)$(LIBEXT): $(OBJS_MOD) $(OBJS_OTHER)
++$(libdir)/lib$(ARITH)mumps$(PLAT).a: $(OBJS_MOD) $(OBJS_OTHER)
+ $(AR)$@ $?
+ $(RANLIB) $@
+
++$(libdir)/lib$(ARITH)mumps$(PLAT).so: $(OBJS_MOD) $(OBJS_OTHER)
++ $(FC) -shared $^ -Wl,-soname,lib$(ARITH)mumps$(PLAT).so.$(SONAME_VERSION) $(OPTL) -L$(libdir) -lmumps_common$(PLAT) $(LORDERINGS) $(MPIFLIB) $(SCALAP) -o $(libdir)/lib$(ARITH)mumps$(PLAT).so.$(SONAME_VERSION) $(OPTL) -Wl,-z,defs
++ ln -fs lib$(ARITH)mumps$(PLAT).so.$(SONAME_VERSION) $@
++
+ # Dependencies between modules:
+ # i) arithmetic-dependent modules:
+ $(ARITH)ana_aux.o: $(ARITH)mumps_struc_def.o \
diff --git a/Makefile.inc b/Makefile.inc
index 421e4fe84be3..e7db5be514a9 100644
--- a/Makefile.inc
+++ b/Makefile.inc
@@ -16,6 +16,7 @@
# Metis/ParMetis and SCOTCH/PT-SCOTCH (ver 6.0 and later) orderings are now available for MUMPS.
#
+SONAME_VERSION=5.3
SCOTCHDIR = /usr
ISCOTCH = -I$(SCOTCHDIR)/include/scotch
# You have to choose one among the following two lines depending on
@@ -67,7 +68,7 @@ IORDERINGSC = $(IMETIS) $(IPORD) $(ISCOTCH)
PLAT =
# Library extension, + C and Fortran "-o" option
# may be different under Windows
-LIBEXT = .a
+LIBEXT = .so
OUTC = -o
OUTF = -o
# RM : remove files
@@ -87,13 +88,15 @@ RANLIB = ranlib
#RANLIB = echo
# SCALAP should define the SCALAPACK and BLACS libraries.
-SCALAP = -lscalapack -llapack
+SCALAP = -lscalapack -llapack -lblas
# INCLUDE DIRECTORY FOR MPI
INCPAR = -I/usr/include/openmpi
# LIBRARIES USED BY THE PARALLEL VERSION OF MUMPS: $(SCALAP) and MPI
-LIBPAR = $(SCALAP) -L/usr/lib/openmpi -lmpi_usempif08 -lmpi_usempi_ignore_tkr -lmpi_mpifh -lmpi
+MPIFLIB = -L/usr/lib/openmpi -Wl,-rpath -Wl,/usr/lib/openmpi -Wl,--enable-new-dtags -lmpi_usempif08 -lmpi_usempi_ignore_tkr -lmpi_mpifh -lmpi
+MPICLIB = -L/usr/lib/openmpi -Wl,-rpath -Wl,/usr/lib/openmpi -Wl,--enable-new-dtags -lmpi
+LIBPAR = $(SCALAP) $(MPIFLIB)
# The parallel version is not concerned by the next two lines.
# They are related to the sequential library provided by MUMPS,
diff --git a/PKGBUILD b/PKGBUILD
index 57aa2c1703c1..da28eb2cc023 100755
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -3,7 +3,7 @@
# Contributor: Lucas H. Gabrielli
pkgname=mumps-par
pkgver=5.3.1
-pkgrel=1
+pkgrel=3
pkgdesc="Sparse solver library using Gaussian elimination, with parmetis implementation"
url="http://mumps.enseeiht.fr"
license=("custom")
@@ -14,15 +14,25 @@ conflicts=('mumps')
backup=()
arch=('i686' 'x86_64')
source=(http://mumps.enseeiht.fr/MUMPS_${pkgver}.tar.gz
- Makefile.inc)
+ Makefile.inc
+ MUMPS-shared.patch
+ MUMPS-shared-pord.patch
+ MUMPS-shared-seq.patch)
sha256sums=('774fc9411a3ab4704bc907cb7d30090ce6a65b83cde32549c58d3e9f63594e1a'
- '70c24f044ba53bab49790ccb09d6c470e2d3cded46100fa5aaa97472321342ee')
+ 'b5d3baf74f14f30f7888cc6847ffdf43184aaa9609dd21b9d9ab94a9070639ee'
+ '51c754c0d34b461f3635ce2731f82e9c51d512528caf72cac5041380259d063d'
+ 'e47d0bb48d278c96963bf0de2a6282836fef80af4344376c2a796c59c723053f'
+ '6ae456e4969d1af5ce8f209932d65f2d2dbe475a1fa99c303a6eb92d6771788f')
build() {
cd "${srcdir}/MUMPS_${pkgver}"
cp "${srcdir}/Makefile.inc" .
-
- make -j1 alllib || return 1
+ patch -Np0 < ../MUMPS-shared.patch
+ patch -Np0 < ../MUMPS-shared-pord.patch
+ patch -Np0 < ../MUMPS-shared-seq.patch
+
+ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${srcdir}/MUMPS_${pkgver}/lib
+ SONAME_VERSION=$pkgver make -j1 alllib || return 1
}
package(){
@@ -34,26 +44,14 @@ package(){
# Install all libraries
cd "${srcdir}/MUMPS_${pkgver}/lib" || return 1
install -m 755 -d "${pkgdir}/usr/lib" || return 1
- install -D -m644 lib*.a ${pkgdir}/usr/lib || return 1
- for _FILE in `ls *.a | sed "s|\.a||"`; do
- ld -Bshareable -o ${_FILE}.so.${pkgver} -x -soname ${_FILE}.so --whole-archive ${_FILE}.a
- install -m 644 -D ${_FILE}.a ${pkgdir}/usr/lib/${_FILE}.a
- install -m 755 ${_FILE}.so.${pkgver} ${pkgdir}/usr/lib
- ln -sf ${_FILE}.so.${pkgver} ${pkgdir}/usr/lib/${_FILE}.so.${pkgver:0:1}
- done
+ install -D -m644 lib* ${pkgdir}/usr/lib || return 1
# Install libraries mpiseq
cd "${srcdir}/MUMPS_${pkgver}/libseq"
install -m 755 -d "${pkgdir}/usr/include/mpiseq"
install -D -m644 *.h "${pkgdir}/usr/include/mpiseq"
cd "${srcdir}/MUMPS_${pkgver}/libseq"
- install -D -m644 lib*.a ${pkgdir}/usr/lib
- for _FILE in `ls *.a | sed "s|\.a||"`; do
- ld -Bshareable -o ${_FILE}.so.${pkgver} -x -soname ${_FILE}.so --whole-archive ${_FILE}.a
- install -m 644 -D ${_FILE}.a ${pkgdir}/usr/lib/${_FILE}.a
- install -m 755 ${_FILE}.so.${pkgver} ${pkgdir}/usr/lib
- ln -sf ${_FILE}.so.${pkgver} ${pkgdir}/usr/lib/${_FILE}.so.${pkgver:0:1}
- done
+ install -D -m644 lib* ${pkgdir}/usr/lib
# Install examples
install -m 755 -d "${pkgdir}/usr/share/doc/${pkgname}/examples"