1#!/bin/bash -e 2[ "${BASH_SOURCE[0]}" ] && SCRIPT_NAME="${BASH_SOURCE[0]}" || SCRIPT_NAME=$0 3SCRIPT_DIR="$(cd "$(dirname "$SCRIPT_NAME")" && pwd -P)" 4 5sirius_ver="6.4.4" 6sirius_sha256="1c5de9565781847658c3cc11edcb404e6e6d1c5a9dfc81e977de7a9a7a162c8a" 7 8 9source "${SCRIPT_DIR}"/common_vars.sh 10source "${SCRIPT_DIR}"/tool_kit.sh 11source "${SCRIPT_DIR}"/signal_trap.sh 12source "${INSTALLDIR}"/toolchain.conf 13source "${INSTALLDIR}"/toolchain.env 14 15if [ "$MPI_MODE" = "no" ] && [ "$ENABLE_OMP" = "__FALSE__" ] ; then 16 report_warning $LINENO "MPI and OpenMP are disabled, skipping sirius installation" 17 echo 'with_sirius="__FALSE__"' >> ${BUILDDIR}/setup_sirius 18 exit 0 19fi 20 21[ -f "${BUILDDIR}/setup_sirius" ] && rm "${BUILDDIR}/setup_sirius" 22 23SIRIUS_CFLAGS='' 24SIRIUS_LDFLAGS='' 25SIRIUS_LIBS='' 26! [ -d "${BUILDDIR}" ] && mkdir -p "${BUILDDIR}" 27cd "${BUILDDIR}" 28 29case "$with_sirius" in 30 __DONTUSE__) 31 ;; 32 __INSTALL__) 33 echo "==================== Installing SIRIUS ====================" 34 require_env FFTW_LDFLAGS 35 require_env FFTW_LIBS 36 require_env FFTW_CFLAGS 37 require_env ELPAROOT 38 require_env ELPA_LDFLAGS 39 require_env ELPA_LIBS 40 require_env ELPA_CFLAGS 41 require_env GSL_LDFLAGS 42 require_env GSL_CFLAGS 43 require_env GSL_LIBS 44 require_env MATH_LIBS 45 require_env MPI_LDFLAGS 46 require_env MPI_LIBS 47 require_env SCALAPACKROOT 48 require_env SCALAPACK_LDFLAGS 49 require_env SCALAPACK_CFLAGS 50 require_env SCALAPACK_LIBS 51 require_env LIBXC_LIBS 52 require_env LIBXC_CFLAGS 53 require_env LIBXC_LDFLAGS 54 require_env SPGLIB_LIBS 55 require_env SPGLIB_CFLAGS 56 require_env SPGLIB_LDFLAGS 57 require_env HDF5_LIBS 58 require_env HDF5_CFLAGS 59 require_env HDF5_LDFLAGS 60 require_env LIBVDWXC_CFLAGS 61 require_env LIBVDWXC_LIBS 62 require_env LIBVDWXC_LDFLAGS 63 require_env GSL_INCLUDE_DIR 64 require_env GSL_LIBRARY 65 require_env GSL_CBLAS_LIBRARY 66 require_env SPFFT_ROOT 67 require_env SPFFT_CFLAGS 68 require_env SPFFT_LDFLAGS 69 require_env SPFFT_LIBS 70 ARCH=`uname -m` 71 SIRIUS_OPT="-O3 -DNDEBUG -mtune=native -ftree-loop-vectorize ${MATH_CFLAGS}" 72 if [ "$ARCH" = "ppc64le" ]; then 73 SIRIUS_OPT="-O3 -DNDEBUG -mcpu=power8 -mtune=power8 -funroll-loops -ftree-vectorize -mvsx -maltivec -mpopcntd -mveclibabi=mass -fvect-cost-model -fpeel-loops -mcmodel=medium ${MATH_CFLAGS}" 74 SIRIUS_DBG="-O2 -g -mcpu=power8 -mtune=power8 -funroll-loops -ftree-vectorize -mvsx -maltivec -mpopcntd -mveclibabi=mass -fvect-cost-model -fpeel-loops -mcmodel=medium ${MATH_CFLAGS}" 75 fi 76 77 if [ "$ARCH" = "x86_64" ]; then 78 SIRIUS_OPT="-O3 -DNDEBUG -mtune=native -ftree-loop-vectorize ${MATH_CFLAGS}" 79 SIRIUS_DBG="-O2 -g -mtune=native -ftree-loop-vectorize ${MATH_CFLAGS}" 80 fi 81 82 pkg_install_dir="${INSTALLDIR}/sirius-${sirius_ver}" 83 install_lock_file="${pkg_install_dir}/install_successful" 84 if verify_checksums "${install_lock_file}" ; then 85 echo "sirius_dist-${sirius_ver} is already installed, skipping it." 86 else 87 if [ -f SIRIUS-${sirius_ver}.tar.gz ] ; then 88 echo "sirius_${sirius_ver}.tar.gz is found" 89 else 90 download_pkg ${DOWNLOADER_FLAGS} ${sirius_sha256} \ 91 "https://github.com/electronic-structure/SIRIUS/archive/v${sirius_ver}.tar.gz" \ 92 -o SIRIUS-${sirius_ver}.tar.gz 93 fi 94 95 echo "Installing from scratch into ${pkg_install_dir}" 96 [ -d sirius-${sirius_ver} ] && rm -rf sirius-${sirius_ver} 97 tar -xzf SIRIUS-${sirius_ver}.tar.gz 98 cd SIRIUS-${sirius_ver} 99 rm -Rf build 100 mkdir build 101 cd build 102 COMPILATION_OPTIONS="-DHDF5_DIR=${HDF5_DIR}" 103 if [ -n "$ELPA_LIBS" ] ; then 104 if [ -s "$ELPAROOT" ] ; then 105 export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$ELPAROOT/lib/pkgconfig:$ELPAROOT/lib64/pkgconfig 106 fi 107 COMPILATION_OPTIONS="-DUSE_ELPA=ON -DELPA_INCLUDE_DIR=${ELPAROOT}/include/elpa-${ELPAVERSION}/elpa $COMPILATION_OPTIONS" 108 fi 109 110 if [ -n "$SCALAPACK_LIBS" ] ; then 111 export SCALAPACK_LIB="$SCALAPACK_LIBS" 112 if [ -s "$SCALAPACKROOT" ] ; then 113 COMPILATION_OPTIONS="-DUSE_SCALAPACK=ON -DSCALAPACK_INCLUDE_DIR=${SCALAPACKROOT}/include ${COMPILATION_OPTIONS}" 114 else 115 COMPILATION_OPTIONS="-DUSE_SCALAPACK=ON ${COMPILATION_OPTIONS}" 116 fi 117 fi 118 if [ -n "$HDF5_LIBS" ] ; then 119 COMPILATION_OPTIONS="-DUSE_HDF5=ON $COMPILATION_OPTIONS" 120 fi 121 if [ -n "$LIBVDWXC_LIBS" ] ; then 122 COMPILATION_OPTIONS="-DUSE_VDWXC=ON $COMPILATION_OPTIONS" 123 fi 124 if [ -n "$MKL_LIBS" ] ; then 125 COMPILATION_OPTIONS="-DUSE_MKL=ON -DUSE_SCALAPACK=ON $COMPILATION_OPTIONS" 126 fi 127 128 129 CMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}:${SPFFT_ROOT}/lib/cmake:${SPFFT_ROOT}/lib64/cmake" \ 130 cmake -DCMAKE_INSTALL_PREFIX=${pkg_install_dir} \ 131 -DCMAKE_CXXFLAGS_RELEASE="${SIRIUS_OPT}" \ 132 -DCMAKE_CXX_FLAGS_RELWITHDEBINFO="${SIRIUS_DBG}" \ 133 -DCMAKE_CXX_COMPILER="${MPICXX}" \ 134 -DCMAKE_C_COMPILER="${MPICC}" \ 135 ${COMPILATION_OPTIONS} .. > compile.log 2>&1 136 make -j $NPROCS -C src >> compile.log 2>&1 137 138 install -d ${pkg_install_dir}/include >> install.log 2>&1 139 install -d ${pkg_install_dir}/lib >> install.log 2>&1 140 cp -R ../src/* ${pkg_install_dir}/include >> install.log 2>&1 141 install -m 644 src/*.a ${pkg_install_dir}/lib >> install.log 2>&1 142 install -m 644 src/mod_files/*.mod ${pkg_install_dir}/include >> install.log 2>&1 143 cd .. 144 145 # now do we have cuda as well 146 147 if [ "$ENABLE_CUDA" = "__TRUE__" ] ; then 148 [ -d build-cuda ] && rm -rf "build-cuda" 149 mkdir build-cuda 150 cd build-cuda 151 CMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}:${SPFFT_ROOT}/lib/cmake:${SPFFT_ROOT}/lib64/cmake" \ 152 cmake -DCMAKE_INSTALL_PREFIX=${pkg_install_dir} \ 153 -DCMAKE_CXXFLAGS_RELEASE="${SIRIUS_OPT}" \ 154 -DCMAKE_CXX_FLAGS_RELWITHDEBINFO="${SIRIUS_DBG}" \ 155 -DUSE_CUDA=ON \ 156 -DGPU_MODEL=P100 \ 157 -DCMAKE_CXX_COMPILER="${MPICXX}" \ 158 -DCMAKE_C_COMPILER="${MPICC}" ${COMPILATION_OPTIONS} .. >> compile.log 2>&1 159 make -j $NPROCS -C src >> compile.log 2>&1 160 install -d ${pkg_install_dir}/lib/cuda 161 install -d ${pkg_install_dir}/include/cuda 162 install -m 644 src/*.a ${pkg_install_dir}/lib/cuda >> install.log 2>&1 163 install -m 644 src/mod_files/*.mod ${pkg_install_dir}/include/cuda >> install.log 2>&1 164 SIRIUS_CUDA_LDFLAGS="-L'${pkg_install_dir}/lib/cuda' -Wl,-rpath='${pkg_install_dir}/lib/cuda'" 165 cd .. 166 fi 167 SIRIUS_CFLAGS="-I'${pkg_install_dir}/include/cuda'" 168 SIRIUS_LDFLAGS="-L'${pkg_install_dir}/lib' -Wl,-rpath='${pkg_install_dir}/lib'" 169 write_checksums "${install_lock_file}" "${SCRIPT_DIR}/$(basename ${SCRIPT_NAME})" 170 fi 171 ;; 172 __SYSTEM__) 173 require_env FFTW_LDFLAGS 174 require_env FFTW_LIBS 175 require_env FFTW_CFLAGS 176 require_env ELPAROOT 177 require_env ELPA_LDFLAGS 178 require_env ELPA_LIBS 179 require_env ELPA_CFLAGS 180 require_env GSL_LDFLAGS 181 require_env GSL_CFLAGS 182 require_env GSL_LIBS 183 require_env MATH_LIBS 184 require_env MPI_LDFLAGS 185 require_env MPI_LIBS 186 require_env SCALAPACKROOT 187 require_env SCALAPACK_LDFLAGS 188 require_env SCALAPACK_CFLAGS 189 require_env SCALAPACK_LIBS 190 require_env LIBXC_LIBS 191 require_env LIBXC_CFLAGS 192 require_env LIBXC_LDFLAGS 193 require_env SPGLIB_LIBS 194 require_env SPGLIB_CFLAGS 195 require_env SPGLIB_LDFLAGS 196 require_env HDF5_LIBS 197 require_env HDF5_CFLAGS 198 require_env HDF5_LDFLAGS 199 require_env LIBVDWXC_CFLAGS 200 require_env LIBVDWXC_LDFLAGS 201 require_env LIBVDWXC_LIBS 202 require_env SPFFT_ROOT 203 require_env SPFFT_CFLAGS 204 require_env SPFFT_LDFLAGS 205 require_env SPFFT_LIBS 206 207 check_lib -lsirius "sirius" 208 add_include_from_paths SIRIUS_CFLAGS "sirius*" $INCLUDE_PATHS 209 add_lib_from_paths SIRIUS_LDFLAGS "libsirius.*" $LIB_PATHS 210 ;; 211 *) 212 echo "==================== Linking SIRIUS_Dist to user paths ====================" 213 pkg_install_dir="$with_sirius" 214 check_dir "${pkg_install_dir}/lib" 215 check_dir "${pkg_install_dir}/lib64" 216 check_dir "${pkg_install_dir}/include" 217 ;; 218esac 219if [ "$with_sirius" != "__DONTUSE__" ] ; then 220 SIRIUS_LIBS="-lsirius IF_CUDA(-lcusolver|)" 221 SIRIUS_CUDA_LDFLAGS="-L'${pkg_install_dir}/lib/cuda' -Wl,-rpath='${pkg_install_dir}/lib/cuda'" 222 SIRIUS_LDFLAGS="-L'${pkg_install_dir}/lib' -Wl,-rpath='${pkg_install_dir}/lib'" 223 SIRIUS_CFLAGS="-I'${pkg_install_dir}/include'" 224 if [ "$with_sirius" != "__SYSTEM__" ] ; then 225 cat <<EOF > "${BUILDDIR}/setup_sirius" 226prepend_path LD_LIBRARY_PATH "$pkg_install_dir/lib" 227prepend_path LD_LIBRARY_PATH "$pkg_install_dir/lib/cuda" 228prepend_path LD_RUN_PATH "$pkg_install_dir/lib" 229prepend_path LD_RUN_PATH "$pkg_install_dir/lib/cuda" 230prepend_path LIBRARY_PATH "$pkg_install_dir/lib" 231prepend_path LIBRARY_PATH "$pkg_install_dir/lib/cuda" 232prepend_path CPATH "$pkg_install_dir/include" 233EOF 234 cat "${BUILDDIR}/setup_sirius" >> $SETUPFILE 235 fi 236 cat <<EOF >> "${BUILDDIR}/setup_sirius" 237export SIRIUS_CFLAGS="IF_CUDA(-I${pkg_install_dir}/include/cuda|-I${pkg_install_dir}/include)" 238export SIRIUS_FFLAGS="IF_CUDA(-I${pkg_install_dir}/include/cuda|-I${pkg_install_dir}/include)" 239export SIRIUS_LDFLAGS="-L'${pkg_install_dir}/lib' -Wl,-rpath='${pkg_install_dir}/lib'" 240export SIRIUS_CUDA_LDFLAGS="-L'${pkg_install_dir}/lib/cuda' -Wl,-rpath='${pkg_install_dir}/lib/cuda'" 241export SIRIUS_LIBS="${SIRIUS_LIBS}" 242export CP_DFLAGS="\${CP_DFLAGS} IF_MPI(IF_OMP("-D__SIRIUS"|)|)" 243export CP_CFLAGS="\${CP_CFLAGS} IF_MPI(IF_OMP("\${SIRIUS_CFLAGS}"|)|)" 244export CP_LDFLAGS="\${CP_LDFLAGS} IF_MPI(IF_OMP(IF_CUDA("\${SIRIUS_CUDA_LDFLAGS}"|"\${SIRIUS_LDFLAGS}")|)|)" 245export CP_LIBS="IF_MPI(IF_OMP("\${SIRIUS_LIBS}"|)|) \${CP_LIBS}" 246EOF 247fi 248 249# update toolchain environment 250load "${BUILDDIR}/setup_sirius" 251export -p > "${INSTALLDIR}/toolchain.env" 252 253cd "${ROOTDIR}" 254report_timing "sirius" 255