#! /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