| tChanges by eDgar: use test_optdepends, remove patch - petsc-git-PKGBUILD - build template for non-complex PETSC with petsc4py |
| git clone git://src.adamsgaard.dk/petsc-git-PKGBUILD |
| Log |
| Files |
| Refs |
| --- |
| commit acf8ee6afcc1b738e1337c2901eeb948346c64d6 |
| parent b3de4b154ef9aa84493368218f6a96e13df17ed7 |
| Author: Lucas Heitzmann Gabrielli |
| Date: Tue, 12 May 2020 12:13:21 -0300
Changes by eDgar: use test_optdepends, remove patch
Diffstat:
M .SRCINFO | 30 +++++++++++++++++++++++++-----
M PKGBUILD | 134 ++++++++++++++++++++++---------
D patch.diff | 13 -------------
A test_optdepends.sh | 139 ++++++++++++++++++++++++++++++
4 files changed, 262 insertions(+), 54 deletions(-)
--- |
| diff --git a/.SRCINFO b/.SRCINFO |
| t@@ -1,6 +1,6 @@
pkgbase = petsc-git
- pkgdesc = Portable, extensible toolkit for scientific computation
- pkgver = 20191031
+ pkgdesc = Portable, extensible toolkit for scientific computation with MUMPS, Hypre, FFTW, HDF5, Scalapack, Suitesparse, Metis, Scotch, Superlu, OpenBLAS, Eigen, OpenMP, HWloc, CGNS, PNG, MED and trilinos
+ pkgver = 20200512
pkgrel = 1
url = https://www.mcs.anl.gov/petsc/
install = petsc.install
t@@ -10,18 +10,38 @@ pkgbase = petsc-git
makedepends = gcc
makedepends = gcc-fortran
makedepends = cmake
+ makedepends = sowing
depends = python2
depends = openmpi
depends = boost
depends = lapack
depends = fftw
depends = hdf5
+ optdepends = hdf5: large files
+ optdepends = fftw: Fast-Fourier Transform
+ optdepends = openblas: Linear algebra libraries
+ optdepends = scalapack: Parallel memory linear algebra
+ optdepends = mumps: Sparse solver library
+ optdepends = hypre: Large and sparse linear with massive parallel computing
+ optdepends = suitesparse: Sparse matrix library
+ optdepends = metis: Partitioning library (for meshes)
+ optdepends = scotch: Partitioning with sparse matrices
+ optdepends = superlu: Subroutines for sparsse linear systems
+ optdepends = eigen: Lightweight C++ template library for vector and matrix math
+ optdepends = openmp: Parallel distributed tasks
+ optdepends = hwloc: Portable Hardware Locality (abstraction of hierarchical architectures)
+ optdepends = cgns: Recording and recovering computer data
+ optdepends = png
+ optdepends = med>=4.0: Data Modelization and Exchanges (meshes)
+ optdepends = boost: Free peer-reviewed portable C++ source libraries
+ optdepends = yaml: configuration files
+ optdepends = opencl: GPU computing
provides = petsc
conflicts = petsc
- source = petsc::git+https://gitlab.com/petsc/petsc#branch=maint
- source = patch.diff
+ source = petsc::git+https://gitlab.com/petsc/petsc.git#branch=maint
+ source = test_optdepends.sh
sha256sums = SKIP
- sha256sums = fdf016437dd94f33316e734e35858476aeea1ca0f3ab4d0ee36029b016498de7
+ sha256sums = 2c21313b21b7a76ed4d39d040ef60462f8760ae3d4b76ff6aa717ebc43a2275b
pkgname = petsc-git
|
| diff --git a/PKGBUILD b/PKGBUILD |
| t@@ -1,25 +1,76 @@
+# Based on AUR petsc and petsc-git package. Adapted to my
+# MOOSE requirements
+
# Maintainer: Lucas H. Gabrielli
pkgname=petsc-git
-pkgver=20191031
+pkgver=20200512
pkgrel=1
_config=linux-c-opt
-pkgdesc="Portable, extensible toolkit for scientific computation"
+pkgdesc="Portable, extensible toolkit for scientific computation with MUMPS, Hypre, FFTW, HDF5, Scalapack, Suitesparse, Metis, Scotch, Superlu, OpenBLAS, Eigen, OpenMP, HWloc, CGNS, PNG, MED and trilinos"
provides=(petsc)
conflicts=(petsc)
arch=('i686' 'x86_64')
url="https://www.mcs.anl.gov/petsc/"
license=('BSD')
depends=('python2' 'openmpi' 'boost' 'lapack' 'fftw' 'hdf5')
-makedepends=('gcc' 'gcc-fortran' 'cmake')
+makedepends=('gcc' 'gcc-fortran' 'cmake' 'sowing')
+optdepends=("hdf5: large files"
+ "fftw: Fast-Fourier Transform"
+ "openblas: Linear algebra libraries"
+ "scalapack: Parallel memory linear algebra"
+ "mumps: Sparse solver library"
+ "hypre: Large and sparse linear with massive parallel computing"
+ "suitesparse: Sparse matrix library"
+ "metis: Partitioning library (for meshes)"
+ "scotch: Partitioning with sparse matrices"
+ "superlu: Subroutines for sparsse linear systems"
+ "eigen: Lightweight C++ template library for vector and matrix math"
+ "openmp: Parallel distributed tasks"
+ "hwloc: Portable Hardware Locality (abstraction of hierarchical architectures)"
+ "cgns: Recording and recovering computer data"
+ "png"
+ "med>=4.0: Data Modelization and Exchanges (meshes)"
+ "boost: Free peer-reviewed portable C++ source libraries"
+ "yaml: configuration files"
+ "opencl: GPU computing")
install=petsc.install
-source=(petsc::git+https://gitlab.com/petsc/petsc#branch=maint
- patch.diff)
+source=(petsc::git+https://gitlab.com/petsc/petsc.git#branch=maint
+ test_optdepends.sh)
sha256sums=('SKIP'
- 'fdf016437dd94f33316e734e35858476aeea1ca0f3ab4d0ee36029b016498de7')
+ '2c21313b21b7a76ed4d39d040ef60462f8760ae3d4b76ff6aa717ebc43a2275b')
_petsc_arch="arch-${_config}"
+#####################################################################
+# From UPC: Building And Using Static And Shared "C" Libraries.html #
+# #+begin_QUOTE #
+# we need that all jump calls ("goto", in assembly speak) #
+# and subroutine calls will use relative addresses, and not #
+# absolute addresses. Thus, we need to use ... ~-fPIC~ or #
+# ~-fpic~ #
+# #+end_QUOTE #
+#####################################################################
+###############################################################################
+# From makepkg.conf #
+# -march (or -mcpu) builds exclusively for an architecture #
+# -mtune optimizes for an architecture, but builds for whole processor family #
+###############################################################################
+# -O3 optimises
+generic_flags="-fPIC -fopenmp -O3 -march=x86-64 -mtune=generic"
+# generic_flags="-fPIC -fopenmp -O3 -march=amdfam10 -mtune=generic"
+
+export COPTFLAGS=-O3
+export CXXOPTFLAGS=-O3
+export FOPTFLAGS=-O3
+export CPPFLAGS="$generic_flags -O2 -D-FORTIFY-SOURCE=2"
+export CFLAGS="$generic_flags"
+export CXXFLAGS="$generic_flags"
+export FFLAGS="$generic_flags"
+export FCFLAGS="$generic_flags"
+export F90FLAGS="$generic_flags"
+export F77FLAGS="$generic_flags"
+
pkgver() {
cd petsc
t@@ -35,39 +86,67 @@ prepare() {
done < <( find ${srcdir} -name "*" -type f -exec grep -le "$MATCH" \{\} + )
cd "${srcdir}/petsc"
- patch -p1 < ../patch.diff
+ # patch -p1 < ../patch.diff
+ sed -i 's-\(self.publicInstall[^=]*=[[:space:]]\)[^#]*-\10 -g' config/BuildSystem/config/package.py
+
+ sed -i "s/\(raise RuntimeError('--download-openblas libraries cannot be used')\)/#\1/" config/BuildSystem/config/packages/BlasLapack.py
}
build() {
cd petsc
- CONFOPTS='--with-shared-libraries=1 --COPTFLAGS=-O3 --CXXOPTFLAGS=-O3 --with-cxx-dialect=C++11 --with-mpi=1 --with-fftw=1 --with-hdf5=1 --with-zlib=1'
+ declare -a CONFOPTS
+ # Run python2 ./configure --help for the meaning of this
+ CONFOPTS=(
+ --COPTFLAGS="$COPTFLAGS"
+ --CXXOPTFLAGS="CXXOPTFLAGS"
+ --CPPFLAGS="$CPPFLAGS"
+ --CFLAGS="$CFLAGS"
+ --CXXFLAGS="$CXXFLAGS"
+ --FFLAGS="$FFLAGS"
+ --FCFLAGS="$FCFLAGS"
+ --F90FLAGS="$F90FLAGS"
+ --F77FLAGS="$F77FLAGS"
+
+ --with-cxx-dialect=C++11
+ --with-mpi=1
+ --with-pic=1
+ --with-shared-libraries=1
+ --with-zlib=1
+
+ --with-scalar-type=complex
+ # Add this to test_optdepends.sh
+ --with-opencl=1
+ --with-yaml=1
+ )
# if --with-debugging=1 is set then PETSC_ARCH is automatically set to
# "linux-c-debug" for some things, so _config should be changed to "linux-c-debug"
#CONFOPTS="${CONFOPTS} --with-debugging=1"
- # Removed pastix due to incompatibility with current MPI (2019-10-31)
- for external_pkg in amd eigen hypre metis mumps parmetis party ptscotch scalapack suitesparse sundials superlu superlu_dist
- do
- CONFOPTS="${CONFOPTS} --download-${external_pkg}=1"
- done
+ CONFOPTS=( "${CONFOPTS[@]}" $(sh "${srcdir}"/test_optdepends.sh) )
+
+ dirpkg=${srcdir}/petsc/${_petsc_arch}/externalpackages/
export PETSC_DIR="${srcdir}/petsc"
export PETSC_ARCH="${_petsc_arch}"
- python2 ./configure LDFLAGS="$LDFLAGS" --prefix=/opt/petsc/${_config} ${CONFOPTS}
-
+ python2 ./configure LDFLAGS="$LDFLAGS" \
+ --prefix=/usr/petsc/${_config} \
+ --MAKEFLAGS="$MAKEFLAGS" \
+ $(for (( i=1; i<=${#CONFOPTS[@]}; i++)); do
+ echo "${CONFOPTS[$i]}";
+ done)
+ make clean
make all
}
-
package() {
cd petsc
_build_dir="${srcdir}/petsc"
- _install_dir=/opt/petsc/${_config}
+ _install_dir=/usr/petsc/${_config}
export PETSC_DIR=${_build_dir}
export PETSC_ARCH="${_petsc_arch}"
t@@ -88,7 +167,7 @@ package() {
#mkdir -p ${pkgdir}/usr/share/doc/petsc/include
#cp -r ${_build_dir}/include/*.html ${pkgdir}/usr/share/doc/petsc/include/
- # install licence (even though there is no such word as licenses)
+ # install license (even though there is no such word as licenses)
install -Dm 644 ${_build_dir}/LICENSE ${pkgdir}/usr/share/licenses/${pkgname}/LICENSE
mkdir -p "${pkgdir}/etc/profile.d"
t@@ -99,22 +178,5 @@ package() {
install -dm 755 "${pkgdir}/etc/ld.so.conf.d/"
echo "${_install_dir}/lib" > "${pkgdir}/etc/ld.so.conf.d/petsc.conf"
- sed -i "s#-L${_build_dir}/${_petsc_arch}/lib ##" "${pkgdir}${_install_dir}/lib/pkgconfig/PETSc.pc"
- sed -i \
- -e "s#prefix=.*#prefix=${_install_dir}#" \
- -e "s#libdir=.*#libdir=\${prefix}/lib#" \
- -e "s#includedir=.*#includedir=\${prefix}/include#" \
- "${pkgdir}${_install_dir}/lib/pkgconfig/superlu.pc"
- sed -i \
- -e "s#prefix=.*#prefix=${_install_dir}#" \
- -e "s#libdir=.*#libdir=\${prefix}/lib#" \
- -e "s#includedir=.*#includedir=\${prefix}/include#" \
- "${pkgdir}${_install_dir}/lib/pkgconfig/superlu_dist.pc"
- sed -i \
- -e "s#prefix=.*#prefix=${_install_dir};#" \
- -e "s#libdir=.*#libdir=\${prefix}/lib;#" \
- "${pkgdir}${_install_dir}/lib/petsc/bin/sundials-config"
-
- # install pkgconfig settings
- #install -Dm 644 "${_build_dir}/${_petsc_arch}/lib/pkgconfig/PETSc.pc" "${pkgdir}/usr/share/pkgconfig/PETSc.pc"
+ sed -i "s#-L${_build_dir}/${_petsc_arch}/lib ##" "${pkgdir}${_install_dir}/lib/pkgconfig/PETSc.pc"
} |
| diff --git a/patch.diff b/patch.diff |
| t@@ -1,13 +0,0 @@
-diff --git a/config/BuildSystem/config/package.py b/config/BuildSystem/config/package.py
-index d7777d623b..9dfcf66cee 100644
---- a/config/BuildSystem/config/package.py
-+++ b/config/BuildSystem/config/package.py
-@@ -60,7 +60,7 @@ class Package(config.base.Configure):
- self.excludedDirs = [] # list of directory names that could be false positives, SuperLU_DIST when looking for SuperLU
- self.downloadonWindows = 0 # 1 means the --download-package works on Microsoft Windows
- self.requirescxx11 = 0
-- self.publicInstall = 1 # Installs the package in the --prefix directory if it was given. Packages that are only used
-+ self.publicInstall = 0 # Installs the package in the --prefix directory if it was given. Packages that are only used
- # during the configuration/installation process such as sowing, make etc should be marked as 0
- self.parallelMake = 1 # 1 indicates the package supports make -j np option
- |
| diff --git a/test_optdepends.sh b/test_optdepends.sh |
| t@@ -0,0 +1,139 @@
+#!/bin/bash
+
+# Test if external packages for PETSC are installed
+
+# CONFOPTS=""
+
+# # External downloads
+# for external_pkg in hypre fblaslapack metis parmetis superlu_dist mumps scalapack; do
+# CONFOPTS="${CONFOPTS} --download-${external_pkg}=1"
+# done
+
+# Add hypre support
+if [ -f "/usr/lib/libHYPRE.so" ]; then
+ CONFOPTS="${CONFOPTS} --with-hypre=1"
+fi
+
+# Add mumps support
+if [ -f "/usr/lib/libmumps_common.so" ]; then
+ CONFOPTS="${CONFOPTS} --with-mumps=1"
+fi
+
+# Add fftw support
+if [ -f "/usr/lib/libfftw3_mpi.so" ]; then
+ CONFOPTS="${CONFOPTS} --with-fftw=1"
+fi
+
+# Add hdf5 support
+if [[ "$(h5stat -V)" ]]; then
+ CONFOPTS="${CONFOPTS} --with-hdf5=1"
+fi
+
+# Add scalapack support
+if [ -f "/usr/lib/pkgconfig/scalapack.pc" ]; then
+ CONFOPTS="${CONFOPTS} --with-scalapack=1"
+fi
+
+# Add suitesparse support
+if [ -f "/usr/include/SuiteSparse_config.h" ]; then
+ CONFOPTS="${CONFOPTS} --with-suitesparse=1"
+fi
+
+# Add metis support
+if [ -f "/usr/include/metis.h" ]; then
+ CONFOPTS="${CONFOPTS} --with-metis=1"
+ # Add parmetis support
+ if [ -f "/usr/include/parmetis.h" ]; then
+ CONFOPTS="${CONFOPTS} --with-parmetis=1"
+ fi
+fi
+
+# Add scotch support
+SCOTCH_DIR="/usr/include/scotch"
+if [ -d "${SCOTCH_DIR}" ]; then
+ SCOTCH_LIBS="libesmumps.so,libptscotch.so,libptscotcherr.so,libscotch.so,libscotcherr.so"
+ # Include bzip2 if scotch was build with bzip2 support
+ if [ -f /usr/include/bzlib.h ];then
+ SCOTCH_LIBS="${SCOTCH_LIBS},libbz2.so"
+ fi
+ SCOTCH_LIBS="[${SCOTCH_LIBS}]"
+ CONFOPTS="${CONFOPTS} --with-ptscotch=1 --with-ptscotch-lib=${SCOTCH_LIBS} --with-ptscotch-include=${SCOTCH_DIR}"
+fi
+
+# Add superlu support
+SUPERLU_DIR="/usr/include/superlu"
+if [ -d "${SUPERLU_DIR}" ]; then
+ CONFOPTS="${CONFOPTS} --with-superlu=1 --with-superlu-lib=-lsuperlu --with-superlu-include=${SUPERLU_DIR}"
+fi
+
+# Incompatible with complex
+# # Add sundials support
+# SUNDIALS_DIR="/usr/include/sundials/"
+# if [ -d "${SUNDIALS_DIR}" ]; then
+# CONFOPTS="${CONFOPTS} --with-sundials=1 --with-sundials-include=${SUNDIALS_DIR}"
+# fi
+
+# Add openblas support
+if [ -f "/usr/lib/libblas.so" ]; then
+ CONFOPTS="${CONFOPTS} --with-openblas=1"
+fi
+
+# Add OpenCL support
+OPENCL_DIR="/usr/include/CL/"
+if [ -f "${OPENCL_DIR}/cl.h" ]; then
+ CONFOPTS="${CONFOPTS} --with-opencl=1"
+else
+ CONFOPTS="${CONFOPTS} --with-opencl=0"
+fi
+
+# Add eigen support
+EIGEN_DIR="/usr/include/eigen3"
+if [ -d "${EIGEN_DIR}" ]; then
+ CONFOPTS="${CONFOPTS} --with-eigen=1 --with-eigen-include=${EIGEN_DIR}"
+fi
+
+# Add OpenMP support
+if [ -f "/usr/lib/libomp.so" ]; then
+ CONFOPTS="${CONFOPTS} --with-openmp=1"
+fi
+
+# Add hwloc support
+if [ -f "/usr/lib/libhwloc.so" ]; then
+ CONFOPTS="${CONFOPTS} --with-hwloc=1 --with-hwloc-pkg-config=/usr/lib/pkgconfig/"
+fi
+
+# Add CGNS support
+if [ -f "/usr/lib/libcgns.so" ]; then
+ CONFOPTS="${CONFOPTS} --with-cgns=1"
+fi
+
+# Add PNG support
+if [ -f "/usr/lib/libpng.so" ]; then
+ CONFOPTS="${CONFOPTS} --with-png=1 --with-png-pkg-config=/usr/lib/pkgconfig/"
+fi
+
+# Add MED support
+if [ -f "/usr/lib/libmed.so" ]; then
+ CONFOPTS="${CONFOPTS} --with-med=1"
+fi
+
+# # Add pastix support
+# PASTIX_CONF=$(which pastix-conf)
+# if [ -f "${PASTIX_CONF}" ]; then
+# PASTIX_DIR="$($PASTIX_CONF --incs | sed 's/-I//')"
+# if [ ! -d ${PASTIX_DIR} ]; then
+# PASTIX_DIR="[]"
+# fi
+# #PASTIX_LIBS="$($PASTIX_CONF --libs)"
+# PASTIX_LIBS="[libpastix.a,librt.so,libhwloc.so,libpthread.a]"
+# CONFOPTS="${CONFOPTS} --with-pastix=1 --with-pastix-lib=${PASTIX_LIBS} --with-pastix-include=${PASTIX_DIR}"
+# fi
+
+# Add trilinos support
+if [ "${TRILINOS_DIR}" ]; then
+ CONFOPTS="${CONFOPTS} --with-ml-dir=${TRILINOS_DIR}"
+ # Add boost support (may be useful for trilinos)
+ CONFOPTS="${CONFOPTS} --with-boost=1"
+fi
+
+echo "${CONFOPTS}" |