From ea4dbdc0e3b427eb797455dfda90e29a28d955a7 Mon Sep 17 00:00:00 2001 From: Alessandro Barbieri Date: Tue, 27 Jul 2021 00:14:54 +0200 Subject: [PATCH] sys-cluster/*: split sionlibl and make them co-installable Signed-off-by: Alessandro Barbieri --- sys-cluster/sionlib/Manifest | 1 - sys-cluster/sionlib/metadata.xml | 1 - ...b-1.7.7.ebuild => sionlib-1.7.7-r1.ebuild} | 15 +- sys-cluster/sionlibl/Manifest | 1 + .../files/sionlibl-respect-flags.patch | 120 ++++++++++++++++ sys-cluster/sionlibl/metadata.xml | 34 +++++ sys-cluster/sionlibl/sionlibl-1.7.7.ebuild | 132 ++++++++++++++++++ 7 files changed, 297 insertions(+), 7 deletions(-) rename sys-cluster/sionlib/{sionlib-1.7.7.ebuild => sionlib-1.7.7-r1.ebuild} (89%) create mode 100644 sys-cluster/sionlibl/Manifest create mode 100644 sys-cluster/sionlibl/files/sionlibl-respect-flags.patch create mode 100644 sys-cluster/sionlibl/metadata.xml create mode 100644 sys-cluster/sionlibl/sionlibl-1.7.7.ebuild diff --git a/sys-cluster/sionlib/Manifest b/sys-cluster/sionlib/Manifest index 8fc118f36b..2929984210 100644 --- a/sys-cluster/sionlib/Manifest +++ b/sys-cluster/sionlib/Manifest @@ -1,2 +1 @@ DIST sionlib-1.7.7.tar.gz 489080 BLAKE2B 1ffd06d1b245034b28700af1249135347cdd731a7af23ad96a27b5b5a11d64d9a67249fcd1c44cea43face1066e7ae1d59681e84cef2041e18f02e0c3e8f70ee SHA512 f270467e09893adf1af6103557365acbc9a3e73fe08716a21de6f59b25be9b187ee1c1ec1d878a9599e735f98da470b5e2e184774c27ed0ff0c330c5bf0a5677 -DIST sionlibl-1.7.7.tar.gz 490515 BLAKE2B 76971dd6d80222144b40da345d58311911aab09c6a5250b85d4a2731d2f93cdbd39d87dd6bbafdeaba88f06603105076267f6956417916f118ec45e07fa59269 SHA512 6ef46a0905552c558595bf6b72225a290d73dc87fa33c9862de5e4bd4d683792437646f7b4ab8a463b4a50d1b4a79aec96a66e577e815de3f23e9274be2681af diff --git a/sys-cluster/sionlib/metadata.xml b/sys-cluster/sionlib/metadata.xml index df4593cce9..32002cf2dc 100644 --- a/sys-cluster/sionlib/metadata.xml +++ b/sys-cluster/sionlib/metadata.xml @@ -30,6 +30,5 @@ SIONlib provides two different interfaces: one for parallel access (with impleme Enable compilation of parutils (used for benchmarking) configure SIONlib to use pthreads for locking - Build the tooling version instead diff --git a/sys-cluster/sionlib/sionlib-1.7.7.ebuild b/sys-cluster/sionlib/sionlib-1.7.7-r1.ebuild similarity index 89% rename from sys-cluster/sionlib/sionlib-1.7.7.ebuild rename to sys-cluster/sionlib/sionlib-1.7.7-r1.ebuild index e00956e3af..cd15e7ad68 100644 --- a/sys-cluster/sionlib/sionlib-1.7.7.ebuild +++ b/sys-cluster/sionlib/sionlib-1.7.7-r1.ebuild @@ -12,16 +12,13 @@ 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=" - !tools? ( http://apps.fz-juelich.de/jsc/sionlib/download.php?version=${PV} -> ${P}.tar.gz ) - tools? ( http://apps.fz-juelich.de/jsc/sionlib/download.php?version=${PV}l -> ${PN}l-${PV}.tar.gz ) -" +SRC_URI="http://apps.fz-juelich.de/jsc/sionlib/download.php?version=${PV} -> ${P}.tar.gz" S="${WORKDIR}/${PN}" LICENSE="BSD" SLOT="0" KEYWORDS="~amd64" -IUSE="+cxx debug doc examples +fortran +mpi +ompi +openmp +parutils +pthreads python tools" +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 @@ -103,6 +100,14 @@ src_install() { rm -r "${T}/prefix/usr/examples" || die fi + insinto "/usr/include/sionlib" + doins -r "${T}"/prefix/usr/include/* + rm -r "${T}/prefix/usr/include" || die + + exeinto "/usr/libexec/${PN}" + doexe "${T}"/prefix/usr/bin/*partest + rm "${T}"/prefix/usr/bin/*partest || die + # move 64 bit libraries to lib64 libs64=( "${T}"/prefix/usr/lib/*64* ) if [[ ${#libs64[@]} -gt 0 ]]; then diff --git a/sys-cluster/sionlibl/Manifest b/sys-cluster/sionlibl/Manifest new file mode 100644 index 0000000000..a16495014b --- /dev/null +++ b/sys-cluster/sionlibl/Manifest @@ -0,0 +1 @@ +DIST sionlibll-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..32002cf2dc --- /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. + + + + Enable 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..1e2156aa55 --- /dev/null +++ b/sys-cluster/sionlibl/sionlibl-1.7.7.ebuild @@ -0,0 +1,132 @@ +# 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 -> ${PN}l-${PV}.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 + + insinto "/usr/include/sionlibl" + doins -r "${T}"/prefix/usr/include/* + rm -r "${T}/prefix/usr/include" || die + + exeinto "/usr/libexec/${PN}" + doexe "${T}"/prefix/usr/bin/*partest + rm "${T}"/prefix/usr/bin/*partest || die + + for b in "${T}"/prefix/usr/bin/sion* ; do + n=$(basename "${b}") + newbin "${T}/prefix/usr/bin/${n}" "l${n}" + rm "${b}" || die + done + + # 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 +}