diff --git a/.gitignore b/.gitignore index e69de29..e43b0f9 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Store diff --git a/install_script.sh b/install_script.sh new file mode 100644 index 0000000..8cc3e7e --- /dev/null +++ b/install_script.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +# ------------------------------------------------------------------------ +# PACKAGE LIST: register all new dependent tools and libs here. Order +# is important, the first in the list gets installed first +# ------------------------------------------------------------------------ +tool_list="gcc intel cmake" +mpi_list="mpich openmpi intelmpi" +math_list="mkl acml openblas" +lib_list="fftw libint libxc libgrpp libxsmm cosma scalapack elpa cusolvermp plumed \ + spfft spla ptscotch superlu pexsi quip gsl spglib hdf5 libvdwxc sirius + libvori libtorch deepmd" +package_list="${tool_list} ${mpi_list} ${math_list} ${lib_list}" +# ------------------------------------------------------------------------ + +# first set everything to __DONTUSE__ +for ii in ${package_list}; do + eval with_${ii}="__DONTUSE__" +done + +# ------------------------------------------------------------------------ +# Work out default settings +# ------------------------------------------------------------------------ + +# tools to turn on by default: +with_gcc="__SYSTEM__" + +if [ "COMPILER" = intel ]; then + ./install_intel.sh +elif [ "COMPILER" = llvm ]; then + ./install_llvm.sh +elif [ "COMPILER" = clang]; then + ./install_llvm.sh +else + ./install_gcc.sh +fi + + diff --git a/make_cluster.sh b/make_cluster.sh index 19ccd19..303c3a4 100644 --- a/make_cluster.sh +++ b/make_cluster.sh @@ -13,146 +13,19 @@ else echo "This script is not the top-level bash file being run." fi -## INSTALL GCC FROM SOURCE -GCC_BUILD_DIR=${BUILD_LOCATION}/gcc -GCC_INSTALL_DIR=${INSTALL_LOCATION}/gcc -mkdir -p ${GCC_INSTALL_DIR} -mkdir gcc-${GCC_VERSION}-build +./scripts/install_gcc.sh -GCC_VERSION=7.5.0 -cd ${GCC_BUILD_DIR} +./scripts/install_env-modules.sh -wget ftp://ftp.gnu.org/gnu/gcc/gcc-${GCC_VERSION}/gcc-${GCC_VERSION}.tar.gz -tar -xf gcc-${GCC_VERSION}.tar.gz -mv gcc-${GCC_VERSION} gcc-${GCC_VERSION}-source -cd gcc-${GCC_VERSION}-source -./contrib/download_prerequisites -cd ../gcc-${GCC_VERSION}-build -${GCC_BUILD_DIR}/gcc-${GCC_VERSION}-source/configure --prefix=${GCC_INSTALL_DIR}/${GCC_VERSION} --enable-languages=c,c++,fortran,go --enable-lto --disable-multilib --enable-checking=release --enable-threads=posix --enable-libstdcxx-debug --enable-__cxa_atexit --enable-plugins --enable-bootstrap -make -j$(nproc) -make -j$(nproc) check -make install +./scripts/install_openssl.sh -## INSTALL ENVIRONMENT MODULES FROM SOURCE -MODULES_BUILD_DIR=${BUILD_LOCATION} -MODULES_INSTALL_DIR=${INSTALL_LOCATION}/modules -mkdir -p ${MODULES_BUILD_DIR} -mkdir -p ${MODULES_INSTALL_DIR} +./scripts/stage0/install_qt.sh -MODULES_VERSION=5.3.1 +./scripts/stage0/install_cmake.sh -cd ${MODULES_BUILD_DIR} -curl -LJO https://github.com/cea-hpc/modules/releases/download/v${MODULES_VERSION}/modules-${MODULES_VERSION}.tar.gz -tar -xf modules-${MODULES_VERSION}.tar.gz -cd modules-${MODULES_VERSION} -mkdir build && cd build -./configure --prefix=${MODULES_INSTALL_DIR}/Modules/${MODULES_VERSION} --modulefilesdir=${MODULES_INSTALL_DIR}/Modules/${MODULES_VERSION}/modulefiles -make -j$(nproc) -make install -ln -s ${MODULES_INSTALL_DIR}/Modules/${MODULES_VERSION}/init/profile.sh /etc/profile.d/modules.sh -ln -s ${MODULES_INSTALL_DIR}/Modules/${MODULES_VERSION}/init/profile.csh /etc/profile.d/modules.csh +./scripts/stage0/install_git.sh -## INSTALL OPENSSL FOR CMAKE -SSL_BUILD_DIR=${BUILD_LOCATION}/openssl -SSL_INSTALL_DIR=${INSTALL_LOCATION}/openssl -mkdir -p ${SSL_BUILD_DIR} -mkdir -p ${SSL_INSTALL_DIR} - -SSL_VERSION=1.1.1w - -cd ${SSL_BUILD_DIR} -wget -c https://www.openssl.org/source/openssl-${SSL_VERSION}.tar.gz -tar -xf openssl-${SSL_VERSION}.tar.gz -cd openssl-${SSL_VERSION} -mkdir build && cd build -../config --prefix=${SSL_INSTALL_DIR}/${SSL_VERSION} --openssldir=${SSL_INSTALL_DIR}/${SSL_VERSION} -make -j$(nproc) -make -j$(nproc) test -make install - -## INSTALL Qt FOR CMAKE-GUI -QT_BUILD_DIR=${BUILD_LOCATION}/qt -QT_INSTALL_DIR=${INSTALL_LOCATION}/qt -mkdir -p ${QT_BUILD_DIR} -mkdir -p ${QT_INSTALL_DIR} - -## SOME COMBINATION WILL INSTALL GL -install build-essential libgl1-mesa-dev libglu1-mesa-dev libglut-dev libgl2-mesa-dev libdrm-dev - -QT_VERSION=5.15.12 -QT_MAJOR_VERSION=$(echo ${QT_VERSION} | cut -d. -f1-2) - -cd ${QT_BUILD_DIR} -wget -c https://download.qt.io/official_releases/qt/${QT_MAJOR_VERSION}/${QT_VERSION}/single/qt-everywhere-opensource-src-${QT_VERSION}.tar.xz -tar -xf qt-everywhere-opensource-src-${QT_VERSION}.tar.xz -cd qt-everywhere-opensource-src-${QT_VERSION} -mkdir build && cd build -../configure -prefix ${QT_INSTALL_DIR}/${QT_VERSION} -make tests -release -opensource -confirm-license -##### THIS COMMAND NEEDS TO BE FINISHED##### - -## INSTALL CMAKE FROM SOURCE -CMAKE_BUILD_DIR=${BUILD_LOCATION}/cmake -CMAKE_INSTALL_DIR=${INSTALL_LOCATION}/cmake -mkdir -p ${CMAKE_BUILD_DIR} -mkdir -p ${CMAKE_INSTALL_DIR} - -VERSIONS=(3.5.2 -3.12.4 -3.17.5 -3.21.3 -3.24.4 -3.28.1) - -OPENSSL_ROOT_DIR=${SSL_INSTALL_DIR}/${SSL_VERSION} -for CMAKE_VERSION in "${strings[@]}"; do -# CMAKE_VERSION=3.21.3 -CMAKE_MAJOR_VERSION=$(echo ${CMAKE_VERSION} | cut -d. -f1-2) -cd ${CMAKE_BUILD_DIR} -wget -c http://www.cmake.org/files/v${CMAKE_MAJOR_VERSION}/cmake-${CMAKE_VERSION}.tar.gz -tar -xf cmake-${CMAKE_VERSION}.tar.gz -mkdir -p cmake-${CMAKE_VERSION}/build && cd cmake-${CMAKE_VERSION}/build - -../configure --prefix=${CMAKE_INSTALL_DIR}/${CMAKE_VERSION} --parallel=$(nproc) -make -j$(nproc) -make install -done - -## INSTALL GIT FROM SOURCE -GIT_BUILD_DIR=${BUILD_LOCATION}/git -GIT_INSTALL_DIR=${INSTALL_LOCATION}/git -mkdir -p ${GIT_BUILD_DIR} -mkdir -p ${GIT_INSTALL_DIR} - -GIT_VERSION=2.11.3 - -cd ${GIT_BUILD_DIR} -wget -c https://mirrors.edge.kernel.org/pub/software/scm/git/git-${GIT_VERSION}.tar.gz -tar -xzf git-${GIT_VERSION}.tar.gz -cd git-${GIT_VERSION} -make configure -./configure --prefix=${GIT_INSTALL_DIR}/${GIT_VERSION} -make -j$(nproc) -make -j$(nproc) test -make install - -## INSTALL LLVM FROM SOURCE -LLVM_BUILD_DIR=${BUILD_LOCATION}/llvm -LLVM_INSTALL_DIR=${INSTALL_LOCATION}/llvm -mkdir -p ${LLVM_BUILD_DIR} -mkdir -p ${LLVM_INSTALL_DIR} - -LLVM_VERSION=13.0.0 - -git clone https://github.com/llvm/llvm-project.git ${LLVM_BUILD_DIR}/llvm-${LLVM_VERSION} -cd ${LLVM_BUILD_DIR}/llvm-${LLVM_VERSION} -git checkout llvmorg-${LLVM_VERSION} -mkdir build && cd build -cmake -S llvm -B build -G "Unix Makefiles" \ - -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld;lldb;openmp;parallel-libs;polly" \ - -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${LLVM_INSTALL_DIR}/${LLVM_VERSION} \ - -DLLVM_INSTALL_UTILS=ON llvm -make -j$(nproc) -make install +./scripts/stage0/install_llvm.sh ## INSTALL OPENMPI FROM SOURCE module load gcc/${GCC_VERSION} cmake/${CMAKE_VERSION} diff --git a/scripts/stage0/install_binutils.sh b/scripts/stage0/install_binutils.sh new file mode 100644 index 0000000..6f21ed1 --- /dev/null +++ b/scripts/stage0/install_binutils.sh @@ -0,0 +1,5 @@ + +BINUTILS_VERSION=2.35 + +wget -c https://ftp.gnu.org/gnu/binutils/binutils-${BINUTILS_VERSION}.tar.gz +tar -xf binutils-${BINUTILS_VERSION}.tar.gz \ No newline at end of file diff --git a/scripts/stage0/install_cmake.sh b/scripts/stage0/install_cmake.sh new file mode 100644 index 0000000..0007f5d --- /dev/null +++ b/scripts/stage0/install_cmake.sh @@ -0,0 +1,26 @@ +## INSTALL CMAKE FROM SOURCE +CMAKE_BUILD_DIR=${BUILD_LOCATION}/cmake +CMAKE_INSTALL_DIR=${INSTALL_LOCATION}/cmake +mkdir -p ${CMAKE_BUILD_DIR} +mkdir -p ${CMAKE_INSTALL_DIR} + +VERSIONS=(3.5.2 +3.12.4 +3.17.5 +3.21.3 +3.24.4 +3.28.1) + +OPENSSL_ROOT_DIR=${SSL_INSTALL_DIR}/${SSL_VERSION} +for CMAKE_VERSION in "${strings[@]}"; do + # CMAKE_VERSION=3.21.3 + CMAKE_MAJOR_VERSION=$(echo ${CMAKE_VERSION} | cut -d. -f1-2) + cd ${CMAKE_BUILD_DIR} + wget -c http://www.cmake.org/files/v${CMAKE_MAJOR_VERSION}/cmake-${CMAKE_VERSION}.tar.gz + tar -xf cmake-${CMAKE_VERSION}.tar.gz + mkdir -p cmake-${CMAKE_VERSION}/build && cd cmake-${CMAKE_VERSION}/build + + ../configure --prefix=${CMAKE_INSTALL_DIR}/${CMAKE_VERSION} --parallel=$(nproc) + make -j$(nproc) + make install +done \ No newline at end of file diff --git a/scripts/stage0/install_env-modules.sh b/scripts/stage0/install_env-modules.sh new file mode 100644 index 0000000..8a64c41 --- /dev/null +++ b/scripts/stage0/install_env-modules.sh @@ -0,0 +1,17 @@ +MODULES_VERSION=5.3.1 + +MODULES_BUILD_DIR=${BUILD_LOCATION} +MODULES_INSTALL_DIR=${INSTALL_LOCATION}/modules +mkdir -p ${MODULES_BUILD_DIR} +mkdir -p ${MODULES_INSTALL_DIR} + +cd ${MODULES_BUILD_DIR} +curl -LJO https://github.com/cea-hpc/modules/releases/download/v${MODULES_VERSION}/modules-${MODULES_VERSION}.tar.gz +tar -xf modules-${MODULES_VERSION}.tar.gz +cd modules-${MODULES_VERSION} +mkdir build && cd build +./configure --prefix=${MODULES_INSTALL_DIR}/Modules/${MODULES_VERSION} --modulefilesdir=${MODULES_INSTALL_DIR}/Modules/${MODULES_VERSION}/modulefiles +make -j$(nproc) +make install +ln -s ${MODULES_INSTALL_DIR}/Modules/${MODULES_VERSION}/init/profile.sh /etc/profile.d/modules.sh +ln -s ${MODULES_INSTALL_DIR}/Modules/${MODULES_VERSION}/init/profile.csh /etc/profile.d/modules.csh \ No newline at end of file diff --git a/scripts/stage0/install_gcc.sh b/scripts/stage0/install_gcc.sh new file mode 100644 index 0000000..6522376 --- /dev/null +++ b/scripts/stage0/install_gcc.sh @@ -0,0 +1,45 @@ +#!/bin/bash -e + +[ "${BASH_SOURCE[0]}" ] && SCRIPT_NAME="${BASH_SOURCE[0]}" || SCRIPT_NAME=$0 +SCRIPT_DIR="$(cd "$(dirname "$SCRIPT_NAME")/.." && pwd -P)" + +VERSIONS=(4.4.7 +4.6.2 +4.8.5 +4.9.3 +5.1.0 +5.2.0 +5.4.0 +6.1.0 +6.3.0 +7.1.0 +7.5.0 +8.4.0 +9.1.0 +10.2.0 +10.3.0 +11.2.0 +12.3.0 +13.1.0) + +source "${SCRIPT_DIR}"/common_vars.sh + +GCC_VERSION=7.5.0 + +GCC_BUILD_DIR=${BUILD_LOCATION}/gcc +GCC_INSTALL_DIR=${INSTALL_LOCATION}/gcc +mkdir -p ${GCC_INSTALL_DIR} +mkdir gcc-${GCC_VERSION}-build + +cd ${GCC_BUILD_DIR} + +wget ftp://ftp.gnu.org/gnu/gcc/gcc-${GCC_VERSION}/gcc-${GCC_VERSION}.tar.gz +tar -xf gcc-${GCC_VERSION}.tar.gz +mv gcc-${GCC_VERSION} gcc-${GCC_VERSION}-source +cd gcc-${GCC_VERSION}-source +./contrib/download_prerequisites +cd ../gcc-${GCC_VERSION}-build +${GCC_BUILD_DIR}/gcc-${GCC_VERSION}-source/configure --prefix=${GCC_INSTALL_DIR}/${GCC_VERSION} --enable-languages=c,c++,fortran,go --enable-lto --disable-multilib --enable-checking=release --enable-threads=posix --enable-libstdcxx-debug --enable-__cxa_atexit --enable-plugins --enable-bootstrap +make -j$(nproc) +make -j$(nproc) check +make install \ No newline at end of file diff --git a/scripts/stage0/install_git.sh b/scripts/stage0/install_git.sh new file mode 100644 index 0000000..fa3d615 --- /dev/null +++ b/scripts/stage0/install_git.sh @@ -0,0 +1,17 @@ +## INSTALL GIT FROM SOURCE +GIT_BUILD_DIR=${BUILD_LOCATION}/git +GIT_INSTALL_DIR=${INSTALL_LOCATION}/git +mkdir -p ${GIT_BUILD_DIR} +mkdir -p ${GIT_INSTALL_DIR} + +GIT_VERSION=2.11.3 + +cd ${GIT_BUILD_DIR} +wget -c https://mirrors.edge.kernel.org/pub/software/scm/git/git-${GIT_VERSION}.tar.gz +tar -xzf git-${GIT_VERSION}.tar.gz +cd git-${GIT_VERSION} +make configure +./configure --prefix=${GIT_INSTALL_DIR}/${GIT_VERSION} +make -j$(nproc) +make -j$(nproc) test +make install \ No newline at end of file diff --git a/scripts/stage0/install_intel.sh b/scripts/stage0/install_intel.sh new file mode 100644 index 0000000..44275ab --- /dev/null +++ b/scripts/stage0/install_intel.sh @@ -0,0 +1,44 @@ +#!/bin/bash -e + +# TODO: Review and if possible fix shellcheck errors. +# shellcheck disable=all + +[ "${BASH_SOURCE[0]}" ] && SCRIPT_NAME="${BASH_SOURCE[0]}" || SCRIPT_NAME=${0} +SCRIPT_DIR="$(cd "$(dirname "${SCRIPT_NAME}")/.." && pwd -P)" + +INTEL_CFLAGS="" +INTEL_LDFLAGS="" +INTEL_LIBS="" + +echo "==================== Finding Intel compiler from system paths ====================" +if [ "${intel_classic}" = "yes" ]; then + check_command icc "intel" && CC="$(realpath $(command -v icc))" || exit 1 + check_command icpc "intel" && CXX="$(realpath $(command -v icpc))" || exit 1 + check_command ifort "intel" && FC="$(realpath $(command -v ifort))" || exit 1 +else + check_command icx "intel" && CC="$(realpath $(command -v icx))" || exit 1 + check_command icpx "intel" && CXX="$(realpath $(command -v icpx))" || exit 1 + check_command ifort "intel" && FC="$(realpath $(command -v ifort))" || exit 1 +fi +F90="${FC}" +F77="${FC}" + +echo "CC is ${CC}" +echo "CXX is ${CXX}" +echo "FC is ${FC}" + +export CC="${CC}" +export CXX="${CXX}" +export FC="${FC}" +export F90="${F90}" +export F77="${F77}" + +export PATH=${pkg_install_dir}/bin:${PATH} +export LD_LIBRARY_PATH=${pkg_install_dir}/lib:${LD_LIBRARY_PATH} +export LD_RUN_PATH=${pkg_install_dir}/lib:${LD_RUN_PATH} +export LIBRARY_PATH=${pkg_install_dir}/lib:${LIBRARY_PATH} +export CPATH=${pkg_install_dir}/include:${CPATH} + +export INTEL_CFLAGS="${INTEL_CFLAGS}" +export INTEL_LDFLAGS="${INTEL_LDFLAGS}" +export INTEL_LIBS="${INTEL_LIBS}" \ No newline at end of file diff --git a/scripts/stage0/install_llvm.sh b/scripts/stage0/install_llvm.sh new file mode 100644 index 0000000..94e9b67 --- /dev/null +++ b/scripts/stage0/install_llvm.sh @@ -0,0 +1,18 @@ +## INSTALL LLVM FROM SOURCE +LLVM_BUILD_DIR=${BUILD_LOCATION}/llvm +LLVM_INSTALL_DIR=${INSTALL_LOCATION}/llvm +mkdir -p ${LLVM_BUILD_DIR} +mkdir -p ${LLVM_INSTALL_DIR} + +LLVM_VERSION=13.0.0 + +git clone https://github.com/llvm/llvm-project.git ${LLVM_BUILD_DIR}/llvm-${LLVM_VERSION} +cd ${LLVM_BUILD_DIR}/llvm-${LLVM_VERSION} +git checkout llvmorg-${LLVM_VERSION} +mkdir build && cd build +cmake -S llvm -B build -G "Unix Makefiles" \ + -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;compiler-rt;libcxx;libcxxabi;libunwind;lld;lldb;openmp;parallel-libs;polly" \ + -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${LLVM_INSTALL_DIR}/${LLVM_VERSION} \ + -DLLVM_INSTALL_UTILS=ON llvm +make -j$(nproc) +make install diff --git a/scripts/stage0/install_openssl.sh b/scripts/stage0/install_openssl.sh new file mode 100644 index 0000000..ed961da --- /dev/null +++ b/scripts/stage0/install_openssl.sh @@ -0,0 +1,16 @@ +SSL_VERSION=1.1.1w + +SSL_BUILD_DIR=${BUILD_LOCATION}/openssl +SSL_INSTALL_DIR=${INSTALL_LOCATION}/openssl +mkdir -p ${SSL_BUILD_DIR} +mkdir -p ${SSL_INSTALL_DIR} + +cd ${SSL_BUILD_DIR} +wget -c https://www.openssl.org/source/openssl-${SSL_VERSION}.tar.gz +tar -xf openssl-${SSL_VERSION}.tar.gz +cd openssl-${SSL_VERSION} +mkdir build && cd build +../config --prefix=${SSL_INSTALL_DIR}/${SSL_VERSION} --openssldir=${SSL_INSTALL_DIR}/${SSL_VERSION} +make -j$(nproc) +make -j$(nproc) test +make install \ No newline at end of file diff --git a/scripts/stage0/install_qt.sh b/scripts/stage0/install_qt.sh new file mode 100644 index 0000000..bcfea9f --- /dev/null +++ b/scripts/stage0/install_qt.sh @@ -0,0 +1,21 @@ +## INSTALL Qt FOR CMAKE-GUI +QT_BUILD_DIR=${BUILD_LOCATION}/qt +QT_INSTALL_DIR=${INSTALL_LOCATION}/qt +mkdir -p ${QT_BUILD_DIR} +mkdir -p ${QT_INSTALL_DIR} + +## SOME COMBINATION WILL INSTALL GL +# install build-essential libgl1-mesa-dev libglu1-mesa-dev libglut-dev libgl2-mesa-dev libdrm-dev + +# wget -c https://qt.mirror.constant.com/archive/online_installers/4.6/qt-unified-linux-x64-4.6.1-online.run + +QT_VERSION=5.15.12 +QT_MAJOR_VERSION=$(echo ${QT_VERSION} | cut -d. -f1-2) + +cd ${QT_BUILD_DIR} +wget -c https://download.qt.io/official_releases/qt/${QT_MAJOR_VERSION}/${QT_VERSION}/single/qt-everywhere-opensource-src-${QT_VERSION}.tar.xz +tar -xf qt-everywhere-opensource-src-${QT_VERSION}.tar.xz +cd qt-everywhere-opensource-src-${QT_VERSION} +mkdir build && cd build +../configure -prefix ${QT_INSTALL_DIR}/${QT_VERSION} -make tests -release -opensource -confirm-license +##### THIS COMMAND NEEDS TO BE FINISHED##### \ No newline at end of file diff --git a/scripts/stage0/install_stage0.sh b/scripts/stage0/install_stage0.sh new file mode 100644 index 0000000..3cfde96 --- /dev/null +++ b/scripts/stage0/install_stage0.sh @@ -0,0 +1,17 @@ +#!/bin/bash -e + +# TODO: Review and if possible fix shellcheck errors. +# shellcheck disable=all + +./scripts/stage0/install_env-modules.sh +./scripts/stage0/install_gcc.sh +./scripts/stage0/install_binutils.sh +./scripts/stage0/install_llvm.sh +./scripts/stage0/install_intel.sh +./scripts/stage0/setup_buildtools.sh +./scripts/stage0/install_openssl.sh +./scripts/stage0/install_git.sh +./scripts/stage0/install_qt.sh +./scripts/stage0/install_cmake.sh + +#EOF \ No newline at end of file diff --git a/scripts/stage0/setup_buildtools.sh b/scripts/stage0/setup_buildtools.sh new file mode 100644 index 0000000..00ca109 --- /dev/null +++ b/scripts/stage0/setup_buildtools.sh @@ -0,0 +1,72 @@ +#!/bin/bash -e + +# TODO: Review and if possible fix shellcheck errors. +# shellcheck disable=all + +[ "${BASH_SOURCE[0]}" ] && SCRIPT_NAME="${BASH_SOURCE[0]}" || SCRIPT_NAME=$0 +SCRIPT_DIR="$(cd "$(dirname "${SCRIPT_NAME}")/.." && pwd -P)" + +source ${SCRIPT_DIR}/common_vars.sh +source ${SCRIPT_DIR}/tool_kit.sh +source ${SCRIPT_DIR}/signal_trap.sh +source ${INSTALLDIR}/toolchain.conf +source ${INSTALLDIR}/toolchain.env + +for ii in $tool_list; do + load "${BUILDDIR}/setup_${ii}" +done + +# ------------------------------------------------------------------------ +# Install or compile packages using newly installed tools +# ------------------------------------------------------------------------ + +# Setup compiler flags, leading to nice stack traces on crashes but still optimised +if [ "${with_intel}" != "__DONTUSE__" ]; then + CFLAGS="-O2 -fPIC -fp-model=precise -funroll-loops -g -qopenmp -qopenmp-simd -traceback" + if [ "${TARGET_CPU}" = "native" ]; then + CFLAGS="${CFLAGS} -xHost" + elif [ "${TARGET_CPU}" = "generic" ]; then + CFLAGS="${CFLAGS} -mtune=${TARGET_CPU}" + else + CFLAGS="${CFLAGS} -march=${TARGET_CPU} -mtune=${TARGET_CPU}" + fi + FFLAGS="${CFLAGS}" +else + CFLAGS="-O2 -fPIC -fno-omit-frame-pointer -fopenmp -g" + if [ "${TARGET_CPU}" = "generic" ]; then + CFLAGS="${CFLAGS} -mtune=generic ${TSANFLAGS}" + else + CFLAGS="${CFLAGS} -march=${TARGET_CPU} -mtune=${TARGET_CPU} ${TSANFLAGS}" + fi + FFLAGS="${CFLAGS} -fbacktrace" +fi +CXXFLAGS="${CFLAGS}" +F77FLAGS="${FFLAGS}" +F90FLAGS="${FFLAGS}" +FCFLAGS="${FFLAGS}" + +if [ "${with_intel}" == "__DONTUSE__" ]; then + export CFLAGS="$(allowed_gcc_flags ${CFLAGS})" + export FFLAGS="$(allowed_gfortran_flags ${FFLAGS})" + export F77FLAGS="$(allowed_gfortran_flags ${F77FLAGS})" + export F90FLAGS="$(allowed_gfortran_flags ${F90FLAGS})" + export FCFLAGS="$(allowed_gfortran_flags ${FCFLAGS})" + export CXXFLAGS="$(allowed_gxx_flags ${CXXFLAGS})" +else + # TODO Check functions for allowed Intel compiler flags + export CFLAGS + export FFLAGS + export F77FLAGS + export F90FLAGS + export FCFLAGS + export CXXFLAGS +fi +export LDFLAGS="${TSANFLAGS}" + +# get system arch information using OpenBLAS prebuild +${SCRIPTDIR}/get_openblas_arch.sh +load "${BUILDDIR}/openblas_arch" + +write_toolchain_env "${INSTALLDIR}" + +#EOF \ No newline at end of file diff --git a/scripts/stage1/install_openmpi.sh b/scripts/stage1/install_openmpi.sh new file mode 100644 index 0000000..c1c314b --- /dev/null +++ b/scripts/stage1/install_openmpi.sh @@ -0,0 +1,46 @@ +#!/bin/bash + +if [[ "$BASH_SOURCE" == "$0" ]]; then + BUILD_LOCATION=${PWD} + INSTALL_LOCATION=/people/parl703 + TARGET_CPU="native" + CFLAGS="-O2 -fPIC -fno-omit-frame-pointer -fopenmp -g -march=${TARGET_CPU} -mtune=${TARGET_CPU}" + FFLAGS="${CFLAGS} -fbacktrace" + CXXFLAGS="${CFLAGS}" + F77FLAGS="${FFLAGS}" + F90FLAGS="${FFLAGS}" + FCFLAGS="${FFLAGS}" + LOG_LINES=200 +else + source ${BUILD_LOCATION}/build.env + ROOT=${PWD} +fi + +MPI_VERSION=4.1.5 + +OPENMPI_BUILD_DIR=${BUILD_LOCATION}/openmpi +OPENMPI_INSTALL_DIR=${INSTALL_LOCATION}/openmpi/${MPI_VERSION} +mkdir -p ${OPENMPI_BUILD_DIR} +mkdir -p ${OPENMPI_INSTALL_DIR} + +cd ${OPENMPI_BUILD_DIR} +wget -c https://www.openmpi.org/openmpi-${MPI_VERSION}.tar.gz +tar -xf openmpi-${MPI_VERSION}.tar.gz +cd openmpi-${MPI_VERSION} +mkdir build && cd build + +if [ "MPI_ENABLED" = false ]; then + exit 1 +fi + +echo ${FFTW_INSTALL_DIR} +./configure --prefix=${FFTW_INSTALL_DIR} ${FFTW_FLAGS} +make -j$(nproc) +make -j$(nproc) check > check.log 2>&1 || tail -n ${LOG_LINES} check.log +make -j$(nproc) install > install.log 2>&1 || tail -n ${LOG_LINES} install.log + +if [[ "$BASH_SOURCE" != "$0" ]]; then + cd ${ROOT} +else + echo "Exiting ..." +fi diff --git a/scripts/install_fftw.sh b/scripts/stage3/install_fftw.sh similarity index 98% rename from scripts/install_fftw.sh rename to scripts/stage3/install_fftw.sh index 53e8d67..b992a5a 100644 --- a/scripts/install_fftw.sh +++ b/scripts/stage3/install_fftw.sh @@ -5,6 +5,7 @@ if [[ "$BASH_SOURCE" == "$0" ]]; then INSTALL_LOCATION=/avfs/people/parl703 LOG_LINES=200 else + source ${BUILD_LOCATION}/build.env ROOT=${PWD} fi diff --git a/scripts/tool_kit.sh b/scripts/tool_kit.sh new file mode 100644 index 0000000..8d5a540 --- /dev/null +++ b/scripts/tool_kit.sh @@ -0,0 +1,102 @@ +find_mpi() { + # for MPI, we try to detect system MPI variant + if (command -v mpiexec > /dev/null 2>&1); then + export MPI_ENABLED = true + # check if we are dealing with openmpi, mpich or intelmpi + if (mpiexec --version 2>&1 | grep -s -q "HYDRA"); then + echo "MPI is detected and it appears to be MPICH" + export MPI_MODE="mpich" + # check openmpi version as reported by mpiexec + export MPI_VERSION=$(mpiexec --version | grep "Version:" | awk '{print $2}') + with_mpich="__SYSTEM__" + elif (mpiexec --version 2>&1 | grep -s -q "OpenRTE"); then + echo "MPI is detected and it appears to be OpenMPI" + export MPI_MODE="openmpi" + # check openmpi version as reported by mpiexec + export MPI_VERSION=$(mpiexec --version 2>&1 | grep "(Open MPI)" | awk '{print $4}') + with_openmpi="__SYSTEM__" + elif (mpiexec --version 2>&1 | grep -s -q "Intel"); then + echo "MPI is detected and it appears to be Intel MPI" + export MPI_MODE="intelmpi" + # check intelmpi version as reported by mpiicc + export MPI_VERSION=$(mpiexec --version | grep "Version" | awk '{print $8"."$10}') + with_intelmpi="__SYSTEM__" + else # default to mpich + echo "MPI is detected and defaults to MPICH" + export MPI_MODE="mpich" + with_mpich="__SYSTEM__" + fi + else + report_warning $LINENO "No MPI installation detected (ignore this message in Cray Linux Environment or when MPI installation was requested)." + export MPI_MODE="" + fi +} + +# helper routine to check integrity of downloaded files +checksum() { + local __filename=$1 + local __sha256=$2 + local __shasum_command='sha256sum' + # check if we have sha256sum command, Mac OS X does not have + # sha256sum, but has an equivalent with shasum -a 256 + command -v "$__shasum_command" > /dev/null 2>&1 || + __shasum_command="shasum -a 256" + if echo "$__sha256 $__filename" | ${__shasum_command} --check; then + echo "Checksum of $__filename Ok" + else + rm -v ${__filename} + report_error "Checksum of $__filename could not be verified, abort." + return 1 + fi +} + +# verify the checksums inside the given checksum file +verify_checksums() { + local __checksum_file=$1 + local __shasum_command='sha256sum' + + # check if we have sha256sum command, Mac OS X does not have + # sha256sum, but has an equivalent with shasum -a 256 + command -v "$__shasum_command" > /dev/null 2>&1 || + __shasum_command="shasum -a 256" + + ${__shasum_command} --check "${__checksum_file}" > /dev/null 2>&1 +} + +# write a checksum file $1 containing checksums for each given file $2, $3, ... (plus the $VERSION_FILE) +write_checksums() { + local __checksum_file=$1 + shift # remove output file from arguments to be able to pass them along properly quoted + local __shasum_command='sha256sum' + + # check if we have sha256sum command, Mac OS X does not have + # sha256sum, but has an equivalent with shasum -a 256 + command -v "$__shasum_command" > /dev/null 2>&1 || + __shasum_command="shasum -a 256" + + ${__shasum_command} "${VERSION_FILE}" "$@" > "${__checksum_file}" +} + +# generate a filtered toolchain.env +write_toolchain_env() { + local __installdir=$1 + + # run the following in a subshell to not affect the currently running shell + # we do not need to achieve complete filtering, it is sufficient to + # remove problematic variables (TERM/TERMCAP/COLORTERM) which may trigger + # 'too many arguments' (since the environment vars are stored in the same memory block as command line arguments) + # or which may not be valid anymore the next time the user runs the toolchain scripts, + # like the proxy vars which may affect fetching tarballs + ( + unset COLORTERM DISPLAY EDITOR LESS LESSOPEN LOGNAME LS_COLORS PAGER + unset TERM TERMCAP USER + unset ftp_proxy http_proxy no_proxy + unset GPG_AGENT_INFO SSH_AGENT_PID SSH_AUTH_SOCK SSH_CLIENT SSH_CONNECTION SSH_TTY + unset LS_COLORS LS_OPTIONS + unset STY WINDOW XAUTHORITY + unset XDG_CURRENT_DESKTOP XDG_RUNTIME_DIR XDG_SEAT XDG_SESSION_CLASS XDG_SESSION_DESKTOP XDG_SESSION_ID XDG_SESSION_TYPE XDG_VTNR XDG_CONFIG_DIRS XDG_DATA_DIRS + unset DBUS_SESSION_BUS_ADDRESS + + export -p + ) > "${__installdir}/toolchain.env" +} \ No newline at end of file