Skip to content
Snippets Groups Projects
install 14.1 KiB
Newer Older
Pietro Incardona's avatar
Pietro Incardona committed
#! /bin/bash
Pietro Incardona's avatar
Pietro Incardona committed
source script/help
source script/discover_os
source script/show_solutions
source script/pre_req
source script/remove_old
source script/set_mpi
Pietro Incardona's avatar
Pietro Incardona committed
##
Pietro Incardona's avatar
Pietro Incardona committed
install_req=1
i_dir=" "
sq=0
Pietro Incardona's avatar
Pietro Incardona committed
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
Pietro Incardona's avatar
Pietro Incardona committed
      	      HELP
              ;;
    	    \?) #unrecognized option - are fowarded to configure
              ;;
	esac
incardon's avatar
incardon committed
discover_os

## Remove old dependencies and installations

if [ x"$i_dir" == x" " ]; then
 i_dir="$HOME"
fi

Pietro Incardona's avatar
Pietro Incardona committed
## Check and try to install the prerequisites

Pietro Incardona's avatar
Pietro Incardona committed

## clone the dependencies

Pietro Incardona's avatar
Pietro Incardona committed
git submodule init
Yaser Afshar's avatar
Yaser Afshar committed
if [ $? -ne 0 ]; then
  echo -e "Configure\033[91;5;1m FAILED \033[0m"
  exit 1
fi
Pietro Incardona's avatar
Pietro Incardona committed
git submodule update
Yaser Afshar's avatar
Yaser Afshar committed
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
Pietro Incardona's avatar
Pietro Incardona committed
if [ ! -d src/config  ]; then
  mkdir src/config
fi
cd ..

cd openfpm_devices
Pietro Incardona's avatar
Pietro Incardona committed
if [ ! -d src/config  ]; then
  mkdir src/config
fi
cd ..

cd openfpm_vcluster
Pietro Incardona's avatar
Pietro Incardona committed
if [ ! -d src/config  ]; then
  mkdir src/config
fi
cd ..

cd openfpm_io
Pietro Incardona's avatar
Pietro Incardona committed
if [ ! -d src/config  ]; then
  mkdir src/config
fi
incardon's avatar
incardon committed
cd openfpm_numerics
if [ ! -d src/config  ]; then
  mkdir src/config
fi
cd ..

Pietro Incardona's avatar
Pietro Incardona committed
# Create config directory
Pietro Incardona's avatar
Pietro Incardona committed
if [ ! -d src/config ]; then
  mkdir src/config
fi
Pietro Incardona's avatar
Pietro Incardona committed
## generate configure script
Pietro Incardona's avatar
Pietro Incardona committed
sh ./autogen.sh
Incardona Pietro's avatar
Incardona Pietro committed
if [ $? -ne 0 ]; then
  echo -e "Configure\033[91;5;1m FAILED \033[0m"
  exit 1
fi
Pietro Incardona's avatar
Pietro Incardona committed
## check for options
incardon's avatar
incardon committed

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"
Pietro Incardona's avatar
Pietro Incardona committed
if [ $sq -eq 0 ]; then
Pietro Incardona's avatar
Pietro Incardona committed
  commands[0]="Continue"
  possible_solutions "${commands[@]}"
fi
incardon's avatar
incardon committed

Pietro Incardona's avatar
Pietro Incardona committed
echo -e "\033[1mHow many core you want to use to install the dependencies?\033[0m"
read ncore

incardon's avatar
incardon committed
echo -e "Installing requirements into: $i_dir "

##

Pietro Incardona's avatar
Pietro Incardona committed
## Take all the options with the exception of -d -i -s
Pietro Incardona's avatar
Pietro Incardona committed

## call the configure script

### Installing PETSC

Pietro Incardona's avatar
Pietro Incardona committed
if [ ! -d "$i_dir/PETSC" -o ! -d "$i_dir/EIGEN" ]; then
Pietro Incardona's avatar
Pietro Incardona committed
    echo -e "\033[1;34m Optional packages  \033[0m"
    echo -e "\033[1mDo you want to install linear algebra packages ?(y/n)\033[0m"
    echo "Installation can take long time (90 minutes on i7-3612QM 4 cores)"
    read inst_lin_alg
#    if [ ! x"$choose" == x"0" ]; then
#        ./script/install_PETSC.sh $i_dir $choose
#        configure_options="$configure_options --with-PETSC=$i_dir/PETSC "
#    fi
Pietro Incardona's avatar
Pietro Incardona committed
fi

if [ -d "$i_dir/PETSC" ]; then
Pietro Incardona's avatar
Pietro Incardona committed
    configure_options="$configure_options --with-petsc=$i_dir/PETSC "
Pietro Incardona's avatar
Pietro Incardona committed
fi
if [ -d "$i_dir/EIGEN" ]; then
    configure_options=" $configure_options --with-eigen=$i_dir/EIGEN --with-suitesparse=$i_dir/SUITESPARSE  "
    configure_blas_option=" --with-blas=\"$i_dir/OPENBLAS/lib -lopenblas\"  "
fi
if [ -d "$i_dir/MPI" ]; then
    configure_options="$configure_options CXX=mpic++ "
fi
if [ -d "$i_dir/METIS" ]; then
    configure_options=" $configure_options --with-metis=$i_dir/METIS "
fi
if [ -d "$i_dir/BOOST" ]; then
    configure_options=" $configure_options --with-boost=$i_dir/BOOST "
fi
if [ -d "$i_dir/PARMETIS" ]; then
    configure_options=" $configure_options --with-parmetis=$i_dir/PARMETIS "
fi
if [ -d "$i_dir/HDF5" ]; then
    configure_options=" $configure_options --with-hdf5=$i_dir/HDF5/bin/h5pcc "
if [ x"$MPI_valid" == x"yes" ]; then
	configure_options="$configure_options CXX=mpic++ "
else
	./script/install_MPI.sh $i_dir
### MPI compilers must be in your PATH folder

set_mpi $i_dir

### METIS and ParMETIS must be installed independently from sistem wide installation

Pietro Incardona's avatar
Pietro Incardona committed
./script/install_Parmetis.sh $i_dir $ncore
configure_options=" $configure_options --with-parmetis=$i_dir/PARMETIS "
Pietro Incardona's avatar
Pietro Incardona committed
./script/install_Metis.sh $i_dir $compiler_gcc $compiler_gpp $ncore
configure_options=" $configure_options --with-metis=$i_dir/METIS "
Pietro Incardona's avatar
Pietro Incardona committed
MPI_installed=0
MPI_System_prv=1
METIS_installed=1
PARMETIS_installed=1
Pietro Incardona's avatar
Pietro Incardona committed
BOOST_installed=0
BOOST_System_prv=1
LAPACK_installed=0
LAPACK_System_prv=1
SUITESPARSE_installed=0
SUITESPARSE_System_prv=1
EIGEN_installed=0
EIGEN_System_prv=1
HDF5_installed=0
HDF5_System_prv=1
Pietro Incardona's avatar
Pietro Incardona committed
conf_err=1

if [ $install_req -eq 0 ]; then
Pietro Incardona's avatar
Pietro Incardona committed
    ./configure $options $configure_options "$configure_blas_option"
Pietro Incardona's avatar
Pietro Incardona committed
else
    while [ $conf_err -ne 0 ]
    do
        ./configure $options $configure_options
Pietro Incardona's avatar
Pietro Incardona committed
        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"
Pietro Incardona's avatar
Pietro Incardona committed
            if [ $MPI_installed -eq 1 ]; then
                echo "Error the installation of MPI failed"
                exit 1
            fi
Pietro Incardona's avatar
Pietro Incardona committed
            ./script/install_MPI.sh $i_dir $ncore
Pietro Incardona's avatar
Pietro Incardona committed
            MPI_installed=1
Yaser Afshar's avatar
Yaser Afshar committed
            export PATH="$PATH:$i_dir/MPI/bin"
            configure_options="$configure_options CXX=mpic++ "
Pietro Incardona's avatar
Pietro Incardona committed
        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
Pietro Incardona's avatar
Pietro Incardona committed
            METIS_installed=1
Yaser Afshar's avatar
Yaser Afshar committed
            configure_options=" $configure_options --with-metis=$i_dir/METIS "
Pietro Incardona's avatar
Pietro Incardona committed
        elif [ $conf_err -eq 202 ]; then
            echo "Boost not found try to install in $i_dir with $compiler_opt"
Pietro Incardona's avatar
Pietro Incardona committed
            if [ $BOOST_installed -eq 1  ]; then
                echo "Error the installation of Boost failed"
                exit 1
            fi
Pietro Incardona's avatar
Pietro Incardona committed
            ./script/install_BOOST.sh $i_dir $ncore
            BOOST_installed=1
Yaser Afshar's avatar
Yaser Afshar committed
            configure_options=" $configure_options --with-boost=$i_dir/BOOST "
	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
Pietro Incardona's avatar
Pietro Incardona committed
            ./script/install_Parmetis.sh $i_dir $ncore
            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	
Pietro Incardona's avatar
Pietro Incardona committed
            ./script/install_HDF5.sh $i_dir $ncore
            configure_options=" $configure_options --with-hdf5=$i_dir/HDF5/bin/h5pcc "
            HDF5_installed=1
Pietro Incardona's avatar
Pietro Incardona committed
        elif [ $conf_err -ne 0 ]; then
            echo "I do not know how to recover from this error"
            exit 1
        fi
    done
Pietro Incardona's avatar
Pietro Incardona committed
    if [ x"$inst_lin_alg" == x"y" ]; then
Pietro Incardona's avatar
Pietro Incardona committed
        ./script/install_EIGEN.sh $i_dir $ncore
        if [ $? -eq 0 ]; then
Pietro Incardona's avatar
Pietro Incardona committed
            configure_options=" $configure_options --with-eigen=$i_dir/EIGEN --with-suitesparse=$i_dir/SUITESPARSE  "
            configure_blas_option=" --with-blas=\"$i_dir/OPENBLAS/lib -lopenblas\"  "
Pietro Incardona's avatar
Pietro Incardona committed
        ./script/install_PETSC.sh $i_dir $ncore
        if [ $? -eq 0 ]; then
            configure_options=" $configure_options --with-petsc=$i_dir/PETSC "
        fi
    fi

    ./configure $options $configure_options

### Create example.mk
install_base=$(cat install_dir)
Pietro Incardona's avatar
Pietro Incardona committed
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

Pietro Incardona's avatar
Pietro Incardona committed
echo "Command used to configure"
echo ""
echo -e "\033[1m ./configure $options $configure_options \033[0m "
Pietro Incardona's avatar
Pietro Incardona committed
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

Pietro Incardona's avatar
Pietro Incardona committed
bash_path="export PATH=\"\$PATH"

echo -e "\033[1;34;5m ---------------------------------------  \033[0m"
echo -e "\033[1;34;5m --------- INSTALLATION REPORT ---------  \033[0m"
echo ""
echo -e "\033[1;34;5m ---------- Mandatory packages ---------  \033[0m"
echo ""
if [ -d "$i_dir/MPI" ]; then
  installation_report="$installation_report \033[92;1mMPI\033[0m Installed: \033[1m $i_dir/MPI \033[0m\n"
  bash_path="$bash_path:$i_dir/MPI/bin"
  bash_library="$bash_library:$i_dir/MPI/lib"
elif [ $MPI_System_prv -eq 1 ]; then
  installation_report="$installation_report \033[92;1mMPI\033[0m Installed: \033[1m System installation \033[0m\n"
Pietro Incardona's avatar
Pietro Incardona committed
if [ $METIS_installed -eq 1 ]; then
  installation_report="$installation_report \033[92;1mMETIS\033[0m Installed: \033[1m $i_dir/METIS \033[0m\n"
  bash_library="$bash_library:$i_dir/METIS/lib"
if [ $PARMETIS_installed -eq 1 ]; then
  installation_report="$installation_report \033[92;1mPARMETIS\033[0m Installed: \033[1m $i_dir/PARMETIS \033[0m\n"
  bash_library="$bash_library:$i_dir/PARMETIS/lib"
fi

if [ $BOOST_installed -eq 1 ]; then
  installation_report="$installation_report \033[92;1mBOOST\033[0m Installed: \033[1m $i_dir/BOOST \033[0m\n"
  bash_library="$bash_library:$i_dir/BOOST/lib"
elif [ $BOOST_System_prv -eq 1 ]; then
  installation_report="$installation_report \033[92;1mBOOST\033[0m Installed: \033[1m System installation \033[0m\n"
fi

if [ $HDF5_installed -eq 1 ]; then
  installation_report="$installation_report \033[92;1mHDF5\033[0m Installed: \033[1m $i_dir/HDF5 \033[0m\n"
  bash_library="$bash_library:$i_dir/HDF5/lib"
fi
echo -e "$installation_report"

echo ""
echo -e "\033[1;34;5m ---------- Optional packages -----------  \033[0m"
echo ""

installation_report=""

if [ -d "$i_dir/PETSC" ]; then
  installation_report="$installation_report \033[92;1mPETSC\033[0m Installed: \033[1m $i_dir/PETSC \033[0m\n"
  bash_library="$bash_library:$i_dir/PETSC/lib"
else
  installation_report="$installation_report \033[91;1mPETSC\033[0m Installed: \033[1m NO \033[0m\n"
if [ -d "$i_dir/EIGEN" ]; then
  installation_report="$installation_report \033[92;1mEIGEN\033[0m Installed: \033[1m $i_dir/EIGEN \033[0m\n"
fi

echo -e "$installation_report"

echo -e "\033[1;34;5m --------------------------------  \033[0m"

installation_report=""

if [ -d "$i_dir/TRILINOS" ]; then
  installation_report="$installation_report \033[92;1mTRILINOS\033[0m Installed: \033[1m $i_dir/TRILINOS \033[0m\n"
  bash_library="$bash_library:$i_dir/TRILINOS/lib"
else
  installation_report="$installation_report \033[91;1mTRILINOS\033[0m Installed: \033[1m NO \033[0m\n"
fi

if [ -d "$i_dir/OPENBLAS" ]; then
  installation_report="$installation_report \033[92;1mOPENBLAS\033[0m Installed: \033[1m $i_dir/OPENBLAS \033[0m\n"
  bash_library="$bash_library:$i_dir/OPENBLAS/lib"
else
  installation_report="$installation_report \033[91;1mOPENBLAS\033[0m Installed: \033[1m NO \033[0m\n"

if [ -d "$i_dir/SUITESPARSE" ]; then
  installation_report="$installation_report \033[92;1mSUITESPARSE\033[0m Installed: \033[1m $i_dir/SUITESPARSE \033[0m\n"
  bash_library="$bash_library:$i_dir/SUITESPARSE/lib"
else
  installation_report="$installation_report \033[91;1mSUITESPARSE\033[0m Installed: \033[1m NO \033[0m\n"

if [ -d "$i_dir/SCALAPACK" ]; then
  installation_report="$installation_report \033[92;1mSCALAPACK\033[0m Installed: \033[1m $i_dir/SCALAPACK \033[0m\n"
  bash_library="$bash_library:$i_dir/SCALAPACK/lib"
else
  installation_report="$installation_report \033[91;1mSCALAPACK\033[0m Installed: \033[1m NO \033[0m\n"
if [ -d "$i_dir/MUMPS" ]; then
  installation_report="$installation_report \033[92;1mMUMPS\033[0m Installed: \033[1m $i_dir/MUMPS \033[0m\n"
  bash_library="$bash_library:$i_dir/MUMPS/lib"
else
  installation_report="$installation_report \033[91;1mMUMPS\033[0m Installed: \033[1m NO \033[0m\n"

if [ -d "$i_dir/SUPERLU_DIST" ]; then
  installation_report="$installation_report \033[92;1mSUPERLU_DIST\033[0m Installed: \033[1m $i_dir/SUPERLU_DIST \033[0m\n"
  bash_library="$bash_library:$i_dir/SUPERLU_DIST/lib"
else
  installation_report="$installation_report \033[91;1mSUPERLU_DIST\033[0m Installed: \033[1m NO \033[0m\n"
if [ -d "$i_dir/HYPRE" ]; then
  installation_report="$installation_report \033[92;1mHYPRE\033[0m Installed: \033[1m $i_dir/HYPRE \033[0m\n"
  bash_library="$bash_library:$i_dir/HYPRE/lib"
else
  installation_report="$installation_report \033[91;1mHYPRE\033[0m Installed: \033[1m NO \033[0m\n"
fi

bash_path="$bash_path\""
bash_library="$bash_library\""

##### Writing openfpm_vars file

echo "$bash_path" > $HOME/openfpm_vars
echo "$bash_library" >> $HOME/openfpm_vars

echo -e "$installation_report"
Pietro Incardona's avatar
Pietro Incardona committed
echo ""
echo ""
if [ $conf_err -eq 0  ]; then
  echo -e "Install summary\033[92;5;1m SUCCEED \033[0m"
else
  echo -e "Install summary\033[91;5;1m FAILED \033[0m"
fi

echo ""
if [ x"$platform" = x"linux" ]; then
  echo "Before run any openfpm program you must execute the following command. A simple way would be to append this line at the end of your $HOME/.bashrc"
  echo "Before run any openfpm program you must execute the following command. A simple way would be to append this line at the end of your $HOME/.bash_profile"
echo -e "\033[1m source $HOME/openfpm_vars \033[0m"
echo -e "\033[91;1m if you have in your .bashrc or .bash_profile old openfpm setting, please remove it\033[0m"
Pietro Incardona's avatar
Pietro Incardona committed
echo ""
echo ""
if [ $conf_err -ne 0 ]; then
  exit 1
fi