~ruther/guix-local

b70d6ce6273a377963f706454640d88edbbd4208 — FELŠÖCI Marek 3 years ago 81faecf
gnu: mumps: Update to 5.5.1

* gnu/packages/maths.scm (mumps): Update to 5.5.1. Stop applying patches as the build configuration has been updated upstream. Allow for further optimized BLR compression by specifying the -DBLR_MT build option.
* gnu/packages/patches/mumps-build-parallelism.patch: File removed.
* gnu/packages/patches/mumps-shared-libseq.patch: File removed.
* gnu/packages/patches/mumps-shared-mumps.patch: File removed.
* gnu/packages/patches/mumps-shared-pord.patch: File removed.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
6 files changed, 72 insertions(+), 258 deletions(-)

M gnu/local.mk
M gnu/packages/maths.scm
D gnu/packages/patches/mumps-build-parallelism.patch
D gnu/packages/patches/mumps-shared-libseq.patch
D gnu/packages/patches/mumps-shared-mumps.patch
D gnu/packages/patches/mumps-shared-pord.patch
M gnu/local.mk => gnu/local.mk +0 -4
@@ 1525,10 1525,6 @@ dist_patch_DATA =						\
  %D%/packages/patches/mosaicatcher-unbundle-htslib.patch	\
  %D%/packages/patches/mrrescue-support-love-11.patch		\
  %D%/packages/patches/mtools-mformat-uninitialized.patch	\
  %D%/packages/patches/mumps-build-parallelism.patch		\
  %D%/packages/patches/mumps-shared-libseq.patch		\
  %D%/packages/patches/mumps-shared-mumps.patch			\
  %D%/packages/patches/mumps-shared-pord.patch			\
  %D%/packages/patches/mupen64plus-ui-console-notice.patch	\
  %D%/packages/patches/mupen64plus-video-z64-glew-correct-path.patch    \
  %D%/packages/patches/musl-cross-locale.patch			\

M gnu/packages/maths.scm => gnu/packages/maths.scm +72 -59
@@ 53,6 53,7 @@
;;; Copyright © 2022 Zhu Zihao <all_but_last@163.com>
;;; Copyright © 2022 Sharlatan Hellseher <sharlatanus@gmail.com>
;;; Copyright © 2022 Philip McGrath <philip@philipmcgrath.com>
;;; Copyright © 2022 Marek Felšöci <marek@felsoci.sk>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 3735,7 3736,7 @@ language understood by many solvers.")
(define-public mumps
  (package
    (name "mumps")
    (version "5.2.1")
    (version "5.5.1")
    (source
     (origin
       (method url-fetch)


@@ 3743,11 3744,7 @@ language understood by many solvers.")
                           version ".tar.gz"))
       (sha256
        (base32
         "0jklh54x4y3ik1zkw6db7766kakjm5910diyaghfxxf8vwsgr26r"))
       (patches (search-patches "mumps-build-parallelism.patch"
                                "mumps-shared-libseq.patch"
                                "mumps-shared-mumps.patch"
                                "mumps-shared-pord.patch"))))
         "05gs2i8b76m9flm1826fxpyfnwibjjawbmfza3ylrvj7zaag5gqs"))))
    (build-system gnu-build-system)
    (inputs
     (list gfortran


@@ 3764,58 3761,71 @@ language understood by many solvers.")
       #:phases
       (modify-phases %standard-phases
         (replace 'configure
          (lambda* (#:key inputs #:allow-other-keys)
          (lambda* (#:key inputs outputs #:allow-other-keys)
            (call-with-output-file "Makefile.inc"
              (lambda (port)
                (format port "
PLAT         =
LIBEXT       = .a
OUTC         = -o
OUTF         = -o
RM           = rm -f~:[
CC           = gcc
FC           = gfortran
FL           = gfortran
INCSEQ       = -I$(topdir)/libseq
LIBSEQ       = $(topdir)/libseq/libmpiseq.a
LIBSEQNEEDED = libseqneeded~;
CC           = mpicc
FC           = mpifort
FL           = mpifort~]
AR           = ar vr # rules require trailing space, ugh...
RANLIB       = ranlib
BLASDIR      = ~a
LIBBLAS      = -Wl,-rpath=$(BLASDIR) -Wl,-rpath='$$ORIGIN' -L$(BLASDIR) -lopenblas~@[
SCALAPDIR    = ~a
SCALAP       = -Wl,-rpath=$(SCALAPDIR) -Wl,-rpath='$$ORIGIN' -L$(SCALAPDIR) -lscalapack~]
LIBOTHERS    = -pthread
CDEFS        = -DAdd_
PIC          = -fPIC
OPTF         = -O2 -DALLOW_NON_INIT -fallow-argument-mismatch $(PIC)
OPTL         = -O2 $(PIC)
OPTC         = -O2 $(PIC)
INCS         = $(INCSEQ)
LIBS         = $(SCALAP) $(LIBSEQ)
LPORDDIR     = $(topdir)/PORD/lib
IPORD        = -I$(topdir)/PORD/include
LPORD        = $(LPORDDIR)/libpord.a
ORDERINGSF   = -Dpord~@[
METISDIR     = ~a
IMETIS       = -I$(METISDIR)/include
LMETIS       = -Wl,-rpath $(METISDIR)/lib -L$(METISDIR)/lib -lmetis
ORDERINGSF  += -Dmetis~]~@[~:{
SCOTCHDIR    = ~a
ISCOTCH      = -I$(SCOTCHDIR)/include
LSCOTCH      = -Wl,-rpath $(SCOTCHDIR)/lib -L$(SCOTCHDIR)/lib ~a-lesmumps -lscotch -lscotcherr
ORDERINGSF  += ~a~}~]
ORDERINGSC   = $(ORDERINGSF)
LORDERINGS   = $(LPORD) $(LMETIS) $(LSCOTCH) $(LIBSEQ)
IORDERINGSF  = $(ISCOTCH)
IORDERINGSC  = $(IPORD) $(IMETIS) $(ISCOTCH)"
                        (->bool (which "mpicc"))  ;MPI support enabled?
                        (dirname
                         (dirname (search-input-file inputs "/include/cblas.h")))
PLAT          =
LIBEXT        = .a
LIBEXT_SHARED = .so
OUTC          = -o
OUTF          = -o
BLASDIR       = ~a
LIBBLAS       = -Wl,-rpath=$(BLASDIR)/lib -Wl,-rpath='$$ORIGIN'
LIBBLAS      += -L$(BLASDIR)/lib
LIBBLAS      += -lopenblas~@[
SCALAPDIR     = ~a
SCALAP        = -Wl,-rpath=$(SCALAPDIR)/lib -Wl,-rpath='$$ORIGIN'
SCALAP       += -L$(SCALAPDIR)/lib -lscalapack~]
RM            = rm -f~:[
CC            = gcc
FC            = gfortran
FL            = gfortran
INCSEQ        = -I$(topdir)/libseq
LIBSEQ        = $(LAPACK) -L$(topdir)/libseq -lmpiseq
LIBSEQNEEDED  = libseqneeded
INCS          = $(INCSEQ)
LIBS          = $(LIBSEQ)~;
CC            = mpicc
FC            = mpifort
FL            = mpifort
INCPAR        =
LIBPAR        = $(SCALAP) $(LAPACK)
LIBSEQNEEDED  = 
INCS          = $(INCPAR)
LIBS          = $(LIBPAR)~]
AR            = ar vr # rules require trailing space, ugh...
RANLIB        = ranlib
LIBOTHERS     = -pthread
CDEFS         = -DAdd_
PIC           = -fPIC
FPIC_OPT      = $(PIC)
RPATH_OPT     = -Wl,-rpath,~a/lib
OPTF          = -O2 -fopenmp -DALLOW_NON_INIT -DBLR_MT
OPTF         += -fallow-argument-mismatch $(PIC)
OPTL          = -O2 -fopenmp $(PIC)
OPTC          = -O2 -fopenmp $(PIC)
LPORDDIR      = $(topdir)/PORD/lib
IPORD         = -I$(topdir)/PORD/include
LPORD         = $(LPORDDIR)/libpord.a
ORDERINGSF    = -Dpord~@[
METISDIR      = ~a
IMETIS        = -I$(METISDIR)/include
LMETIS        = -Wl,-rpath $(METISDIR)/lib -L$(METISDIR)/lib -lmetis
ORDERINGSF   += -Dmetis~]~@[~:{
SCOTCHDIR     = ~a
ISCOTCH       = -I$(SCOTCHDIR)/include
LSCOTCH       = -Wl,-rpath $(SCOTCHDIR)/lib -L$(SCOTCHDIR)/lib ~a -lesmumps
LSCOTCH      += -lscotch -lscotcherr
ORDERINGSF   += ~a~}~]
ORDERINGSC    = $(ORDERINGSF)
LORDERINGS    = $(LPORD) $(LMETIS) $(LSCOTCH)
IORDERINGSF   = $(ISCOTCH)
IORDERINGSC   = $(IPORD) $(IMETIS) $(ISCOTCH)"
                        (assoc-ref inputs "openblas")
                        (assoc-ref inputs "scalapack")
                        (->bool (which "mpicc"))  ;; MPI support enabled?
                        (assoc-ref outputs "out")
                        (assoc-ref inputs "metis")
                        (match (list (assoc-ref inputs "pt-scotch")
                                     (assoc-ref inputs "scotch"))


@@ 3828,11 3838,14 @@ IORDERINGSC  = $(IPORD) $(IMETIS) $(ISCOTCH)"
                              "-lesmumps -lptscotch -lptscotcherr "
                              "-Dptscotch")))))))))
         (replace 'build
          ;; By default only the d-precision library is built.  Make with "all"
          ;; target so that all precision libraries and examples are built.
          (lambda _
            (invoke "make" "all"
                    (format #f "-j~a" (parallel-job-count)))))
           ;; By default only the d-precision library is built. Make with "all"
           ;; target so that all precision libraries and examples are built.
           ;; Then, "make allshared" builts equivalent shared libraries as well.
           (lambda _
             (invoke "make" "all"
                     (format #f "-j~a" (parallel-job-count)))
             (invoke "make" "allshared"
                     (format #f "-j~a" (parallel-job-count)))))
         (replace 'check
          ;; Run the simple test drivers, which read test input from stdin:
          ;; from the "real" input for the single- and double-precision

D gnu/packages/patches/mumps-build-parallelism.patch => gnu/packages/patches/mumps-build-parallelism.patch +0 -13
@@ 1,13 0,0 @@
Building sublibraries in parallel can lead to race conditions on the libseq
and lipord targets.

--- MUMPS_5.0.0/Makefile.orig	2015-06-15 10:08:54.523146562 -0500
+++ MUMPS_5.0.0/Makefile	2015-06-15 10:19:44.074367512 -0500
@@ -11,6 +11,7 @@
 	sexamples dexamples cexamples zexamples \
 	mumps_lib requiredobj libseqneeded clean
 
+.NOTPARALLEL:
 alllib:		c z s d
 all:		cexamples zexamples sexamples dexamples
 

D gnu/packages/patches/mumps-shared-libseq.patch => gnu/packages/patches/mumps-shared-libseq.patch +0 -42
@@ 1,42 0,0 @@
Create a shared version of the sequential library, MUST BE LAST IN SERIES

Index: mumps/libseq/Makefile
===================================================================
--- mumps.orig/libseq/Makefile
+++ mumps/libseq/Makefile
@@ -8,15 +8,17 @@ all: libmpiseq
 
 include ../Makefile.inc
 
-libmpiseq: libmpiseq$(PLAT)$(LIBEXT)
+libmpiseq: libmpiseq$(PLAT).a libmpiseq$(PLAT).so
 
-libmpiseq$(PLAT)$(LIBEXT): mpi.o mpic.o elapse.o
-	$(AR)$@ mpi.o mpic.o elapse.o
+libmpiseq$(PLAT).a: 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,-soname,libmpiseq$(PLAT)-5.2.1.so -o libmpiseq$(PLAT)-5.2.1.so -Wl,-z,defs
 .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)
+	$(RM) *.o *.a *.so
Index: mumps/Makefile
===================================================================
--- mumps.orig/Makefile
+++ mumps/Makefile
@@ -60,6 +60,7 @@ requiredobj: Makefile.inc $(LIBSEQNEEDED
 
 libseqneeded:
 	(cd libseq; $(MAKE))
+	cp libseq/lib* $(libdir)
 
 # Build the libpord.a library and copy it into $(topdir)/lib
 $(libdir)/libpord$(PLAT).a:

D gnu/packages/patches/mumps-shared-mumps.patch => gnu/packages/patches/mumps-shared-mumps.patch +0 -63
@@ 1,63 0,0 @@
Create a shared version of the MUMPS library.

Index: mumps/src/Makefile
===================================================================
--- mumps.orig/src/Makefile
+++ mumps/src/Makefile
@@ -23,8 +23,10 @@ z:
 
 include $(topdir)/Makefile.inc
 
-mumps_lib:    $(libdir)/libmumps_common$(PLAT)$(LIBEXT) \
-              $(libdir)/lib$(ARITH)mumps$(PLAT)$(LIBEXT)
+mumps_lib:    $(libdir)/libmumps_common$(PLAT).a \
+              $(libdir)/libmumps_common$(PLAT).so \
+              $(libdir)/lib$(ARITH)mumps$(PLAT).a \
+              $(libdir)/lib$(ARITH)mumps$(PLAT).so
 
 OBJS_COMMON_MOD = \
         lr_common.o \
@@ -167,14 +169,22 @@ OBJS_OTHER = \
         $(ARITH)tools.o\
         $(ARITH)type3_root.o
 
-$(libdir)/libmumps_common$(PLAT)$(LIBEXT):      $(OBJS_COMMON_MOD) $(OBJS_COMMON_OTHER)
-	$(AR)$@ $?
+$(libdir)/libmumps_common$(PLAT).a:      $(OBJS_COMMON_MOD) $(OBJS_COMMON_OTHER)
+	$(AR) $@ $?
 	$(RANLIB) $@
 
-$(libdir)/lib$(ARITH)mumps$(PLAT)$(LIBEXT):    $(OBJS_MOD) $(OBJS_OTHER)
-	$(AR)$@ $?
+$(libdir)/libmumps_common$(PLAT).so:      $(OBJS_COMMON_MOD) $(OBJS_COMMON_OTHER)
+	$(FC) -shared $^ -Wl,-soname,libmumps_common$(PLAT)-5.2.1.so -L$(libdir) $(LORDERINGS) -lpthread $(MPIFLIB) $(MPICLIB) $(LEXTRAS) -o $(libdir)/libmumps_common$(PLAT)-5.2.1.so -Wl,-z,defs
+	ln -s libmumps_common$(PLAT)-5.2.1.so $@
+
+$(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)-5.2.1.so -L$(libdir) -lmumps_common$(PLAT) $(LORDERINGS) $(MPIFLIB) $(LEXTRAS) $(LIBBLAS) $(SCALAP) $(LAPACK) -o $(libdir)/lib$(ARITH)mumps$(PLAT)-5.2.1.so -Wl,-z,defs
+	ln -s lib$(ARITH)mumps$(PLAT)-5.2.1.so $@
+
 # Dependencies between modules:
 $(ARITH)mumps_load.o:		$(ARITH)mumps_comm_buffer.o \
 				$(ARITH)mumps_struc_def.o \
@@ -290,13 +300,13 @@ $(OBJS_OTHER):$(OBJS_COMMON_MOD) $(OBJS_
 
 .SUFFIXES: .c .F .o
 .F.o:
-	$(FC) $(OPTF) $(INCS) $(IORDERINGSF) $(ORDERINGSF) -I. -I../include -c $*.F $(OUTF)$*.o
+	$(FC) $(OPTF) $(INCS) $(IORDERINGSF) $(ORDERINGSF) -I. -I../include -fPIC -c $*.F $(OUTF)$*.o
 .c.o:
-	$(CC) $(OPTC) $(INCS) -I../include $(CDEFS) $(IORDERINGSC) $(ORDERINGSC) -c $*.c $(OUTC)$*.o
+	$(CC) $(OPTC) $(INCS) -I../include $(CDEFS) $(IORDERINGSC) $(ORDERINGSC) -fPIC -c $*.c $(OUTC)$*.o
 
 $(ARITH)mumps_c.o:	mumps_c.c
 	$(CC) $(OPTC) $(INCS) $(CDEFS) -DMUMPS_ARITH=MUMPS_ARITH_$(ARITH) \
-	      $(IORDERINGSC) $(ORDERINGSC) -I../include -c mumps_c.c $(OUTC)$@
+	      $(IORDERINGSC) $(ORDERINGSC) -I../include -fPIC -c mumps_c.c $(OUTC)$@
 
 
 clean:

D gnu/packages/patches/mumps-shared-pord.patch => gnu/packages/patches/mumps-shared-pord.patch +0 -77
@@ 1,77 0,0 @@
Create static and shared versions of the PORD library.

Index: mumps/PORD/lib/Makefile
===================================================================
--- mumps.orig/PORD/lib/Makefile
+++ mumps/PORD/lib/Makefile
@@ -9,7 +9,7 @@
 
 INCLUDES = -I../include
 
-COPTIONS = $(INCLUDES) $(CFLAGS) $(OPTFLAGS)
+COPTIONS = $(INCLUDES) $(CFLAGS) $(OPTFLAGS) -fPIC
 
 OBJS = graph.o gbipart.o gbisect.o ddcreate.o ddbisect.o nestdiss.o \
        multisector.o gelim.o bucket.o tree.o \
@@ -24,12 +24,16 @@ OBJS = graph.o gbipart.o gbisect.o ddcre
 .c.o:
 	$(CC) $(COPTIONS) -c $*.c $(OUTC)$*.o
 
-libpord$(LIBEXT):$(OBJS)
-	$(AR)$@ $(OBJS)
+libpord$(PLAT).a:$(OBJS)
+	$(AR) $@ $(OBJS)
 	$(RANLIB) $@
 
+libpord$(PLAT).so: $(OBJS)
+	$(CC) -shared $(OBJS) -Wl,-soname,libpord$(PLAT)-5.2.1.so -o libpord$(PLAT)-5.2.1.so -Wl,-z,defs
+	ln -s libpord$(PLAT)-5.2.1.so $@
+
 clean:
 	rm -f *.o
 
 realclean:
-	rm -f *.o libpord.a
+	rm -f *.o libpord*.a *.so
Index: mumps/Makefile
===================================================================
--- mumps.orig/Makefile
+++ mumps/Makefile
@@ -54,7 +54,7 @@ dexamples:	d
 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,25 @@ libseqneeded:
 	(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; \