mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-25 05:48:07 -05:00
gnu: mumps: Build and install shared libraries.
* gnu/packages/patches/mumps-shared-libseq.patch, gnu/packages/patches/mumps-shared-mumps.patch, gnu/packages/patches/mumps-shared-pord.patch: New files. * gnu/local.mk (dist_patch_DATA): Add them. * gnu/packages/maths.scm (mumps)[source](patches): Add them. [arguments]: In 'configure' phase, adjust "Makefile.inc" for shared library support. In 'install' phase, install libmpiseq.so when it exists. Co-authored-by: Ludovic Courtès <ludovic.courtes@inria.fr>
This commit is contained in:
parent
5dbc79eb60
commit
06e1239502
5 changed files with 200 additions and 8 deletions
|
@ -1132,6 +1132,9 @@ dist_patch_DATA = \
|
|||
%D%/packages/patches/mtools-mformat-uninitialized.patch \
|
||||
%D%/packages/patches/mumble-1.2.19-abs.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/mutt-store-references.patch \
|
||||
|
|
|
@ -2180,7 +2180,10 @@ (define-public mumps
|
|||
(sha256
|
||||
(base32
|
||||
"0jklh54x4y3ik1zkw6db7766kakjm5910diyaghfxxf8vwsgr26r"))
|
||||
(patches (search-patches "mumps-build-parallelism.patch"))))
|
||||
(patches (search-patches "mumps-build-parallelism.patch"
|
||||
"mumps-shared-libseq.patch"
|
||||
"mumps-shared-mumps.patch"
|
||||
"mumps-shared-pord.patch"))))
|
||||
(build-system gnu-build-system)
|
||||
(inputs
|
||||
`(("fortran" ,gfortran)
|
||||
|
@ -2210,15 +2213,17 @@ (define-public mumps
|
|||
FC = gfortran
|
||||
FL = gfortran
|
||||
INCSEQ = -I$(topdir)/libseq
|
||||
LIBSEQ = -L$(topdir)/libseq -lmpiseq
|
||||
LIBSEQ = $(topdir)/libseq/libmpiseq.a
|
||||
LIBSEQNEEDED = libseqneeded~;
|
||||
CC = mpicc
|
||||
FC = mpifort
|
||||
FL = mpifort~]
|
||||
AR = ar vr # rules require trailing space, ugh...
|
||||
RANLIB = ranlib
|
||||
LIBBLAS = -L~a -lopenblas~@[
|
||||
SCALAP = -L~a -lscalapack~]
|
||||
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
|
||||
|
@ -2229,18 +2234,18 @@ (define-public mumps
|
|||
LIBS = $(SCALAP) $(LIBSEQ)
|
||||
LPORDDIR = $(topdir)/PORD/lib
|
||||
IPORD = -I$(topdir)/PORD/include
|
||||
LPORD = -L$(LPORDDIR) -lpord
|
||||
LPORD = $(LPORDDIR)/libpord.a
|
||||
ORDERINGSF = -Dpord~@[
|
||||
METISDIR = ~a
|
||||
IMETIS = -I$(METISDIR)/include
|
||||
LMETIS = -L$(METISDIR)/lib -lmetis
|
||||
LMETIS = -Wl,-rpath $(METISDIR)/lib -L$(METISDIR)/lib -lmetis
|
||||
ORDERINGSF += -Dmetis~]~@[~:{
|
||||
SCOTCHDIR = ~a
|
||||
ISCOTCH = -I$(SCOTCHDIR)/include
|
||||
LSCOTCH = -L$(SCOTCHDIR)/lib ~a-lesmumps -lscotch -lscotcherr
|
||||
LSCOTCH = -Wl,-rpath $(SCOTCHDIR)/lib -L$(SCOTCHDIR)/lib ~a-lesmumps -lscotch -lscotcherr
|
||||
ORDERINGSF += ~a~}~]
|
||||
ORDERINGSC = $(ORDERINGSF)
|
||||
LORDERINGS = $(LPORD) $(LMETIS) $(LSCOTCH)
|
||||
LORDERINGS = $(LPORD) $(LMETIS) $(LSCOTCH) $(LIBSEQ)
|
||||
IORDERINGSF = $(ISCOTCH)
|
||||
IORDERINGSC = $(IPORD) $(IMETIS) $(ISCOTCH)"
|
||||
(assoc-ref inputs "mpi")
|
||||
|
@ -2294,6 +2299,8 @@ (define-public mumps
|
|||
(copy-recursively "include" (string-append out "/include"))
|
||||
(when (file-exists? "libseq/libmpiseq.a")
|
||||
(install-file "libseq/libmpiseq.a" libdir))
|
||||
(when (file-exists? "libseq/libmpiseq.so")
|
||||
(install-file "libseq/libmpiseq.so" libdir))
|
||||
#t))))))
|
||||
(home-page "http://mumps.enseeiht.fr")
|
||||
(synopsis "Multifrontal sparse direct solver")
|
||||
|
|
42
gnu/packages/patches/mumps-shared-libseq.patch
Normal file
42
gnu/packages/patches/mumps-shared-libseq.patch
Normal file
|
@ -0,0 +1,42 @@
|
|||
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.1.2.so -o libmpiseq$(PLAT)-5.1.2.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:
|
63
gnu/packages/patches/mumps-shared-mumps.patch
Normal file
63
gnu/packages/patches/mumps-shared-mumps.patch
Normal file
|
@ -0,0 +1,63 @@
|
|||
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.1.2.so -L$(libdir) $(LORDERINGS) -lpthread $(MPIFLIB) $(MPICLIB) $(LEXTRAS) -o $(libdir)/libmumps_common$(PLAT)-5.1.2.so -Wl,-z,defs
|
||||
+ ln -s libmumps_common$(PLAT)-5.1.2.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.1.2.so -L$(libdir) -lmumps_common$(PLAT) $(LORDERINGS) $(MPIFLIB) $(LEXTRAS) $(LIBBLAS) $(SCALAP) $(LAPACK) -o $(libdir)/lib$(ARITH)mumps$(PLAT)-5.1.2.so -Wl,-z,defs
|
||||
+ ln -s lib$(ARITH)mumps$(PLAT)-5.1.2.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:
|
77
gnu/packages/patches/mumps-shared-pord.patch
Normal file
77
gnu/packages/patches/mumps-shared-pord.patch
Normal file
|
@ -0,0 +1,77 @@
|
|||
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.1.2.so -o libpord$(PLAT)-5.1.2.so -Wl,-z,defs
|
||||
+ ln -s libpord$(PLAT)-5.1.2.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; \
|
Loading…
Reference in a new issue