Forked from
Sbalzarini Lab / Software / Parallel Computing / OpenFPM / openfpm_pdata
3369 commits behind the upstream repository.
-
Pietro Incardona authoredPietro Incardona authored
install 11.89 KiB
#! /bin/bash
source script/help
source script/discover_os
source script/show_solutions
source script/pre_req
source script/remove_old
source script/set_mpi
##
install_req=1
i_dir=" "
sq=0
while getopts :di:shc: FLAG; do
case $FLAG in
d)
echo "Disable depencencies installation"
install_req=0
;;
i)
echo "Setting dependencies installation dir: $OPTARG"
i_dir=$OPTARG
;;
s)
echo "Skipping user cin"
sq=1
;;
c)
echo "Fowarding options $OPTARG to configure script"
configure_options=$OPTARG
;;
h) #show help
HELP
;;
\?) #unrecognized option - are fowarded to configure
;;
esac
done
discover_os
## Remove old dependencies and installations
if [ x"$i_dir" == x" " ]; then
i_dir="$HOME"
fi
remove_old $i_dir
## Check and try to install the prerequisites
pre_req
## clone the dependencies
git submodule init
if [ $? -ne 0 ]; then
echo -e "Configure\033[91;5;1m FAILED \033[0m"
exit 1
fi
git submodule update
if [ $? -ne 0 ]; then
echo -e "Configure\033[91;5;1m FAILED \033[0m"
exit 1
fi
# Create config directory in each submodule
cd openfpm_data
if [ ! -d src/config ]; then
mkdir src/config
fi
cd ..
cd openfpm_devices
if [ ! -d src/config ]; then
mkdir src/config
fi
cd ..
cd openfpm_vcluster
if [ ! -d src/config ]; then
mkdir src/config
fi
cd ..
cd openfpm_io
if [ ! -d src/config ]; then
mkdir src/config
fi
cd ..
cd openfpm_numerics
if [ ! -d src/config ]; then
mkdir src/config
fi
cd ..
# Create config directory
if [ ! -d src/config ]; then
mkdir src/config
fi
## generate configure script
sh ./autogen.sh
if [ $? -ne 0 ]; then
echo -e "Configure\033[91;5;1m FAILED \033[0m"
exit 1
fi
## check for options
echo -e "\033[1;34;5mDEPENCENCIES INSTALLATION DIR \033[0m"
echo -e "Every required dependencies if needed will be installed into: \033[1;34;5m$i_dir\033[0m"
echo -e "if you want to install somewhere else do ./install -i /somewhere/else"
if [ $sq -eq 0 ]; then
unset commands
commands[0]="Continue"
possible_solutions "${commands[@]}"
fi
echo -e "Installing requirements into: $i_dir "
##
## Take all the options with the exception of -d -i -s
## call the configure script
if [ x"$MPI_valid" == x"yes" ]; then
configure_options="$configure_options CXX=mpic++ "
else
./script/install_MPI.sh $i_dir
fi
### MPI compilers must be in your PATH folder
set_mpi $i_dir
### Installing PETSC
if [ ! -d "$i_dir/PETSC" ]; then
echo -e "\033[1;34m OpenFPM Numerics \033[0m"
echo -e "\033[1mOpenfpm Numerics\033[0m went in Beta production. It use the optionally the following\033[1m linear algebra packages (TRILINOS,SUPERLU_DIST,MUMPS,HYPRE,SCALAPACK,SUITESPARSE,OPENBLAS,EIGEN,PETSC) \033[0m. \033[1mThe installation is automated but can take long time \033[1m (i7-3612QM 4 core 90 minutes) \033[0m. In case you decide to not install the linear algebra, openfpm numeric will try anyway to search for linear algebra packages"
echo ""
echo -e "\033[1mHow many core you want to use to install the linear algebra package?\033[0m(0=no linear algebra installation)"
read choose
if [ ! x"$choose" == x"0" ]; then
./script/install_PETSC.sh $i_dir $choose
fi
fi
### METIS and ParMETIS must be installed independently from sistem wide installation
./script/install_Parmetis.sh $i_dir $compiler_gcc $compiler_gpp
configure_options=" $configure_options --with-parmetis=$i_dir/PARMETIS "
./script/install_Metis.sh $i_dir $compiler_gcc $compiler_gpp
configure_options=" $configure_options --with-metis=$i_dir/METIS "
MPI_installed=0
METIS_installed=1
PARMETIS_installed=1
BOOST_installed=0
LAPACK_installed=0
SUITESPARSE_installed=0
EIGEN_installed=0
HDF5_installed=0
H5PART_installed=0
blas_options=""
conf_err=1
if [ $install_req -eq 0 ]; then
./configure $options $configure_options "$blas_options"
else
while [ $conf_err -ne 0 ]
do
./configure $options $configure_options "$blas_options"
conf_err=$?
echo "Configure script terminated with $conf_err"
## if MPI or METIS installation required install it
if [ $conf_err -eq 200 ]; then
echo "MPI not found try to install, $MPI_installed"
if [ $MPI_installed -eq 1 ]; then
echo "Error the installation of MPI failed"
exit 1
fi
./script/install_MPI.sh $i_dir $compiler_opt
MPI_installed=1
export PATH="$PATH:$i_dir/MPI/bin"
configure_options="$configure_options CXX=mpic++ "
elif [ $conf_err -eq 201 ]; then
echo "Metis not found try to install"
if [ $METIS_installed -eq 1 ]; then
echo "Error the installation of METIS failed"
exit 1
fi
./script/install_Metis.sh $i_dir $compiler_gcc $compiler_gpp
METIS_installed=1
configure_options=" $configure_options --with-metis=$i_dir/METIS "
elif [ $conf_err -eq 202 ]; then
echo "Boost not found try to install in $i_dir with $compiler_opt"
if [ $BOOST_installed -eq 1 ]; then
echo "Error the installation of Boost failed"
exit 1
fi
./script/install_BOOST.sh $i_dir $compiler_opt
BOOST_installed=1
configure_options=" $configure_options --with-boost=$i_dir/BOOST "
elif [ $conf_err -eq 204 ]; then
echo "Lapack not found try to install"
if [ $LAPACK_installed -eq 1 ]; then
echo "Error the installation of LAPACK failed"
exit 1
fi
./script/install_OPENBLAS.sh $i_dir $compiler_opt
LAPACK_installed=1
blas_options="--with-blas=-L$i_dir/OPENBLAS/lib/ -lopenblas"
elif [ $conf_err -eq 205 ]; then
## First we install openblas, we ignore default lapack
## this SuiteSparse is programmed to use libopenblas
./script/install_OPENBLAS.sh $i_dir $compiler_opt
LAPACK_installed=1
blas_options="--with-blas=-L$i_dir/OPENBLAS/lib/ -lopenblas"
## Then suite sparse
echo "SuiteSparse not found try to install"
if [ $SUITESPARSE_installed -eq 1 ]; then
echo "Error the installation of SuiteSparse failed"
exit 1
fi
./script/install_SUITESPARSE.sh $i_dir $compiler_opt
configure_options=" $configure_options --with-suitesparse=$i_dir/SUITESPARSE "
SUITESPARSE_installed=1
elif [ $conf_err -eq 206 ]; then
echo "Eigen not found try to install"
if [ $EIGEN_installed -eq 1 ]; then
echo "Error the installation of Eigen failed"
exit 1
fi
./script/install_EIGEN.sh $i_dir $compiler_opt
configure_options=" $configure_options --with-eigen=$i_dir/EIGEN "
EIGEN_installed=1
elif [ $conf_err -eq 208 ]; then
echo "ParMetis not found try to install"
if [ $PARMETIS_installed -eq 1 ]; then
echo "Error the installation of ParMETIS failed"
exit 1
fi
./script/install_Parmetis.sh $i_dir $compiler_gcc $compiler_gpp
PARMETIS_installed=1
configure_options=" $configure_options --with-parmetis=$i_dir/PARMETIS "
elif [ $conf_err -eq 207 ]; then
echo "HDF5 not found try to install"
if [ $HDF5_installed -eq 1 ]; then
echo "Error the installation of HDF5 failed"
exit 1
fi
./script/install_HDF5.sh $i_dir $compiler_opt
configure_options=" $configure_options --with-hdf5=$i_dir/HDF5/bin/h5pcc "
HDF5_installed=1
elif [ $conf_err -ne 0 ]; then
echo "I do not know how to recover from this error"
exit 1
fi
done
fi
### Create example.mk
install_base=$(cat install_dir)
echo "INCLUDE_PATH=-I. -I$install_base/openfpm_numerics/include -I$install_base/openfpm_pdata/include/config -I$install_base/openfpm_pdata/include -I$install_base/openfpm_data/include -I$install_base/openfpm_vcluster/include -I$install_base/openfpm_io/include -I$install_base/openfpm_devices/include -I$i_dir/METIS/include -I$i_dir/PARMETIS/include -I$i_dir/BOOST/include -I$i_dir/HDF5/include" > example.mk
echo "LIBS_PATH= -L$install_base/openfpm_devices/lib -L$install_base/openfpm_pdata/lib -L$install_base/openfpm_vcluster/lib -L$i_dir/METIS/lib -L$i_dir/PARMETIS/lib -L$i_dir/BOOST/lib -L$i_dir/HDF5/lib" >> example.mk
echo "LIBS=-lvcluster -lofpm_pdata -lofpmmemory -lmetis -lparmetis -lboost_iostreams -lhdf5" >> example.mk
echo "LIBS_SE2=-lvcluster -lofpmmemory_se2 -lparmetis -lmetis -lboost_iostreams -lhdf5" >> example.mk
cp example.mk src/example.mk
cp example.mk example/example.mk
#make clean
#make
if [ $? -ne 0 ]; then
conf_err=1
fi
echo ""
echo ""
if [ $conf_err -eq 0 ]; then
echo -e "Install\033[92;5;1m SUCCEED \033[0m"
else
echo -e "Install\033[91;5;1m FAILED \033[0m"
fi
echo "Command used to configure"
echo ""
echo -e "\033[1m ./configure $options $configure_options "$blas_options" \033[0m "
echo ""
if [ x"$platform" = x"linux" ]; then
bash_library="export LD_LIBRARY_PATH=\"\$LD_LIBRARY_PATH"
else
bash_library="export DYLD_LIBRARY_PATH=\"\$DYLD_LIBRARY_PATH"
fi
bash_path="export PATH=\$PATH"
echo -e "\033[1;34;5m --------------------------------------- \033[0m"
echo -e "\033[1;34;5m --------- INSTALLATION REPORT --------- \033[0m"
echo ""
if [ $MPI_installed -eq 1 ]; then
installation_report="$installation_report MPI Installed: \033[1m $i_dir/MPI \033[0m\n"
bash_path="\033[1m$bash_path:$i_dir/MPI/bin"
bash_library="\033[1m$bash_library:$i_dir/MPI/lib"
fi
if [ $METIS_installed -eq 1 ]; then
installation_report="$installation_report METIS Installed: \033[1m $i_dir/METIS \033[0m\n"
bash_library="$bash_library:$i_dir/METIS/lib"
fi
if [ $BOOST_installed -eq 1 ]; then
installation_report="$installation_report BOOST Installed: \033[1m $i_dir/BOOST \033[0m\n"
bash_library="$bash_library:$i_dir/BOOST/lib"
fi
if [ $LAPACK_installed -eq 1 ]; then
installation_report="$installation_report OPENBLAS Installed: \033[1m $i_dir/OPENBLAS \033[0m\n"
bash_library="$bash_library:$i_dir/OPENBLAS/lib"
fi
if [ $SUITESPARSE_installed -eq 1 ]; then
installation_report="$installation_report SUITESPARSE Installed: \033[1m $i_dir/SUITESPARSE \033[0m\n"
bash_library="$bash_library:$i_dir/SUITESPARSE/lib"
fi
if [ $EIGEN_installed -eq 1 ]; then
installation_report="$installation_report EIGEN Installed: \033[1m $i_dir/EIGEN \033[0m\n"
fi
if [ $HDF5_installed -eq 1 ]; then
installation_report="$installation_report HDF5 Installed: \033[1m $i_dir/HDF5 \033[0m\n"
bash_library="$bash_library:$i_dir/HDF5/lib"
fi
if [ $PARMETIS_installed -eq 1 ]; then
installation_report="$installation_report PARMETIS Installed: \033[1m $i_dir/PARMETIS \033[0m\n"
bash_library="$bash_library:$i_dir/PARMETIS/lib"
fi
bash_path="$bash_path\033[0m"
bash_library="$bash_library\033[0m"
##### Writing openfpm_vars file
echo "$bash_path" > $HOME/openfpm_vars
echo "$bash_library" >> $HOME/openfpm_vars
echo -e "$installation_report"
echo ""
echo "Before run any openfpm program you must execute the following command"
echo ""
echo -e "\033[1m source $HOME/openfpm_vars \033[0m"
echo ""
echo -e "\033[91;1m if you have in your .bashrc or .bash_profile old openfpm setting, please remove it\033[0m"
if [ x"$platform" = x"linux" ]; then
echo "To have a working openfpm environment every time you open bash/terminal append such command at the end of the file $HOME/.bashrc"
else
echo "To have a working openfpm environment every time you open bash/terminal append such command at the end of the file $HOME/.bash_profile"
fi
echo ""
echo -e "$bash_path"
echo -e "$bash_library"
echo ""
echo ""
echo ""
if [ $conf_err -ne 0 ]; then
exit 1
fi