commit:     8b1d3fec410cc64f8815b76dd8d413777eb19d65
Author:     Alessandro Barbieri <lssndrbarbieri <AT> gmail <DOT> com>
AuthorDate: Sun Apr 25 01:01:06 2021 +0000
Commit:     Alessandro Barbieri <lssndrbarbieri <AT> gmail <DOT> com>
CommitDate: Sun Apr 25 01:01:06 2021 +0000
URL:        https://gitweb.gentoo.org/repo/proj/guru.git/commit/?id=8b1d3fec

sys-cluster/sionlib: new package

Package-Manager: Portage-3.0.18, Repoman-3.0.3
Signed-off-by: Alessandro Barbieri <lssndrbarbieri <AT> gmail.com>

 sys-cluster/sionlib/Manifest                  |   1 +
 sys-cluster/sionlib/files/respect-flags.patch | 134 ++++++++++++++++++++++++++
 sys-cluster/sionlib/metadata.xml              |  34 +++++++
 sys-cluster/sionlib/sionlib-1.7.6.ebuild      | 104 ++++++++++++++++++++
 4 files changed, 273 insertions(+)

diff --git a/sys-cluster/sionlib/Manifest b/sys-cluster/sionlib/Manifest
new file mode 100644
index 000000000..9046f5a2b
--- /dev/null
+++ b/sys-cluster/sionlib/Manifest
@@ -0,0 +1 @@
+DIST sionlib-1.7.6.tar.gz 486418 BLAKE2B 
885eb2012ec6da031f5ae8b093ee4f3e5bbe31c9b24a11576f2ad01b32ddd8a85051565034f0e6c756af51409fb89f9c79f80b35c8337f2dc7912cb9e54d909b
 SHA512 
afdd8520f489bc940edc51ffa636a25cad778de07bfbb21d2bd2ab767e57b16044990d85ef44d2e6482a376196f5c6a2a6f1a71556dd987f8094dd396a971d1c

diff --git a/sys-cluster/sionlib/files/respect-flags.patch 
b/sys-cluster/sionlib/files/respect-flags.patch
new file mode 100644
index 000000000..9ff5bd384
--- /dev/null
+++ b/sys-cluster/sionlib/files/respect-flags.patch
@@ -0,0 +1,134 @@
+diff '--color=auto' -ru a/config/determine-cc.sh b/config/determine-cc.sh
+--- a/config/determine-cc.sh   2021-04-25 01:09:35.175990108 +0200
++++ b/config/determine-cc.sh   2021-04-25 01:10:02.876433713 +0200
+@@ -1,7 +1,6 @@
+ #!/bin/sh
+ # determine what compiler is behind "cc" (and presumably "CC" and "ftn") 
wrapper
+ 
+-CC=`which cc 2>/dev/null`
+ COMP=
+ if [ -z "$CC" ]; then
+   echo "No 'cc' located!"
+diff '--color=auto' -ru a/config/select-compiler.sh b/config/select-compiler.sh
+--- a/config/select-compiler.sh        2021-04-25 01:09:35.175990108 +0200
++++ b/config/select-compiler.sh        2021-04-25 01:10:26.882817842 +0200
+@@ -9,7 +9,7 @@
+ CPS=""
+ COMP=""
+ 
+-GNU=`which gcc 2> /dev/null`
++GNU="${CC}"
+ if [ -n "${GNU}" ]
+ then
+   NCPS=`expr ${NCPS} + 1`
+diff '--color=auto' -ru a/config/select-mpi.sh b/config/select-mpi.sh
+--- a/config/select-mpi.sh     2021-04-25 01:09:35.175990108 +0200
++++ b/config/select-mpi.sh     2021-04-25 01:12:41.269962840 +0200
+@@ -76,7 +76,6 @@
+   if [ -z "${MPIS}" ]; then MPIS="${MPI}"; else MPIS="${MPIS}|${MPI}"; fi
+ fi
+ 
+-MPICC=`which mpicc 2> /dev/null`
+ if [ -n "${MPICC}" ]
+ then
+   FMPI=""
+@@ -86,7 +85,7 @@
+   MPIROOTDIR1=`dirname ${MBINDIR}`
+ 
+   echo "#include <mpi.h>" > conftest.c
+-  mpicc -E conftest.c | grep '/mpi.h"' | head -1 > mpiconf.txt
++  "${MPICC}" -E conftest.c | grep '/mpi.h"' | head -1 > mpiconf.txt
+   MINCDIR=`cat mpiconf.txt | sed -e 's#^.* "##' -e 's#/mpi.h".*##'`
+   if [ -n "${MINCDIR}" ]
+   then
+diff '--color=auto' -ru a/mf/Makefile.defs.linux-gomp 
b/mf/Makefile.defs.linux-gomp
+--- a/mf/Makefile.defs.linux-gomp      2021-04-25 01:09:35.119989211 +0200
++++ b/mf/Makefile.defs.linux-gomp      2021-04-25 01:52:32.378951608 +0200
+@@ -23,24 +23,19 @@
+ 
#------------------------------------------------------------------------------
+ # SIONlib General Settings
+ 
#------------------------------------------------------------------------------
+-OPTFLAGS = -g -O0 -Wall
++CFLAGS   += -std=c99 $(PFLAG) $(OPTFLAGS) -fPIC
+ 
+-CC       = gcc
+-CFLAGS   = -std=c99 $(PFLAG) $(OPTFLAGS) -fPIC
++CXXFLAGS += $(PFLAG) $(OPTFLAGS) -fPIC
+ 
+-CXX      = g++
+-CXXFLAGS = $(PFLAG) $(OPTFLAGS) -O3
+-
+-F77      = gfortran
+-FFLAGS   = $(PFLAG) $(OPTFLAGS)
++FFLAGS   += $(PFLAG) $(OPTFLAGS) -fPIC
+ 
+ F90      = $(F77)
+-F90FLAGS = $(PFLAG) $(OPTFLAGS) -ffree-form
++F90FLAGS += $(PFLAG) $(OPTFLAGS) -ffree-form -fPIC $(FCFLAGS)
+ 
+ FPP      =
+ FDOPT    = -D
+ 
+-LDFLAGS  = $(PFLAG) $(OPTFLAGS) $(HINTSLIB)
++LDFLAGS  += $(PFLAG) $(OPTFLAGS) $(HINTSLIB)
+ UTILLIB  =
+ FOBASE   = pomp_fwrapper_base.o
+ 
+@@ -101,10 +96,6 @@
+ 
#------------------------------------------------------------------------------
+ 
+ MPIENABLE = 1
+-MPICC     = mpicc
+-MPICXX    = mpicxx
+-MPIF77    = mpif77
+-MPIF90    = mpif90
+ MPILIB    = -lmpich
+ PMPILIB   = -lpmpich
+ #PMPILIB   = # MPICH2
+@@ -139,8 +130,7 @@
+ 
#------------------------------------------------------------------------------
+ 
+ SZLIB          = szlib
+-SZLIB_OPTFLAGS = -O3
+-SZLIB_CFLAGS   = -I$(TOPDIR)/utils/szlib -DELG_COMPRESSED -DCUBE_COMPRESSED
++SZLIB_CFLAGS   = -I$(TOPDIR)/utils/szlib -DELG_COMPRESSED -DCUBE_COMPRESSED 
$(CFLAGS)
+ SZLIB_LIBPATH  = -L$(TOPDIR)/utils/szlib
+ SZLIB_LIB      = -lsc.z
+ 
+diff '--color=auto' -ru a/src/fortraninterface/Makefile 
b/src/fortraninterface/Makefile
+--- a/src/fortraninterface/Makefile    2021-04-25 01:09:35.141989563 +0200
++++ b/src/fortraninterface/Makefile    2021-04-25 01:23:48.055976593 +0200
+@@ -109,7 +110,7 @@
+       $(CPP) $(F90FLAGS) $(F90FLAGS_CPP) -P -E -I ../lib sion_f90.F90 > 
sion_f90.f90
+ sion_f90.mod : sion_f90.o
+ sion_f90.o : sion_f90.f90 sion_f77.h $(SION_HDRS)
+-      $(F90) -c sion_f90.f90
++      $(F90) $(F90FLAGS) -c sion_f90.f90
+ 
+ sion_f90_omp.o: sion_f90.o
+ sion_f90_mpi.o: sion_f90.o
+@@ -121,21 +122,21 @@
+       $(CPP) $(F90FLAGS) $(F90FLAGS_CPP) $(F90MPIFLAGS) -P -E -I ../lib 
sion_f90_mpi.F90 > sion_f90_mpi.f90
+ sion_f90_mpi.mod : sion_f90_mpi.o
+ sion_f90_mpi.o : sion_f90_mpi.f90 sion_f90.mod $(SION_HDRS)
+-      $(MPIF90) -c sion_f90_mpi.f90
++      $(MPIF90) $(F90FLAGS) $(F90MPIFLAGS) -c sion_f90_mpi.f90
+ 
+ # F90 Interface (OMP)
+ sion_f90_omp.f90: sion_f90_omp.F90
+       $(CPP) $(F90OMPFLAGS) $(F90FLAGS) $(F90FLAGS_CPP) -P -E -I ../lib 
sion_f90_omp.F90 > sion_f90_omp.f90
+ sion_f90_omp.mod : sion_f90_omp.o 
+ sion_f90_omp.o : sion_f90_omp.f90 sion_f90.mod $(SION_HDRS)
+-      $(OMPF90) -c sion_f90_omp.f90
++      $(OMPF90) $(F90FLAGS) $(F90OMPFLAGS) -c sion_f90_omp.f90
+ 
+ # F90 Interface (OMPI)
+ sion_f90_ompi.f90: sion_f90_ompi.F90 $(SION_HDRS)
+       $(CPP) $(F90MPIFLAGS) $(F90OMPFLAGS) $(F90FLAGS) $(F90FLAGS_CPP) -P -E 
-I ../lib sion_f90_ompi.F90 > sion_f90_ompi.f90
+ sion_f90_ompi.mod : sion_f90_ompi.o
+ sion_f90_ompi.o : sion_f90_ompi.f90 $(SION_HDRS)
+-      $(MPIF90) -c sion_f90_ompi.f90
++      $(MPIF90) $(F90FLAGS) $(F90MPIFLAGS) -c sion_f90_ompi.f90
+ 
+ 
+ 

diff --git a/sys-cluster/sionlib/metadata.xml b/sys-cluster/sionlib/metadata.xml
new file mode 100644
index 000000000..2c7649717
--- /dev/null
+++ b/sys-cluster/sionlib/metadata.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd";>
+<pkgmetadata>
+       <maintainer type="person">
+               <email>lssndrbarbi...@gmail.com</email>
+               <name>Alessandro Barbieri</name>
+       </maintainer>
+       <longdescription>
+SIONlib is a library for writing and reading data from several thousands of 
parallel tasks into/from one or a small number of physical files. Only the open 
and close functions are collective while file access can be performed 
independently.
+
+SIONlib can be used as a replacement for standard I/O APIs (e.g. POSIX) that 
are used to access distinct files from every parallel process. SIONlib will 
bundle the data into one or few files in a coordinated fashion in order to 
sidestep sequentialising mechanism in the file system. At the same time, the 
task-per-file picture is maintained for the application, every process has 
access to its logical file only. File access is performed using SIONlib 
equivalents to standard C-I/O functionality (fwrite becomes sion_write, fseek 
becomes sion_seek, etc.) which have similar semantics as their C counterparts.
+
+Internally, the physical files are sub-divided into sequences of blocks, which 
themselves contain one chunk of data belonging to every logical file. In case 
the amount to be written to a file is known up front, it can optionally be 
specified when opening the file and the sequence of blocks collapses into a 
single block with one chunk per task containing all of its data. If a chunk 
size cannot be specified ahead of time, a sensible default is chosen and reads 
and writes that cross chunk boundaries are handled transparently by SIONlib.
+
+SIONlib also uses information about the block size of the underlying file 
system, because access to the same block from different tasks often leads to 
contention.
+
+Both, the estimated chunk size and file system block size are used to align 
individual chunks with file system blocks. Ensuring contention-free access to 
file system blocks enables efficient parallel writing and reading.
+
+SIONlib provides two different interfaces: one for parallel access (with 
implementations for different parallel programming technologies such as MPI, 
OpenMP and hybrid MPI+OpenMP) and one for sequential access which is also used 
internally by the SIONlib utilities.
+       </longdescription>
+       <use>
+               <!--<flag name="cuda">enable CUDA aware interface</flag>-->
+               <flag name="cxx">Disable C++ support</flag>
+               <flag name="debug">enable SIONlib debug</flag>
+               <flag name="fortran">Enable Fortran support</flag>
+               <flag name="mpi">enable mpi</flag>
+               <flag name="python">enable python support</flag>
+               <flag name="ompi">enable hybrid openmp mpi</flag>
+               <flag name="openmp">enable openmp</flag>
+               <flag name="parutils">Enable compilation of parutils (used for 
benchmarking)</flag>
+               <flag name="pthreads">configure SIONlib to use pthreads for 
locking</flag>
+               <!--<flag name="sionfwd">enable I/O forwarding with 
SIONfwd</flag>-->
+       </use>
+</pkgmetadata>

diff --git a/sys-cluster/sionlib/sionlib-1.7.6.ebuild 
b/sys-cluster/sionlib/sionlib-1.7.6.ebuild
new file mode 100644
index 000000000..e1959dcc2
--- /dev/null
+++ b/sys-cluster/sionlib/sionlib-1.7.6.ebuild
@@ -0,0 +1,104 @@
+# Copyright 2019-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+FORTRAN_NEEDED="fortran"
+PYTHON_COMPAT=( pypy3 python3_{7,8,9} )
+inherit flag-o-matic fortran-2 python-any-r1 toolchain-funcs
+
+DESCRIPTION="Scalable I/O library for parallel access to task-local files"
+HOMEPAGE="https://www.fz-juelich.de/ias/jsc/EN/Expertise/Support/Software/SIONlib/_node.html";
+SRC_URI="http://apps.fz-juelich.de/jsc/sionlib/download.php?version=${PV} -> 
${P}.tar.gz"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64"
+IUSE="+cxx debug doc +fortran +mpi +ompi +openmp +parutils +pthreads python"
+#TODO: cuda sionfwd msa
+#--enable-sionfwd=/path/to/sionfwd
+#--msa=(hostname-regex|deep-est-sdv)]  MSA aware collective operations for the 
given system
+
+PATCHES=( "${FILESDIR}/respect-flags.patch" )
+
+RDEPEND="
+       ${PYTHON_DEPS}
+       mpi? ( virtual/mpi )
+       ompi? (
+               sys-libs/libomp
+               virtual/mpi
+       )
+       openmp? ( sys-libs/libomp )
+"
+DEPEND="${RDEPEND}"
+BDEPEND="doc? ( app-doc/doxygen )"
+S="${WORKDIR}/${PN}"
+
+pkg_setup() {
+       FORTRAN_NEED_OPENMP=0
+       use openmp && FORTRAN_NEED_OPENMP=1
+       use ompi && FORTRAN_NEED_OPENMP=1
+
+       fortran-2_pkg_setup
+}
+
+src_configure() {
+       export AR=$(tc-getAR)
+       export CC=$(tc-getCC)
+       export CXX=$(tc-getCXX)
+       export MPICC=/usr/bin/mpicc
+       export MPICXX=/usr/bin/mpicxx
+       export MPIF77=/usr/bin/mpif77
+       export MPIF90=/usr/bin/mpif90
+       export F77=$(tc-getF77)
+       export F90=$(tc-getFC)
+       export OMPF77=$(tc-getF77)
+       export OMPF90=$(tc-getFC)
+
+       append-fflags -fallow-argument-mismatch
+
+       local myconf=(
+               --disable-mic
+               --prefix="${EPREFIX}/usr"
+       )
+
+       #custom configure?
+       use cxx || myconf+=( "--disable-cxx" )
+       use fortran || myconf+=( "--disable-fortran" )
+       use mpi || myconf+=( "--disable-mpi" )
+       use ompi || myconf+=( "--disable-ompi" )
+       use openmp || myconf+=( "--disable-omp" )
+       use parutils || myconf+=( "--disable-parutils" )
+       use pthreads || myconf+=( "--disable-pthreads" )
+
+       use debug && myconf+=( "--enable-debug" )
+       use python && myconf+=( "--enable-python=3" )
+
+       ./configure "${myconf[@]}" || die
+}
+
+src_compile() {
+       default
+       use doc && doxygen -u doxy && doxygen doxy || die
+}
+
+src_install() {
+       sed -e "s|\${PREFIX}|${D}/usr|g" -i mf/common.defs || die
+       sed -e "s|\$(PREFIX)|${D}/usr|g" -i src/utils/Makefile || die
+       sed \
+               -e "s|\$(PREFIX)|${D}/usr|g" \
+               -e "s|\${PREFIX}|${D}/usr|g" \
+               -i mf/RealMakefile || die
+
+       default
+
+       use doc && dodoc -r doc/html
+
+       mv "${ED}/usr/examples" "${ED}/usr/share/doc/${PF}/" || die
+       docompress -x "/usr/share/doc/${PF}/examples"
+       docompress -x "/usr/share/doc/${PF}/html"
+
+       #TODO: build shared libs
+       #find "${ED}" -name '*.a' -delete || die
+       find "${ED}" -name '*.la' -delete || die
+}

Reply via email to