commit: 0c995ec7d11c6abf50ca70b77c0e24b97bda83dd
Author: Alessandro Barbieri <lssndrbarbieri <AT> gmail <DOT> com>
AuthorDate: Sun Jul 25 18:24:30 2021 +0000
Commit: Alessandro Barbieri <lssndrbarbieri <AT> gmail <DOT> com>
CommitDate: Sun Jul 25 20:18:55 2021 +0000
URL: https://gitweb.gentoo.org/repo/proj/guru.git/commit/?id=0c995ec7
sys-cluster/sionlibl: initial import
Signed-off-by: Alessandro Barbieri <lssndrbarbieri <AT> gmail.com>
sys-cluster/sionlibl/Manifest | 1 +
.../sionlibl/files/sionlibl-respect-flags.patch | 120 +++++++++++++++++++++
sys-cluster/sionlibl/metadata.xml | 34 ++++++
sys-cluster/sionlibl/sionlibl-1.7.7.ebuild | 118 ++++++++++++++++++++
4 files changed, 273 insertions(+)
diff --git a/sys-cluster/sionlibl/Manifest b/sys-cluster/sionlibl/Manifest
new file mode 100644
index 000000000..8ce6ed0a6
--- /dev/null
+++ b/sys-cluster/sionlibl/Manifest
@@ -0,0 +1 @@
+DIST sionlibl-1.7.7.tar.gz 490515 BLAKE2B
76971dd6d80222144b40da345d58311911aab09c6a5250b85d4a2731d2f93cdbd39d87dd6bbafdeaba88f06603105076267f6956417916f118ec45e07fa59269
SHA512
6ef46a0905552c558595bf6b72225a290d73dc87fa33c9862de5e4bd4d683792437646f7b4ab8a463b4a50d1b4a79aec96a66e577e815de3f23e9274be2681af
diff --git a/sys-cluster/sionlibl/files/sionlibl-respect-flags.patch
b/sys-cluster/sionlibl/files/sionlibl-respect-flags.patch
new file mode 100644
index 000000000..a7ac351ea
--- /dev/null
+++ b/sys-cluster/sionlibl/files/sionlibl-respect-flags.patch
@@ -0,0 +1,120 @@
+--- a/config/determine-cc.sh
++++ b/config/determine-cc.sh
+@@ -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!"
+--- a/config/select-compiler.sh
++++ b/config/select-compiler.sh
+@@ -9,7 +9,7 @@
+ CPS=""
+ COMP=""
+
+-GNU=`which gcc 2> /dev/null`
++GNU="${CC}"
+ if [ -n "${GNU}" ]
+ then
+ NCPS=`expr ${NCPS} + 1`
+--- a/config/select-mpi.sh
++++ b/config/select-mpi.sh
+@@ -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
+--- a/mf/Makefile.defs.linux-gomp
++++ b/mf/Makefile.defs.linux-gomp
+@@ -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
+
+--- a/src/fortraninterface/Makefile
++++ b/src/fortraninterface/Makefile
+@@ -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) $(F90FLAGS) -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) $(F90FLAGS) -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) $(F90FLAGS) -c sion_f90_ompi.f90
++ $(MPIF90) $(F90FLAGS) $(F90MPIFLAGS) -c sion_f90_ompi.f90
+
+
+
diff --git a/sys-cluster/sionlibl/metadata.xml
b/sys-cluster/sionlibl/metadata.xml
new file mode 100644
index 000000000..55c6754ef
--- /dev/null
+++ b/sys-cluster/sionlibl/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>[email protected]</email>
+ <name>Alessandro Barbieri</name>
+ </maintainer>
+ <longdescription lang="en">
+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/sionlibl/sionlibl-1.7.7.ebuild
b/sys-cluster/sionlibl/sionlibl-1.7.7.ebuild
new file mode 100644
index 000000000..45b166425
--- /dev/null
+++ b/sys-cluster/sionlibl/sionlibl-1.7.7.ebuild
@@ -0,0 +1,118 @@
+# Copyright 2019-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DOCS_BUILDER="doxygen"
+DOCS_CONFIG_NAME="doxy"
+FORTRAN_NEEDED="fortran"
+PYTHON_COMPAT=( pypy3 python3_{8..10} )
+
+inherit docs 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}l ->
${P}.tar.gz"
+S="${WORKDIR}/sionlib"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64"
+IUSE="+cxx debug doc examples +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}/${PN}-respect-flags.patch" )
+
+RDEPEND="
+ mpi? ( virtual/mpi )
+ ompi? (
+ || ( sys-devel/gcc:*[openmp] sys-libs/libomp )
+ virtual/mpi
+ )
+ openmp? ( || ( sys-devel/gcc:*[openmp] sys-libs/libomp ) )
+"
+DEPEND="
+ ${RDEPEND}
+ ${PYTHON_DEPS}
+"
+
+pkg_setup() {
+ FORTRAN_NEED_OPENMP=0
+ use openmp && FORTRAN_NEED_OPENMP=1
+ use ompi && FORTRAN_NEED_OPENMP=1
+
+ fortran-2_pkg_setup
+}
+
+src_prepare() {
+ default
+ sed 's/CXXFLAGS = $(CXXFLAGS)/CXXFLAGS = /' -i test/serial/Makefile ||
die
+ sed 's/`gcc/`${CC}/' -i config/determine-compiler-version.sh || die
+}
+
+src_configure() {
+ tc-export AR CC CXX F77 FC
+ export MPICC=/usr/bin/mpicc
+ export MPICXX=/usr/bin/mpicxx
+ export MPIF77=/usr/bin/mpif77
+ export MPIF90=/usr/bin/mpif90
+ export F90=$(tc-getFC)
+ export OMPF77=$(tc-getF77)
+ export OMPF90=$(tc-getFC)
+
+ append-fflags -fallow-argument-mismatch
+
+ local myconf=(
+ --disable-mic
+ --prefix="${T}/prefix/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() {
+ export VARTEXFONTS="${T}/fonts"
+ emake C_AR=$(tc-getAR) F90=$(tc-getFC)
+ docs_compile
+}
+
+src_install() {
+ mkdir -p "${T}/prefix/usr/share/doc/${PF}" || die
+ default
+
+ if use examples ; then
+ mv "${T}/prefix/usr/examples"
"${T}/prefix/usr/share/doc/${PF}/" || die
+ else
+ rm -r "${T}/prefix/usr/examples" || die
+ fi
+
+ # move 64 bit libraries to lib64
+ libs64=( "${T}"/prefix/usr/lib/*64* )
+ if [[ ${#libs64[@]} -gt 0 ]]; then
+ mkdir "${T}/prefix/usr/lib64" || die
+ for l in "${libs64[@]}" ; do
+ mv "${l}" "${T}/prefix/usr/lib64/" || die
+ done
+ fi
+
+ rsync -ravXHA "${T}/prefix/usr" "${ED}/" || die
+ docompress -x "/usr/share/doc/${PF}/examples"
+
+ #TODO: build shared libs
+ #find "${ED}" -name '*.a' -delete || die
+ find "${ED}" -name '*.la' -delete || die
+}