sys-cluster/sionlib: new package

Package-Manager: Portage-3.0.18, Repoman-3.0.3
Signed-off-by: Alessandro Barbieri <lssndrbarbieri@gmail.com>
This commit is contained in:
Alessandro Barbieri
2021-04-25 03:01:06 +02:00
parent 2f8fec9c5f
commit 8b1d3fec41
4 changed files with 273 additions and 0 deletions

View File

@@ -0,0 +1 @@
DIST sionlib-1.7.6.tar.gz 486418 BLAKE2B 885eb2012ec6da031f5ae8b093ee4f3e5bbe31c9b24a11576f2ad01b32ddd8a85051565034f0e6c756af51409fb89f9c79f80b35c8337f2dc7912cb9e54d909b SHA512 afdd8520f489bc940edc51ffa636a25cad778de07bfbb21d2bd2ab767e57b16044990d85ef44d2e6482a376196f5c6a2a6f1a71556dd987f8094dd396a971d1c

View File

@@ -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

View File

@@ -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>lssndrbarbieri@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>

View File

@@ -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
}