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