sys-cluster/*: split sionlibl and make them co-installable

Signed-off-by: Alessandro Barbieri <lssndrbarbieri@gmail.com>
This commit is contained in:
Alessandro Barbieri
2021-07-27 00:14:54 +02:00
parent ef26f5fcea
commit ea4dbdc0e3
7 changed files with 297 additions and 7 deletions

View File

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

View File

@@ -30,6 +30,5 @@ SIONlib provides two different interfaces: one for parallel access (with impleme
<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>-->
<flag name="tools">Build the tooling version instead</flag>
</use>
</pkgmetadata>

View File

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

View File

@@ -0,0 +1 @@
DIST sionlibll-1.7.7.tar.gz 490515 BLAKE2B 76971dd6d80222144b40da345d58311911aab09c6a5250b85d4a2731d2f93cdbd39d87dd6bbafdeaba88f06603105076267f6956417916f118ec45e07fa59269 SHA512 6ef46a0905552c558595bf6b72225a290d73dc87fa33c9862de5e4bd4d683792437646f7b4ab8a463b4a50d1b4a79aec96a66e577e815de3f23e9274be2681af

View File

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

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 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">Enable 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,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
}