diff options
author | heavysink | 2020-05-16 03:29:14 -0400 |
---|---|---|
committer | heavysink | 2020-05-16 03:29:14 -0400 |
commit | 481863c4e82d320128b95df9c1f07c23e077253b (patch) | |
tree | 601663c4aaa50e238dd88f319a00c5d10bcbd9d6 | |
parent | 0ad378f138e32b416ca7076dd34b96a2b188c27e (diff) | |
download | aur-481863c4e82d320128b95df9c1f07c23e077253b.tar.gz |
Add shared compiling
-rw-r--r-- | .SRCINFO | 10 | ||||
-rw-r--r-- | MUMPS-shared-pord.patch | 61 | ||||
-rw-r--r-- | MUMPS-shared-seq.patch | 42 | ||||
-rw-r--r-- | MUMPS-shared.patch | 41 | ||||
-rw-r--r-- | Makefile.inc | 9 | ||||
-rwxr-xr-x | PKGBUILD | 36 |
6 files changed, 175 insertions, 24 deletions
@@ -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, @@ -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" |