diff --git a/sys-cluster/sionlibl/Manifest b/sys-cluster/sionlibl/Manifest new file mode 100644 index 0000000000..8ce6ed0a66 --- /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 0000000000..a7ac351ea7 --- /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 " > 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 0000000000..55c6754ef0 --- /dev/null +++ b/sys-cluster/sionlibl/metadata.xml @@ -0,0 +1,34 @@ + + + + + lssndrbarbieri@gmail.com + Alessandro Barbieri + + +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. + + + + Disable C++ support + enable SIONlib debug + Enable Fortran support + enable mpi + enable python support + enable hybrid openmp mpi + enable openmp + Enable compilation of parutils (used for benchmarking) + configure SIONlib to use pthreads for locking + + + 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 0000000000..45b166425d --- /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 +}